Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中的优化:constrOptim不收敛_R - Fatal编程技术网

R中的优化:constrOptim不收敛

R中的优化:constrOptim不收敛,r,R,我正在寻找一种方法来优化R中具有多个约束的函数。使用Excel是小菜一碟,但我不能让它在R中工作。 我想要的是找到一组使函数最大化的参数,条件是参数应该是非递增的,并且每个I的参数x_I…x_max之和是有界的。 我写了一个简单的例子。它适用于两个参数,但不适用于三个参数。对于三个参数,优化过程似乎什么都没有做。 在现实生活中,我想使用12到120个参数,所以我有点担心它不能与3。。。 所以欢迎任何帮助。。。并提前感谢您(最终)的回复 两个参数的代码为(工作) 3个参数的代码为(不工作) 其他人

我正在寻找一种方法来优化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