通过HiGHS Solver与Linopy禁用Crossover后获取解决方案
问题:关闭HiGHS交叉步后Linopy无法识别最优解,如何获取结果?
我用Linopy实现线性规划模型,指定HiGHS Solver的内点法(IPM)求解。因业务需求不需要执行交叉步(Crossover),通过Linopy向HiGHS传递run_crossover='off'参数后,HiGHS确实跳过了交叉步,但Linopy判定模型未优化。请问这种情况怎么从Linopy里获取求解结果?
HiGHS日志信息
Ipx: IPM optimal WARNING: LP solver residuals: primal = 0.0710581; dual = 0.0473415 yield num/max/sum primal (391784/0.0710581/6.24267) and dual (463677/0.0473415/3.47325) corrections WARNING: Unwelcome IPX status of Unknown: basis is not valid; solution is valid; run_crossover is "off" Model name : linopy-problem-m_vf1rkb Model status : Unknown IPM iterations: 48 Objective value : -2.8809874134e+07 Relative P-D gap : 7.5484672674e-01 HiGHS run time : 141.71 Writing the solution to /private/var/folders/4p/qywpknvj5qx89qh1g6vy1qlc0000gn/T/linopy-solve-28b76k6g.sol
Linopy日志信息
Solution status unknown. Trying to parse solution. Optimization failed: Status: unknown Termination condition: unknown Solution: 1786176 primals, 1456848 duals Objective: -2.88e+07 Solver model: available Solver message: unknown
解决方案
直接解析HiGHS生成的临时解文件:从HiGHS日志里找到解文件路径(如示例中的
/private/var/folders/4p/qywpknvj5qx89qh1g6vy1qlc0000gn/T/linopy-solve-28b76k6g.sol),直接读取这个文件提取变量值和目标函数。.sol文件是文本格式,结构清晰,可通过脚本快速解析。强制从Linopy模型提取解:尽管Linopy标记状态为未知,但实际解已存在于模型中,可尝试直接访问相关属性:
# 获取变量解(假设变量名为x) x_solution = model.variables['x'].solution # 获取目标函数值 objective = model.objective.value如果直接访问报错,可调用Linopy内部的解读取方法绕过状态检查:
from linopy.solvers.highs import read_solution # 传入模型实例和解文件路径 read_solution(model, '/private/var/folders/4p/qywpknvj5qx89qh1g6vy1qlc0000gn/T/linopy-solve-28b76k6g.sol') # 再次访问变量解 x_solution = model.variables['x'].solution自定义状态映射逻辑:如果需要长期解决这个问题,可以修改Linopy对HiGHS状态的判断逻辑——当HiGHS输出“IPM optimal”且
run_crossover='off'时,将状态标记为最优。可通过继承HiGHS求解器类,重写状态解析方法实现,适合有开发能力的场景。
内容的提问来源于stack exchange,提问作者ModoCharlie
相关产品推荐
相关产品推荐

