我正在尝试使用lpSolveAPI以下列形式创建优化问题。
最大10(x 1 + x 2 )* S 1 + 20(x 1 + x 2 )* S 2
sub.to。 S 1 + S 2 < = 1#这些是二元变量。
2 * x 1 + 3 * x 2 < = 30
1 * x 1 + 2 * x 2 < = 10
x 1 & x 2 是整数。
我的问题是如何创建这个乘法变量?我遇到变量的所有例子都是线性分配的。如前所述,我正在使用来自R的lpSolveAPI。
答案 0 :(得分:1)
听起来你有一个总和像(10 * x1 + 10 * x2)* S1 +(20 * x1 + 20 * x2)* S2 + ...带有二进制S1,S2,......你是试图最大化这个词。
这样做的一种方法是定义变量V1,V2,...,每个S1,S2,......变量一个。然后,您可以添加以下约束:
V1 <= 10*x1 + 10*x2
V1 <= M*S1
V2 <= 20*x1 + 20*x2
V2 <= M*S2
...
这里,M是一个大的正常数。无论S1的值如何,变量V1必须满足V1 <= 10 * x1 + 10 * x2。如果S1 = 0,那么我们另外具有V1 <= 0。如果S1 = 1,则我们另外具有V1 <= M.然而,如果M足够大,那么这将永远不是约束约束。
现在,我们可以用以下内容替换目标:
max V1 + V2 + ...
由于我们正在最大化,因此V变量在未设置相应的S变量时将取值0,否则它将在目标中获取您想要的值。