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

如何简单地从 Gurobi 读出/保存优化的变量

如何解决如何简单地从 Gurobi 读出/保存优化的变量

所以,我已经优化了我的 Gurobi 模型,但我真的找不到一种简单的方法来保存解决方案。如何简单地保存变量(矩阵和向量等)?

解决方法

您可以使用 Gurobis write() 方法将当前解决方案写入文件。您只需要使用 .sol 文件名后缀:

import gurobipy as gp
from gurobipy import GRB

# Create a new model
m = gp.Model("mip1")

x = m.addVars(3,vtype=GRB.BINARY,name="x")

m.setObjective(x[0] + x[1] + 2 * x[2],GRB.MAXIMIZE)
m.addConstr(x[0] + 2 * x[1] + 3 * x[2] <= 4,"c0")
m.addConstr(x[0] + x[1] >= 1,"c1")

# Optimize model
m.optimize()

# Write the solution to a file "mip1.sol"
m.write("mip1.sol")

给予

# Solution for model mip1
# Objective value = 3
x[0] 1
x[1] 0
x[2] 1
,

如果您在模型中为变量命名,那真的很容易!

使用函数 m.getVars(),您可以获得变量名称及其解决方案的列表。如果您随后将此信息转换为您希望在其中执行它的 Python 代码语法中的字符串,您实际上可以使用 exec(string)!重要的是,您要预先创建一个 numpy 数组,表示要保存的变量的大小。

假设您通过 x 优化了大小为 n 的矩阵 m,请执行以下操作:

x = np.zeros([n,m])
for v in mo.getVars():
   print(v.varName +'='+ str(v.x))
   string = v.varName +'='+ str(v.x)
   exec(string)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。