假设有三个整数变量用于整数编程,因此:
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和二元变量?
答案 0 :(得分:1)
对不起,不是真的。此构造通常称为all-different constraint
。这是一个参考:
威廉姆斯,洪燕,“各种不同的代表 整数规划中约束满足的谓词,“INFORMS 计算机杂志,Vol。 13(2001)96-103
另见讨论here。
答案 1 :(得分:1)
我发现,也可以做以下事情:
j^2
嗯,显然现在有x_j
个新的二进制变量。但是,您拥有b_i_j
变量以及all-different constraint:
\sum_{j=1}^{3} b_i_j = 1 for i \in {1,2,3}
变量,因此您可以更灵活地处理所有类型的约束。
{{1}}好吧,不是吗?