使用该模型解决运输问题的解决方案这里:
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()手工检查了它)。有人知道为什么吗?我认为强对偶定理保证了这个属性,因为这两个目标值都是最优的。
编辑:为了使对偶LP工作,我必须正确地绑定对偶中的变量(正如答案所指出的)。
alpha = m_dual.addVars(cities,name='alpha',lb=-GRB.INFINITY) 发布于 2022-02-05 05:02:19
我认为对偶公式中的变量可能存在符号误差。这就是我所用的:

https://stackoverflow.com/questions/70994331
复制相似问题