为什么同一款古洛比LP车型的双重价格不同?

2024-06-25 05:46:04 发布

您现在位置:Python中文网/ 问答频道 /正文

环境: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()))

为什么它们不同


Tags: 代码namefromimportltobjmodelfirst
1条回答
网友
1楼 · 发布于 2024-06-25 05:46:04

我想这是因为所有的变量在预解中都被消除了,并且不需要单纯形来解决问题。如果禁用预解,则两个公式的对偶值相同:m.Params.Presolve = 0

编辑:

这实际上是由于简并。增加变量的上界可以消除退化See the answer here

相关问题 更多 >