首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于constOptim的R中约束优化

基于constOptim的R中约束优化
EN

Stack Overflow用户
提问于 2020-11-24 20:46:43
回答 1查看 224关注 0票数 0

我试图找出这个目标函数的最大值:

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-123.272252e-125.548419e-14,总价值为-1.428002e-08。

我刚认识R.我做错什么了?谢谢。

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

发布于 2020-11-25 00:51:44

文件上说:

代码语言:javascript
复制
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-125.548419e-14。您的下界需要合并到hin中。

请注意,对于线性问题有更好的线性求解者。将线性问题传递给非线性求解者不是最优的.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64994582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档