如何简单地从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数组,其中包含您想要保存的变量的大小。

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

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

最新更新