gpt4 book ai didi

python - 为什么同一 Gurobi LP 型号的双重价格不同?

转载 作者:行者123 更新时间:2023-12-01 07:03:18 28 4
gpt4 key购买 nike

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

关于python - 为什么同一 Gurobi LP 型号的双重价格不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58545866/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com