我有一种情况,如果求和是偶数,我想在我的优化函数中关联固定的成本。也就是说,如果
(x1 + x2 + x3)%2 = 0
有没有办法可以在CPLEX中建模?所有变量都是二进制的,所以我只想表达x1 + x2 + x3 = 0 OR x1 + x2 + x3 = 2
答案 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技巧,然后引入一个新的二进制变量,从而使模型选择其中一个约束。
希望有所帮助。