微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python Gurobi - 将双重问题写入文件

如何解决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 举报,一经查实,本站将立刻删除。