环境:Gurobi 8.1.1+python3
我试图建立以下线性规划模型和打印双重价格
最小100 x+y
s.t.x+y>;=1和&;0<;=x、 y<;=1
代码如下:
from gurobipy import *
m = Model()
x = m.addVar(name='X', vtype=GRB.CONTINUOUS, ub=1, lb=0, obj=0)
y = m.addVar(name='Y', vtype=GRB.CONTINUOUS, ub=1, lb=0, obj=0) # first x then y
m.setObjective( x + 100 * y , sense=GRB.MINIMIZE )
m.addConstr( x + y >= 1 )
m.optimize()
print(m.getAttr('Pi', m.getConstrs()))
输出为1。
但当两个变量按不同顺序定义时,请参见下面的代码,输出为100。
from gurobipy import *
m = Model()
y = m.addVar(name='Y', vtype=GRB.CONTINUOUS, ub=1, lb=0, obj=0)
x = m.addVar(name='X', vtype=GRB.CONTINUOUS, ub=1, lb=0, obj=0) # first y then x
m.setObjective( x + 100 * y , sense=GRB.MINIMIZE )
m.addConstr( x + y >= 1 )
m.optimize()
print(m.getAttr('Pi', m.getConstrs()))
为什么它们不同
我想这是因为所有的变量在预解中都被消除了,并且不需要单纯形来解决问题。如果禁用预解,则两个公式的对偶值相同:
m.Params.Presolve = 0
编辑:
这实际上是由于简并。增加变量的上界可以消除退化See the answer here
相关问题 更多 >
编程相关推荐