整数规划:整数变量的模型唯一性
Integer Programming: Model uniqueness of integer variables
假设整数规划有三个整数变量,因此:
a \in {1,2,3}
b \in {1,2,3}
c \in {1,2,3}
现在我想建模所有变量都不同。显然,我可以为每个组合执行以下操作(在本例中为三个)。我用a和b显示它。
a <= b - 1 + bin1 * bigM
a >= b + 1 - (1 - bin1) * bigM
bin1 \in {0, 1}
有没有更简单的方法而不产生大量新约束、bigM 和二进制变量?
抱歉,不是真的。这种构造通常称为 all-different constraint
。这是一个参考:
H.P.Williams, Hong Yan, "Representations of the all-different
Predicate of Constraint Satisfaction in Integer Programming," INFORMS
Journal on Computing, Vol. 13 (2001) 96-103
另请参阅讨论 here。
我发现,也可以执行以下操作:
x_j \in {1,2,3} for j \in {1,2,3}
b_i_j \in {0,1} for i,j \in {1,2,3}
\sum_{i=1}^{3} i * b_i_j = x_j for j \in {1,2,3}
\sum_{i=1}^{3} b_i_j = 1 for j \in {1,2,3}
嗯,显然现在有 j^2
个新的二进制变量。但是您有 x_j
变量以及 b_i_j
变量,因此您可以更灵活地应对各种约束。
all-different constraint:
\sum_{j=1}^{3} b_i_j = 1 for i \in {1,2,3}
看起来不错,不是吗?
假设整数规划有三个整数变量,因此:
a \in {1,2,3}
b \in {1,2,3}
c \in {1,2,3}
现在我想建模所有变量都不同。显然,我可以为每个组合执行以下操作(在本例中为三个)。我用a和b显示它。
a <= b - 1 + bin1 * bigM
a >= b + 1 - (1 - bin1) * bigM
bin1 \in {0, 1}
有没有更简单的方法而不产生大量新约束、bigM 和二进制变量?
抱歉,不是真的。这种构造通常称为 all-different constraint
。这是一个参考:
H.P.Williams, Hong Yan, "Representations of the all-different Predicate of Constraint Satisfaction in Integer Programming," INFORMS Journal on Computing, Vol. 13 (2001) 96-103
另请参阅讨论 here。
我发现,也可以执行以下操作:
x_j \in {1,2,3} for j \in {1,2,3}
b_i_j \in {0,1} for i,j \in {1,2,3}
\sum_{i=1}^{3} i * b_i_j = x_j for j \in {1,2,3}
\sum_{i=1}^{3} b_i_j = 1 for j \in {1,2,3}
嗯,显然现在有 j^2
个新的二进制变量。但是您有 x_j
变量以及 b_i_j
变量,因此您可以更灵活地应对各种约束。
all-different constraint:
\sum_{j=1}^{3} b_i_j = 1 for i \in {1,2,3}
看起来不错,不是吗?