如何解决Python Gurobi - 将双重问题写入文件
使用 gurobipy
,我可以使用 model.write()
编写我的原始问题。我也知道我可以用 m.getAttr("Pi",m.getConstrs())
计算对偶。现在我很好奇,如果不是在代码中手动写出对偶模型,是否可以轻松生成 LP 的对偶并将其写入文件,就像我们将原始问题写入 .lp
文件。这是我尝试使用的一些玩具代码,您可以在闲暇时随意测试:
import gurobipy as gp
import os
from gurobipy import GRB
def write_to_file(model,filestring):
directory = os.getcwd()
filename = directory+filestring
model.write(filename)
nodes = ['s','a','b','c','d','e','t']
orig = 's'
dest = 't'
arcs,capacity = gp.multidict({
('s','a') : 1,('a','b') : 3,('b','a') : 2,('c','e') : 4,('s','b') : 4,'d') : 4,'d') : 3,('d','t') : 9,'c') : 6,'e') : 1,('e','t') : 4
})
m = gp.Model("Rec4")
# add our variables
flow = m.addVars(arcs,name = "flow")
# cannot go over capacity
m.addConstrs(
(flow.sum(i,j) <= capacity[i,j] for i,j in arcs),"cap")
# flow conservation
m.addConstrs(
(flow.sum(i,'*') - flow.sum('*',i) == 0 for i in nodes if i != orig and i != dest),"conservation")
# maximize flow
obj = (flow.sum('*',dest) - flow.sum(dest,'*'))
m.setobjective(obj,GRB.MAXIMIZE)
m.optimize()
# print solutions
if m.status == GRB.OPTIMAL:
solution = m.getAttr('x',flow)
for i,j in arcs:
if solution[i,j] > 0:
print('%s -> %s: %g' % (i,j,solution[i,j]))
write_to_file(m,"//test.lp")
########################################################################
# Dual problem
duals = m.getAttr("Pi",m.getConstrs())
print(duals)
解决方法
此功能目前在 Gurobi 中不可用。在未来的版本中可能会写出对偶问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。