【问题标题】:Constrained Optimization in R using constOptim使用 constOptim 在 R 中进行约束优化
【发布时间】:2020-11-24 20:46:43
【问题描述】:

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

f(x1,x2,x3) = 1300x1 + 600x2 + 500x3

受以下限制

300x1 + 150x2 + 100x3

90x1 + 30x2 + 40x3

x1

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)

【问题讨论】:

    标签: r optimization linear-algebra linear-programming


    【解决方案1】:

    文档说:

    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 中。

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

    【讨论】:

    • 感谢欧文的回复。我已经使用 Excel Solver 工具来查找我需要的值,但我想学习如何在 R 中执行此操作。如何最好地将下限合并到 hin 中?您还推荐哪些其他线性求解器?再次感谢。
    • (1) 只需将边界视为不等式约束。 (2) LP(线性规划)求解器可用于 R。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 2015-06-09
    • 2011-07-23
    • 2012-12-08
    • 1970-01-01
    • 2018-04-21
    相关资源
    最近更新 更多