r - 使用 constOptim 在 R 中进行约束优化
问题描述
我试图找到这个目标函数的最大值:
f(x1,x2,x3) = 1300x1 + 600x2 + 500x3
受以下约束
300x1 + 150x2 + 100x3 <= 4,000
90x1 + 30x2 + 40x3 <= 1,000
x1 <= 5
x1, x2, x3 >= 0
下面是我正在使用的代码,它没有返回我正在寻找的值。变量的输出为 9.453022e-12 3.272252e-12 5.548419e-14,总值为 -1.428002e-08。
我是 R 新手。我做错了什么?谢谢你。
f=function(x) -(1300*x[1]+600*x[2]+500*x[3]) # minimize -f(x,y,z)
inequalities=function(x){ #define the ineqaulities function
h=0
h[1]=-(300*x[1]+150*x[2]+100*x[3]-4000)
h[2]=-(90*x[1]+30*x[2]+40*x[3]-1000)
h[3]=-(1*x[1]+0*x[2]+0*x[3]-5)
return(h)}
g=function(x){ #x,y,z > 0
h=0
h[1]=x[1]
h[2]=x[2]
h[3]=x[3]
return(h)}
p0=c(0,0,0) #give the starting point
y=constrOptim.nl(p0,f,hin=inequalities,heq=g);
print(y$par)
print(y$value)
解决方案
文档说:
heq: a vector function specifying equality constraints such that heq[j] = 0 for all j
x[1],x[2],x[3] >= 0
因此,您尝试指定的下限实际上被解释为x[1],x[2],x[3] = 0
. 因此解决方案:9.453022e-12、3.272252e-12 5.548419e-14。您的下限需要包含在hin
.
请注意,对于线性问题,有更好的线性求解器。将线性问题传递给非线性求解器并不是最优的。
推荐阅读
- javascript - 用逻辑方法显示图像
- javascript - 防止 HTML 在 div 上放置其他已被删除的位置
- ms-access - 运行某些(不是全部)查询时拆分后访问崩溃
- ansible - 如何填充存储在 Ansible 变量中的 Jinja2 模板?
- c++ - 函数和内部函数相同的参数
- symfony - 如何使用仅添加选项的 Symfony EntityType?
- sql - 创建一个包含许多 SUBSTR 的选择 COUNT
- javascript - 数据表不会被重绘
- python - 我在哪里可以找到 os.urandom() 的源代码?
- python - 在 vlc 中使用 python 启动和播放视频