【发布时间】:2017-11-10 23:07:26
【问题描述】:
我在 Gurobi 的数学符号中设置了以下约束。 x 变量是二进制的。 sigmaplus 和 sigmaminus 变量是正数且连续的。
Subject To
858 x[1,_2] + 1092 x[1,_3] - sigmaplus[1] + sigmaminus[1] = -200 # Constraint 1
858 x[1,_2] + 1092 x[1,_3] >= -1800 # Constraint 2
858 x[1,_2] + 1092 x[1,_3] <= 0 # Constraint 3
x[1,_2] + x[1,_3] = 1 # Constraint 4
720 x[2,_1] + 990 x[2,_2] - sigmaplus[2] + sigmaminus[2] = 2000 # Constraint 5
720 x[2,_1] + 990 x[2,_2] >= -500 # Constraint 6
720 x[2,_1] + 990 x[2,_2] <= 3000 # Constraint 7
x[2,_1] + x[2,_2] = 1 # Constraint 8
...
...
如您所见,constraint 2 和 constraint 3 使解决方案不可行。当我的 x 变量出现这种情况时,我希望 Gurobi 通过将那些冲突的 x 值设置为 0 来进行优化。因此,对于这个示例,我希望 x[1,2] 和 x[1,3] 为等于 0,以便在没有这些变量的情况下找到可行的解决方案。有什么方法可以为Gurobi 7.0.2 编码。
另外,我正在使用2.7.12 Anaconda 4.2.0(64-bit)。以下是我用来缓解问题以找到解决方案的代码。
if m.status == GRB.INFEASIBLE:
m.feasRelaxS(1, False, False, True)
这在某些情况下可以正常工作。我的意思是,它将那些不可行创建变量设置为0。但是,在constraints 1,2,和3不创建任何不可行的其他一些情况下,constraint 4创建不可行,求解器增加@987654337的右侧@。所以,在这种情况下,我需要找到一种方法将它们设置为 0。任何建议表示赞赏。
【问题讨论】:
标签: python gurobi feasibility