整数规划中两个变量的乘积 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*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 足够大,则这永远不会成为绑定约束。
现在,我们可以将 objective 替换为:
max V1 + V2 + ...
由于我们是最大化的,当对应的S变量没有设置时,V变量取值为0,否则取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*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 足够大,则这永远不会成为绑定约束。
现在,我们可以将 objective 替换为:
max V1 + V2 + ...
由于我们是最大化的,当对应的S变量没有设置时,V变量取值为0,否则取objective中你想要的值。