r - 如何优化 R 中的多个数组?
问题描述
我需要使用 R 语言最小化基于Hsieh Model的函数。主要目标是最小化依赖于一组其他函数的距离函数。
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 算法完成。我是优化的初学者,并感谢任何帮助。我的完整代码在这里。
解决方案
这样做时,数组的维度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))
才能获得一个数组。
推荐阅读
- c++ - 循环参数包 lambda
- next.js - NextJS 特殊字符路由在浏览器中不起作用
- hyperledger-fabric - Hyperledger Fabric Playground 问题
- vb.net - TheTVDB API - 开始
- c - 华氏到摄氏度,很好奇为什么它没有编译
- python - Mac Catalina / Python 3.8.3 / Speech Recognition / 无法将麦克风输入到 VS Code 而代码在终端上运行良好
- python - 使用 Tweepy 检索包含帐户 ID 的特定主题标签的所有推文
- material-ui - JSS:两次应用css属性
- sorting - 使用 CUDA/Thrust 对多个数组进行排序
- physics - 加压罐的排气时间