如何简单地从 Gurobi 中读出/保存优化变量
How to simply read out / save optimized variables from Gurobi
所以,我已经优化了我的 Gurobi 模型,但我找不到一个简单的方法来保存解决方案。如何简单地保存变量(矩阵和向量等)?
如果您已经在模型中为变量命名,那真的很简单!
使用函数 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)
您可以使用 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
所以,我已经优化了我的 Gurobi 模型,但我找不到一个简单的方法来保存解决方案。如何简单地保存变量(矩阵和向量等)?
如果您已经在模型中为变量命名,那真的很简单!
使用函数 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)
您可以使用 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