news 2026/10/23 1:54:49

用 HiGHS 求解 LP、QP、MIP:一个开箱即用的开源线性优化求解器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用 HiGHS 求解 LP、QP、MIP:一个开箱即用的开源线性优化求解器

用 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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/23 1:54:49

64000 个饰品、10 分钟一刷:四大平台的 Steam 挂刀行情站

64000 个饰品、10 分钟一刷:四大平台的 Steam 挂刀行情站 【免费下载链接】SteamTradingSiteTracker Steam 挂刀行情站 —— 24小时更新的 BUFF & IGXE & C5 & UUYP & ECO 挂刀比例数据 | Track cheap Steam Community Market items on buff.163.co…

作者头像 李华
网站建设 2026/10/23 1:54:01

PoB DPS 计算原理完整拆解:为什么面板伤害和你预期差这么多

PoB DPS 计算原理完整拆解:为什么面板伤害和你预期差这么多 【免费下载链接】PathOfBuilding-PoE2 项目地址: https://gitcode.com/GitHub_Trending/pa/PathOfBuilding-PoE2 如果你在用 Path of Building(PoB)的 PoE2 社区分支规划 B…

作者头像 李华
网站建设 2026/10/23 1:54:00

从0开始做AI

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/23 1:53:54

无名杀网页版:5分钟免费安装并开玩完整三国杀

无名杀网页版:5分钟免费安装并开玩完整三国杀 【免费下载链接】noname 项目地址: https://gitcode.com/GitHub_Trending/no/noname 无名杀是一个开源免费的在线三国杀网页版游戏,内置数百名三国武将与完整卡牌体系,打开浏览器即可开局…

作者头像 李华
网站建设 2026/10/23 1:53:39

旧平衡车刷 FOC 固件:完整刷机与调参指南

旧平衡车刷 FOC 固件:完整刷机与调参指南 【免费下载链接】hoverboard-firmware-hack-FOC With Field Oriented Control (FOC) 项目地址: https://gitcode.com/GitHub_Trending/ho/hoverboard-firmware-hack-FOC 车库角落那台吃灰的平衡车,上次启…

作者头像 李华