如何使用Python版CPLEX API读取MIP求解结果文件?
Python版CPLEX API保存/读取MIP解的正确方案
问题根源
之前的错误操作在于:model.read()仅用于读取模型文件(如.lp、模型格式的.sav文件),而你通过m.solution.write()生成的.sav是解文件,并非模型文件,因此用model.read()读取会触发格式错误。
正确操作步骤
1. 保存求解结果
使用CPLEX的solution.write()方法可将解保存为.sol或解格式的.sav文件:
# m为已完成求解的CPLEX模型实例 m.solution.write("saved_solution.sol") # 保存为标准.sol解文件 # 或保存为.sav格式的解文件 m.solution.write("saved_solution.sav")
2. 读取解到模型
不能用model.read(),需调用solution.read()方法读取解文件:
# model为与解对应的CPLEX模型实例(结构需完全匹配) model.solution.read("saved_solution.sol") # 读取.sol格式解 # 或读取.sav格式解文件 model.solution.read("saved_solution.sav")
3. 验证解的加载
读取后可通过以下代码确认解是否正确加载:
# 遍历变量输出取值 for var_name in model.variables.get_names(): print(f"{var_name}: {model.solution.get_values(var_name)}") # 输出目标函数值 print(f"目标函数值: {model.solution.get_objective_value()}")
额外提示
若需要同时保存模型结构与解,可直接保存完整模型:
# 保存带解的完整模型 m.write("model_with_solution.sav") # 后续读取时直接加载整个模型,解会自动附带 model.read("model_with_solution.sav")
此时模型加载完成后,可直接访问solution相关属性获取解。
内容的提问来源于stack exchange,提问作者deadlock
相关产品推荐
相关产品推荐

