HiGHS 开源线性优化求解器实战指南:从一行 pip 到调出性能上限
【免费下载链接】HiGHSLinear optimization software项目地址: https://gitcode.com/GitHub_Trending/hi/HiGHS
当排产表越拉越长、配送方案一算就爆内存时,你需要的不是更大的电脑,而是一台靠谱的线性优化求解器。HiGHS 就是这样一个开源求解器:稀疏问题原生支持,LP、MIP、QP 一站解决,MIT 协议随便用。🚀 这篇 15 分钟的实战教程,带你从一行命令装好,到跑通第一个问题,再摸到调优的门道。
它到底解决了什么问题
HiGHS 是一个高性能的串行/并行求解器,覆盖标准形式 min ½xᵀQx + cᵀx(L ≤ Ax ≤ U)下的线性规划、凸二次规划和混合整数规划。大部分商业求解器要装一堆依赖、按核授权,而 HiGHS 默认零第三方依赖,一个静态二进制就能部署——这是它和多数商业路线最直观的区别。默认配置偏保守但稳健,适合直接上生产。
- 三种问题统一建模(LP/MIP/QP)
- 零第三方依赖部署
- 稀疏矩阵原生格式
- 并行分支定界求解
5 分钟跑通第一个问题
最短路径是 Python 包highspy,一行装好(会自动带上 numpy 依赖):
pip install highspy装完直接建模求解,下面是一个 2 变量、1 约束的小 LP:
import highspy h = highspy.Highs() h.addVars(2, [0, 0], [10, 10]) # x0, x1 ∈ [0, 10] h.changeColsCost(2, [0, 1], [-1, -1]) # max x0 + x1 h.addRows(1, [-highspy.kHighsInf], [10], 2, [0, 2], [0, 1], [1, 1]) h.run() print(h.getInfo().objective_function_value) # 10.0跑完你会看到输出10.0——约束 x0+x1≤10 下目标顶满,模型状态、基可行性都能通过getInfo()逐项确认。不想装 Python 包的话,源码编译也只需 CMake ≥ 3.15 加一个 C++11 编译器:git clone https://gitcode.com/GitHub_Trending/hi/HiGHS后执行cmake -S . -B build && cmake --build build,产物是bin/highs可执行文件,细节见 cmake/README.md。各语言完整可运行示例都放在 examples/ 里,照着抄即可。
核心能力分模块拆解
LP:多引擎随手切换
同一个 LP 可以在三种算法间换引擎,不用换工具。
- 原始/对偶修正单纯形(默认,数值稳定)
- HiPO 内点法(大规模稀疏,Python 需 extras 包)
- IPX 内点法(独立实现的备选引擎)
MIP:并行分支定界
带整数变量的问题走这条路,v1.15 起节点搜索支持多线程。
- 并行节点搜索(分支定界树多核展开)
- 割平面与启发式(clique 割、可行性跳跃)
- HPresolve 预处理(求解前自动紧化边界)
模型诊断与分析
解出来后,它还帮你确认解的可信度,而不是只甩一个数值。
- IIS 不可行子集定位(直接指出哪组约束打架)
- ranging 敏感性分析(目标、边界变化的影响区间)
- 多目标优化(按权重扫描帕累托前沿)
三类高频实战场景
排产与资源分配
几百道工序、几十台设备,人工排期已经失控。用 LP + 预处理直接求最小成本排产表,稀疏约束下实测分钟级出解。
物流与车辆路径
每辆车装多少、走哪条路,全是 0-1 决策。交给 MIP 分支定界,容量和时间窗直接写成约束即可。
投资组合配置
收益是线性的,风险(方差)却是二次的。开凸 QP 主动集求解器,一次优化完成风险-收益权衡。
文档里不会告诉你的调优技巧
先确认预处理收益— 大部分问题规模会在 presolve 后缩小一个量级,默认presolve = choose基本会开。命令行先跑highs --presolve on model.mps对比一下日志。
参数进选项文件— 命令行只暴露几个基础项,完整参数走选项文件,一个最小示例:
presolve = on parallel = on time_limit = 60 random_seed = 1然后highs --options_file my_options.txt model.mps即可复现同一配置,调参不再靠记命令行。
并行别迷信— LP 内点法本身不并行,实测小核心数机器上收益有限。只对大 MIP 开parallel = on,threads = 0让求解器自动选核。
踩坑速查:症状 → 原因 → 修复
cmake -S . -B build报需要 CMake 3.15 以上 → 本机 CMake 版本过低 → 升级 CMake 后再配置(cmake --version先确认)。- Windows 上
ctest失败或跑起来慢 → 默认产出的是 Debug 版 →cmake --build build --config Release后用ctest -C Release。 - 求解输出
Model status: Infeasible→ 模型约束确实冲突 → 跑highs --presolve on model.mps看预处理阶段的冲突报告,或调用getIis定位子集。 import highspy报 ModuleNotFoundError → conda/venv 环境与 pip 安装的环境不一致 → 用当前解释器重装pip install highspy。- highspy 里启用 HiPO 报缺依赖 → HiPO 依赖在独立扩展包里 →
pip install highspy[extras]。
下一步:按阶段深入
- 入门:按 docs/src/guide/basic.md 的方法逐个过一遍 highspy 接口,大部分用户读到这里就够了。
- 进阶:拿 check/instances/ 里的样例模型,分别用
--solver simplex和--solver ipm跑同一份 MPS,亲手感受引擎差异。 - 贡献:照 CONTRIBUTING.md 的规范跑通
ctest后,从文档或小修复提第一个 PR。
社区 issue 区,常有同好在线等你。
下次排产表再打架,别急着加电脑——现在就可以 pip 装一个 HiGHS,把问题扔进去让它先算一轮。
【免费下载链接】HiGHSLinear optimization software项目地址: https://gitcode.com/GitHub_Trending/hi/HiGHS
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考