问题描述
max = a1 * x1 + a2 * x2 + a3 * x3
其中 x 是预先知道的和 a1 + a2 + a3 = limit
。
此外,我需要在 a1 = a2 = a3
处添加一个约束。有人会知道如何使用 lpSolveAPI
实现这一点吗?这是我已经拥有的:
library(lpSolveAPI)
limit = 50
a <- c(1.5,1.6,2.5)
my.lp <- make.lp(0,3)
set.objfn(my.lp,a)
add.constraint(my.lp,1:3,"=",limit)
lp.control(my.lp,sense='max')
my.lp
solve(my.lp)
目前,我似乎找不到添加约束 a1 = a2 = a3
(或 C1 = C2 = C3
)的方法。
解决方法
您不能添加具有两个等号的约束。你可以拆分成
a1 - a2 = 0
a1 - a3 = 0
可以使用
add.constraint(my.lp,c(1,-1,0),"=",0)
add.constraint(my.lp,-1),0)
但这种优化对我来说没有意义,因为你只有一个可行的解决方案,所以没有什么可以优化的。
编辑: 我刚刚注意到您的约束不正确。你所做的基本上是
x1 + 2 * x2 + 3 * x3 = limit
你需要把它改成
add.constraint(my.lp,rep(1,3),limit)