我正在尝试运行滚动范围优化,其中我有多个优化脚本,每个脚本都会生成自己的结果。我想使用model.write(“results.sol”)编写每个结果,而不是将结果打印到每个间隔的屏幕,然后将它们读回结果处理脚本(单独的python脚本)。
我尝试使用Python使用read(“results.sol”),但无法识别文件格式。有什么方法可以读取/处理Gurobi输出的.sol文件格式吗?如果你以后不能读取.sol文件并生成图表等,这似乎很奇怪。
也许我错过了一些令人眼花缭乱的事情。
答案 0 :(得分:1)
如果没有看到你的代码就很难回答,因为我们必须猜测你在做什么。
但是......
使用时
model.write("out.sol")
Gurobi将使用它自己的格式来编写它(从文件后缀中推断出所写的内容)。
这可以通过以下方式轻松阅读:
model.read("out.sol")
如果您使用
x = read("out.sol")
您正在使用python的基本IO工具,当然python不会解释该格式的文件。此外,这样的读取是文本模式(可能需要二进制文件;不确定)。
一般规则:如果您使用类模型的类方法编写解决方案,那么也要使用类模型的类方法进行读取。
上述用法通常用于恢复模型的某些状态(例如MIP-start)。如果你想绘制它,你将不得不做进一步的工作。在这种情况下,使用python的IO工具可能是个好主意,您应该尊重格式described here。这可以作为csv或手动读取(与我之前的评论相反:它是文本模式;不是二进制)。
因此,假设链接中的示例位于文件gur.sol
中:
import csv
with open('gur.sol', newline='\n') as csvfile:
reader = csv.reader((line.replace(' ', ' ') for line in csvfile), delimiter=' ')
next(reader) # skip header
sol = {}
for var, value in reader:
sol[var] = float(value)
print(sol)
输出:
{'z': 0.2, 'x': 1.0, 'y': 0.5}
说明: