用 HiGHS 求解 LP、QP、MIP:一个开箱即用的开源线性优化求解器
【免费下载链接】HiGHSLinear optimization software项目地址: https://gitcode.com/GitHub_Trending/hi/HiGHS
HiGHS 是一个开源线性优化求解器,覆盖线性规划(LP)、凸二次规划(QP)和混合整数规划(MIP)。你的模型如果在 MPS 或 LP 文件里,一条命令就能拿到最优解;要从 Python 调用,一行pip install highspy即可。它不捆绑第三方依赖,Linux、macOS、Windows 上从源码构建都能直接通过。
这几个场景,如果你遇到过
模型写好了,求解器授权麻烦常见做法是用商业求解器,或者找一个免费但要注册的。无论哪种,你都得处理授权、账号和集成流程。HiGHS 是 MIT 协议,商用和个人使用都不设限制,具体表现为:没有 license 文件可管理,装进生产代码不会多一步审批。
问题经常变,给别人交接麻烦常见做法是把模型硬编码在代码里,换个人接手要重新搭环境、读代码。用 HiGHS 后,模型落成.mps或.lp文件,对方执行highs model.mps就出结果,不需要跑你的代码环境。
想在 Python 里试,怕配置麻烦常见做法是自己编译 C++ 库,工具链没配齐就容易卡住。highspy 只需要pip install highspy,numpy 依赖会自动带上,具体表现为:有 Python 环境就能用,不需要动系统库。
HiGHS 能帮你完成什么
- 装得上:命令行版本只需要 CMake 3.15+ 和 C++ 编译器,没有外部依赖库;Python 包走 PyPI 一行装完。意味着环境准备只有一条命令,中间不会出现“构建失败”环节。
- 跑得通:开箱读取
.mps、.lp文件(含.gz压缩版);API 里也可以直接传压缩行/列数组,不落盘。意味着模型在文件里或内存里,两条路都通。 - 调得动:
presolve、solver、parallel、time_limit、random_seed等选项可以在命令行、选项文件、setOptionValue调用三处指定,效果等价。意味着不改模型就能对比不同求解策略。 - 说得清结果:求解后能拿到目标函数值、变量取值和状态(最优、不可行、无界);对不可行问题还能计算 IIS。意味着问题无解时,你能定位是哪组约束在冲突,而不只是一句“不可行”。
三步安装并跑通 HiGHS
第一步:装 Python 包
pip install highspy需要 HiPO 内点法(可解 QP)时改装pip install highspy[extras]。卡住了看 highspy/ 目录,接口源码和测试都在里面。
第二步:编译命令行版本(只用 Python 可跳过)
git clone https://gitcode.com/GitHub_Trending/hi/HiGHS cd HiGHS cmake -S . -B build && cmake --build build卡住了看 cmake/README.md,里面有构建配置的完整说明。
第三步:解一个测试模型
build/bin/highs check/instances/afiro.mps --presolve=on --time_limit=60卡住了翻 check/instances/,里面是现成的模型文件;用--help查看全部命令行参数。
跑通之后,Python 里解自己的问题,最小调用模式是这样的:
import highspy h = highspy.Highs() # 建模型部分见 examples/call_highs_from_python_highspy.py h.run() print(h.getInfo().objective_function_value)常见现象与对策
- 现象:两次运行结果对不上。原因:默认
presolve=choose且可能开并行,求解路径不固定。对策:先用--presolve=off --parallel=off --random_seed=0建立可复现基线,再逐项调参。 - 现象:QP 被判定非凸直接拒绝。原因:HiGHS 要求 Q 矩阵半正定,Hessian 构造有偏差就会拒。对策:先检查二次项的对称性与凸性;新版本已接受轻微不对称的 Hessian,旧版本上遇到先升级。
- 现象:问题被判不可行,但你觉得模型没那么简单。原因:约束之间确实互相冲突。对策:调用
getIis计算不可行子系统,直接拿到冲突的那组约束。 - 现象:默认求解偏慢,或策略不合问题特点。原因:默认走单纯形加自动预处理,不一定适合所有题。对策:大规模稀疏 LP 试试
--solver=ipm,再手动对比--presolve=on/off两种结果。
仓库里接着看什么
- docs/src/:完整文档,从基础用法到选项定义、API 参考,适合想系统学一遍的人。
- examples/:Python、C、C#、Fortran 的示例代码,另有 branch-and-price、多目标等模型,适合先抄后改。
- check/instances/:一组真实 MPS/LP 测试文件,适合快速找现成输入练手。
- check/:各功能的测试用例,适合验证安装是否正确,或弄清求解器在不同题型上的行为。
手上已有模型文件的话,先跑build/bin/highs 你的模型.mps,确认状态和目标函数值符合预期。想写进代码,就从 examples/call_highs_from_python_highspy.py 抄调用结构,把数据换成你自己的。
【免费下载链接】HiGHSLinear optimization software项目地址: https://gitcode.com/GitHub_Trending/hi/HiGHS
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考