整数规划中两个变量的乘积 Objective

Product of Two Variable in Integer Programming Objective

我正在尝试使用 lpSolveAPI 创建以下形式的优化问题。

最大 10(x1 + x2) * S1 + 20( x1 + x2) * S2

sub.to。 S1 + S2 <= 1 # 这些是二进制变量。

2 * x1 + 3 * x2 <= 30

1 * x1 + 2 * x2 <= 10

x1 & x2 是整数。

我的问题是如何创建这个乘法变量?我遇到的所有变量示例都是线性分配的。如前所述,我正在使用 R 中的 lpSolveAPI。

听起来你的总和类似于 (10*x1 + 10*x2) * S1 + (20*x​​1 + 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 足够大,则这永远不会成为绑定约束。

现在,我们可以将 objective 替换为:

max V1 + V2 + ...

由于我们是最大化的,当对应的S变量没有设置时,V变量取值为0,否则取objective中你想要的值。