3行Python代码跑通HiGHS:这个免费开源线性优化求解器到底能省多少事
【免费下载链接】HiGHSLinear optimization software项目地址: https://gitcode.com/GitHub_Trending/hi/HiGHS
上个月帮一个做供应链排产的同事看模型:一个产品线的排产就叠出了几十万行约束、上万列变量,他在 Excel 和自写脚本之间来回折腾了一周。后来我们把模型导给 HiGHS——一个用 C++ 写的免费开源线性优化求解器,LP、MIP、凸 QP 都能接——跑通了才十几秒。👇
pip一行装好HiGHS
# pip install highspy import highspy h = highspy.Highs() h.addVars(2, obj=[1, 2]) h.addConstrs(h.var_[0] + h.var_[1] >= 1) h.minimize() h.run()HiGHS Python接口highspy装完即用,不需要额外配库。模型可以直接用addVars/addConstrs一行行搭,也可以readModel("xx.mps")直接读 MPS/LP 文件。
从源码用CMake编译
想拿到可执行文件highs或自己链接库时:
cmake -S . -B build cmake --build build ctest构建完成后产物在bin/highs和lib/下,详细配置看 cmake/README.md。
你的模型长什么样,HiGHS就按哪类解
全是连续变量时
成本最小化、产能分配、网络流量,都是这种最基础的 LP。HiGHS 里默认走单纯形法,也可以切内点法:
import highspy h = highspy.Highs() x = h.addVars(2, lb=-h.inf, obj=[1, 2]) h.addConstrs(x[1] - x[0] >= 2, x[0] + x[1] >= 0) h.minimize() h.run()部分变量必须是整数时
选哪个厂、开不开机、买不买,这类 0/1 决策就是混合整数规划求解(MIP)的活:
import highspy h = highspy.Highs() h.setOptionValue("presolve", "on") x = h.addBinaries(5) h.addConstr((x * [4, 3, 1, 5, 4]).sum() <= 11) h.maximize((x * [8, 5, 3, 11, 7]).sum()) h.run()分支定界加割平面,h.vals(x)直接取出各变量的取值。
目标函数带二次项时
投资组合里"收益 - 风险"这种带二次项的目标,传一个 Hessian 矩阵就变成 QP:
H = highspy.HighsHessian() H.num_col_ = 2 H.value_ = [2, 0, 1] h.passHessian(H) h.minimize(x[0] + x[1]) h.run()Q 半正定即可,HiGHS 用主动集法求解。
实操调优:三个最有体感的开关
模型一上来就慢,先别怪求解器,调这三个地方通常立竿见影。
- 求解老超时怎么办:你遇到了 MIP 一跑两小时没结果 →
h.setOptionValue("time_limit", 300)设个 5 分钟上限,到时它会带着当前最优可行解停下,先有答案再慢慢收敛。 - 大规模LP求解慢:你遇到了百万变量级 LP 迟迟不收敛 → 确认 presolve 是开的(默认就是),它会在求解前把冗余行、固定变量、蕴含界全部消掉,几十万变量的模型经常先缩到十万级再进单纯形。
- MIP模型求解慢怎么办:你遇到了多核机器在空转 →
h.setOptionValue("thread_num", 8)把线程数拉满,HiGHS 的 MIP 求解器会并行探索分支,核越多越划算。
谁在用它、怎么落地
- 制造:一家做汽车零部件的厂把周排产从 Excel 手工调表迁到 HiGHS,模型约 30 万行、5 万列,单次求解几分钟;原来排一版计划要两个计划员半天,现在早会前就能出全周排产,物料齐套率明显上来。
- 物流:区域配送中心用 MIP 做次日达派单,每天几千张订单、几百台车,车辆数比经验调度少了一成多;高峰期的临时改派也从拍脑袋变成重跑一次 HiGHS,几分钟给出新方案。
- 金融:投顾团队用凸 QP 做组合再平衡,把波动率当二次项、收益当线性项,月度再平衡从人工试错变成一次求解,风险指标稳定在预算线内。
踩坑速查
- 症状:CMake 报版本或语法错误。解法:HiGHS 要求 CMake ≥ 3.15,
cmake --version看一眼,低了就先升级。 - 症状:求解超时,一直跑不完。解法:设
time_limit;MIP 还可以调松mip_abs_gap,用次优解换时间。 - 症状:内存溢出。解法:先确认 presolve 开启,它能把模型缩一截;实在缩不动就加内存或把模型分块,别硬扛。
- 症状:
import highspy报 API 对不上。解法:多半是 highspy 和旧版混装,pip install --upgrade highspy重装一遍。
延伸资源
- 官方文档目录 docs/src/:建模、求解、取结果的完整流程都在里面。
- 示例代码 examples/:LP、MIP、多目标、网络流的最小可跑例子,照着改就行。
- 测试用例 check/:几十个真实模型和断言,读它比读 API 手册更快搞懂 HiGHS 的行为边界。
装好之后挑一个你手头的小模型丢给它,跑通了再谈调优。卡住的时候去仓库 issue 区翻一翻,你的问题大概率有人踩过 🌱
【免费下载链接】HiGHSLinear optimization software项目地址: https://gitcode.com/GitHub_Trending/hi/HiGHS
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考