【问题标题】:Gurobi: Objective Value of Primal not equal to dual (transportation problem)Gurobi:原始的客观价值不等于对偶(运输问题)
【发布时间】:2022-02-05 17:38:21
【问题描述】:

使用解决方案here 解决模型的运输问题:

m = Model("transport_problem_2")
flow = {}
for c in cities:
    for b in bases:
        flow[c,b] = m.addVar(obj=distance[c,b], name='flow_%s_%s' %(c,b))
m.update()
for c in cities:
    m.addConstr(quicksum(flow[c,b] for b in bases) <= supply[c], 'supply_%s' %(c))
for b in bases:
    m.addConstr(quicksum(flow[c,b] for c in cities) >= demand[b], 'demand_%s' %(b))
m.optimize()

为了练习,我在 Gurobi 中编写了上述程序的对偶:

m_dual = Model("transport_problem_2_dual")


alpha = m_dual.addVars(cities,name='alpha')
beta = m_dual.addVars(bases,name='beta')

m_dual.setObjective(alpha.prod(supply)+beta.prod(demand), GRB.MAXIMIZE)
m_dual.addConstrs((alpha[c] + beta[b] <= distance[c,b] for c,b in arcs), 'alpha_beta')
m_dual.optimize()

不幸的是,即使对偶是正确的,两个最优目标值也不同。 (我使用 m_dual.display() 手动检查了它)。有人知道为什么吗?我认为Strong Duality Theorem 保证了这个属性,因为两个目标值都是最优的。

编辑:为了使对偶 LP 工作,我必须正确绑定对偶中的变量(正如答案所指出的那样)

alpha = m_dual.addVars(cities,name='alpha',lb=-GRB.INFINITY) 

【问题讨论】:

    标签: optimization linear-programming gurobi


    【解决方案1】:

    我认为对偶公式中的变量可能存在符号错误。这是我用过的:

    【讨论】:

      猜你喜欢
      • 2020-07-24
      • 2019-10-29
      • 2017-08-03
      • 2012-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-24
      • 1970-01-01
      相关资源
      最近更新 更多