模数运算可以表示为CPLEX中的约束吗?

时间:2015-05-21 04:23:30

标签: linear-programming cplex

我有一种情况,如果求和是偶数,我想在我的优化函数中关联固定的成本。也就是说,如果

(x1 + x2 + x3)%2 = 0

有没有办法可以在CPLEX中建模?所有变量都是二进制的,所以我只想表达x1 + x2 + x3 = 0 OR x1 + x2 + x3 = 2

1 个答案:

答案 0 :(得分:2)

是的,您可以通过引入新的二进制变量来实现此目的。 (请注意,我们正在修改基础配方,而不是修改CPLEX本身的模数。)

你的约束是     x1 + x2 + x3 = 0 OR 2

让我们引入一个新的二进制变量 Y 并重写约束。

组合约束:x1 + x2 + x3 = 0(1-Y) + 2Y 这是有效的,因为如果Y为0,则选择其中一个选项,如果Y = 1,则选择另一个选项。

简化时:

x1+x2+x3-2Y = 0
x_i, Y binary

附录

在您的特定情况下,约束得到简化,因为其中一个rhs术语为0.相反,更一般地说,如果您将 b1 b2 作为两个rhs选择, 约束将成为 x1 + x2 + x3 = b1(Y) + b2(1-Y).

如果您的约束中有不等式(< =),您将使用Big-M技巧,然后引入一个新的二进制变量,从而使模型选择其中一个约束。

希望有所帮助。