我正在尝试为与特定变量的排名相关的约束编写混合整数线性编程,如下所示:
我有X1,X2,X3,X4作为决策变量 .
有一个约束要求将i定义为X1的等级(例如,如果X1是X1,X2,X3,X4中的最大数,则i = 1;如果X1是第二大数,那么i = 2,如果X1是第三大数,则i = 3,否则i = 4)
我怎么能把这个约束写成混合整数线性规划?
谢谢!
不那么容易 . 这是一个尝试:
首先为 i=2,3,4 引入二进制变量 y(i)
i=2,3,4
y(i)
然后我们可以写:
x(1) >= x(i) - (1-y(i))*M i=2,3,4 x(1) <= x(i) + y(i)*M i=2,3,4 rank = 4 - sum(i,y(i)) y(i) ∈ {0,1} i=2,3,4
这里 M 是一个足够大的常量(一个很好的选择是数据的最大范围) . 如果求解器支持指标约束,则可以简化一些事情 .
M
一个小例子说明它有效:
---- 36 VARIABLE x.L i1 6.302, i2 8.478, i3 3.077, i4 6.992 ---- 36 VARIABLE y.L i3 1.000 ---- 36 VARIABLE rank.L = 3.000
1 回答
不那么容易 . 这是一个尝试:
首先为
i=2,3,4
引入二进制变量y(i)
然后我们可以写:
这里
M
是一个足够大的常量(一个很好的选择是数据的最大范围) . 如果求解器支持指标约束,则可以简化一些事情 .一个小例子说明它有效: