整数规划目标中的两变量乘积

时间:2017-12-31 13:17:46

标签: mathematical-optimization linear-programming lpsolve integer-programming

我正在尝试使用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。

1 个答案:

答案 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,否则它将在目标中获取您想要的值。