首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gurobi:原初的客观值不等于对偶(运输问题)

Gurobi:原初的客观值不等于对偶(运输问题)
EN

Stack Overflow用户
提问于 2022-02-05 00:27:44
回答 1查看 204关注 0票数 0

使用该模型解决运输问题的解决方案这里

代码语言:javascript
复制
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写了上述程序的双重性:

代码语言:javascript
复制
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()手工检查了它)。有人知道为什么吗?我认为强对偶定理保证了这个属性,因为这两个目标值都是最优的。

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

代码语言:javascript
复制
alpha = m_dual.addVars(cities,name='alpha',lb=-GRB.INFINITY) 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-05 05:02:19

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70994331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档