在ILP问题中,是否可以限制/惩罚使用的决策变量的数量?

时间:2019-04-04 11:54:30

标签: optimization linear-programming integer-programming

我正在尝试设置对使用的决策变量数量有限制的最小化问题。

是否可以在线性编程框架中执行此操作?还是我被迫使用更复杂的优化框架?

假设所有x是非负整数:

x1, x2, x3, x4, x5 >= 0

1)约束:是否可以设置问题,使x的不超过3个可以为非零?例如如果

x1 = 1, x2 = 2, x3 = 3 then x4 = 0 and x5 = 0 

2)处罚:假设有3种可能的解决方案:

a) x1 = 1, x2 = 2, x3 = 3, x4 = 0, x5 = 0
b) x1 = 2, x2 = 3, x3 = 0, x4 = 0, x5 = 0
c) x1 = 3, x2 = 0, x3 = 0, x4 = 0, x5 = 0

由于简单起见,解决方案(c)优于解决方案(b),而解决方案(b)优于解决方案(a),即“使用”较少的决策变量是优选的。

在两个问题中,我都将问题简化为5个x,但实际上我有100个x可以优化。

我可以看到如何在使用指标/增量变量的通用优化框架中执行此操作,但无法弄清楚如何在线性编程中执行此操作。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

您可以建立自己的指标(并且对某些非常具体的问题也没有限制)。

假设,所有整数变量ub_i都有一个上限x0, x1, ..., xn,引入了二进制变量u0, u1, ... un并发布了新的约束,例如:

u1 * ub_1 >= x1
u2 * ub_2 >= x2
...

(ub_x常量通常称为 big-M 常量;但是我们将它们保持尽可能小以更好地放松)

然后您的基数约束很简单:

sum(u) <= 3

当然,您也可以在可能要使用的任何惩罚设计中使用这些u变量。