如何在R中优化多个数组?

问题描述 投票:0回答:1

我需要将一个基于 谢氏模型,使用R语言。主要目标是最小化一个依赖于一组其他函数的距离函数。

obj = function(x1){
  s = sf()
  h_til = h_tilf()
  w_til = w_tilf(x1)
  w_r = w_rf()
  p_ir = p_irf()
  #H_tr = H_trf(x1)
  W = Wf(x1)      
  f1 = matrix(0, i, r)
  f2 = matrix(0, i, r)    

  for (c in 1:i){
    for (j in 1:r){
      f1[c, j] = ( (W[c, j] - W_t[c, j]) / W_t[c, j] ) ** 2
      f2[c, j] = ( (p_ir[c, j] - p_t[c, j])  /  p_t[c, j] ) ** 2
}
}
    d1 = sum(f1)
    d2 = sum(f2)
    D = d1 + d2    
    return(D)  
}

因此,我的算法必须找到三个参数(w, tau_w, tau_h)来最小化这个距离函数。这三个参数是有i行和r列的数组。给定的。

w = runif(i*r, 0, 1)
tau_w =  runif(i*r, -1, 1)
tau_h = runif(i*r, -1, 1)

x1 = array( c(tau_w, tau_h, w), dim = c(i, r, 3))

我试图用optimx和Rsolnp库来解决这个问题。


res = optim(x1,      #starting values 
            obj)   #function to optimise

但是我得到了这个错误。

Error in x1[c, j, 1] : incorrect number of dimensions

这个最小化通常是用Nelder-Mead算法来完成的.我是优化方面的初学者,感谢任何帮助。我的完整代码是 此处.

r optimization multidimensional-array
1个回答
0
投票

数组的尺寸 x1 失之东隅收之桑榆 optim(x1, obj). 所以你得到的错误是由 w_tilf(x1) 因为它涉及 x1[c,j,1].

在开始的时候重建数组。obj 功能。

obj = function(x1){
  x1 = array(x1, dim = c(i, r, 3))
  s = sf()
  ......
} 

那么 opt <- optim(x1, obj) 现在应该可以了。它将返回解决方案中的 opt$par 字段作为一个向量,你将不得不进行 array(opt$par, dim = c(i, r, 3)) 以获得一个数组。

© www.soinside.com 2019 - 2024. All rights reserved.