【发布时间】:2020-06-14 23:20:26
【问题描述】:
我有一个函数可以根据输入计算模型的“值”。
ModelValue <- function(x, y, z) {
#long, most likely non-linear stuff
return(Value)}
x 是一个介于 0-1 之间的数字,并且根据我正在测试的模型固定。即,x 恰好是 0.56。
y 和 z 是我想要优化以最大化价值的 4 个阈值组。
y=c(pa, pb, pc, pd) and z=c(ta, tb, tc, td), subject to:
all are => 0.001,
all are =<0.997,
pa + pb + pc + pd == 1; and
ta + tb + tc + td == 1
我尝试过查看 optimx 和 spg; (这是我所能得到的)但无论我做什么,我似乎都无法创建一个优化函数,只要我尝试提及 pa、pb、pc 等,我就不会感到害怕。我没有不明白如何告诉模型要优化哪些变量...
OptimizeModel <- function(x) {
p0=1 #initial guess
fn = ModelValue(x, y, z)
lo <- c(0.001, 0.001, 0.001, 0.001,
0.001, 0.001, 0.001, 0.001) # lower limits for parameters
hi <- c(0.997, 0.997, 0.997, 0.997,
0.997, 0.997, 0.997, 0.997) # upper limits for parameters
y<- c(pa, pb, pc, pd)
z<- c(ta, tb, tc, td)
pa + pb + pc + pd = 1
ta + tb + tc + td = 1
# pa > 0.001
# pb > 0.001
# pc > 0.001
# pd > 0.001
# ta > 0.001
# tb > 0.001
# tc > 0.001
# td > 0.001
ans1 <- spg(par=p0,
fn=fn,
lower=lo,
upper=hi,
control=list(maximize=TRUE, trace=FALSE))
return (ans1)
}
当我尝试时:
OptimizeModel(0.56)
#Error in OptimizeModel(0.56) : object 'pa' not found
【问题讨论】:
标签: r optimization nonlinear-optimization