R中的优化:constrOptim不收敛
我正在寻找一种方法来优化R中具有多个约束的函数。使用Excel是小菜一碟,但我不能让它在R中工作。 我想要的是找到一组使函数最大化的参数,条件是参数应该是非递增的,并且每个I的参数x_I…x_max之和是有界的。 我写了一个简单的例子。它适用于两个参数,但不适用于三个参数。对于三个参数,优化过程似乎什么都没有做。 在现实生活中,我想使用12到120个参数,所以我有点担心它不能与3。。。 所以欢迎任何帮助。。。并提前感谢您(最终)的回复 两个参数的代码为(工作) 3个参数的代码为(不工作)R中的优化:constrOptim不收敛,r,R,我正在寻找一种方法来优化R中具有多个约束的函数。使用Excel是小菜一碟,但我不能让它在R中工作。 我想要的是找到一组使函数最大化的参数,条件是参数应该是非递增的,并且每个I的参数x_I…x_max之和是有界的。 我写了一个简单的例子。它适用于两个参数,但不适用于三个参数。对于三个参数,优化过程似乎什么都没有做。 在现实生活中,我想使用12到120个参数,所以我有点担心它不能与3。。。 所以欢迎任何帮助。。。并提前感谢您(最终)的回复 两个参数的代码为(工作) 3个参数的代码为(不工作) 其他人
其他人可能能够提供更多的洞察力,但您的起始值在可行区域内可能不够远 如您所述,这不会产生预期的结果:
ui1 <-matrix(c(-1,0,0,1,0,-1,-1,0,-1,1,-1,-1,-1,0,-1),ncol =3)
ci1 <-c(-100,-70,0,0,0)-0.0000001
init1 <-c(65,35,0)
(ui1 %*% init1) - ci1
tst <- constrOptim(init1, Opm, grad = NULL, ui = ui1, ci = ci1)
round(tst$par)
[1] 65 35 0
> sum(tst$par)
[1] 100
> tst$par
[1] 50 50
Opm <- function (p)
{
calc <- -p[1]-2*p[2]-3*p[3]
print(calc)
return (calc)
}
ui1 <-matrix(c(-1,0,0,1,0,-1,-1,0,-1,1,-1,-1,-1,0,-1),ncol =3)
ci1 <-c(-100,-70,0,0,0)-0.0000001
init1 <-c(65,35,0)
(ui1 %*% init1) - ci1
tst <- constrOptim(init1, Opm, grad = NULL, ui = ui1, ci = ci1)
> tst$par
[1] 6.500000e+01 3.500000e+01 9.685755e-08
ui1 <-matrix(c(-1,0,0,1,0,-1,-1,0,-1,1,-1,-1,-1,0,-1),ncol =3)
ci1 <-c(-100,-70,0,0,0)-0.0000001
init1 <-c(65,35,0)
(ui1 %*% init1) - ci1
tst <- constrOptim(init1, Opm, grad = NULL, ui = ui1, ci = ci1)
round(tst$par)
[1] 65 35 0
ci1 <-c(-100,-70,0,0,0)-0.00001
init1 <-c(65,35,0)
(ui1 %*% init1) - ci1
tst <- constrOptim(init1, Opm, grad = NULL, ui = ui1, ci = ci1)
round(tst$par)
[1] 50 50 0