-
可能原因:gurobi底层使用c++写的,使用java中的Double.MAX_VALUE超出了c++相应数值的二进制位数,二进制存储在溢出之后多余的部分会被截断,gurobi识别后变成一个较小的数字导致起不到大M的作用。
-
如何发现的:参考这篇文章Gurobi 不可行问题的冲突溯源,写出ilp文件,未发现ilp文件中的约束不可行
import gurobipy as gpy
model = gpy.read('ExampleBaseline.LP')
model.optimize()
model.computeIIS()
model.write('ExampleBaseline.ilp')
# 文章中的更高级用法,可以发现违反的约束
model = gpy.read('ExampleBaseline.ilp')
model.feasRelaxS(0, False, False, True)
model.optimize()
model.write("ExampleBaseline.sol")
model.write("ExampleBaseline.lp")