R:等系数的优化问题

问题描述

我想优化一个简单的函数,例如:

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)