资讯动态

HiGHS 线性规划求解器完整指南:LP、MIP、QP 三步跑通并调优

发布时间:2026/10/23 5:55:18 来源:尧图企业网站定制
HiGHS 线性规划求解器完整指南LP、MIP、QP 三步跑通并调优【免费下载链接】HiGHSLinear optimization software项目地址: https://gitcode.com/GitHub_Trending/hi/HiGHSHiGHS 是一个用 C 编写的线性优化求解器专门解决大规模稀疏的线性规划LP、凸二次规划QP和混合整数规划MIP无需任何第三方依赖MIT 协议免费商用。下面直接带你把它装好、跑起来再讲清楚几个最常用的能力。快速上手装好并用十行 Python 解出第一个问题如果你只做 Python 调用最快的路径是直接装 PyPI 包省掉编译环节pip install highspy # 自动带上 numpy装好后写一个最小可运行的线性规划。这里最小化x2约束是x2 - x1 2且x1 x2 0import highspy h highspy.Highs() x1 h.addVariable(lb -h.inf) # 无下界的变量 x2 h.addVariable(lb -h.inf) h.addConstrs(x2 - x1 2, # 一次加多条约束 x1 x2 0) h.minimize(x2) # 设定目标最小化 x2 h.run() # 求解 print(h.getSolution().col_value) # 打印变量取值 print(h.getInfo().objective_function_value)如果要用命令行求解已有的.mps或 CPLEX.lp文件就得从源码编译。HiGHS 用 CMake需 3.15构建完会生成可执行文件bin/highsgit clone https://gitcode.com/GitHub_Trending/hi/HiGHS cd HiGHS cmake -S . -B build cmake --build build cd build ctest # 跑一遍测试确认编译没问题编译成功后直接在命令行里读一个模型文件并求解bin/highs check/instances/afiro.mps bin/highs check/instances/smalllp.mps --solver ipm --time_limit 60仓库的check/instances/里备了不少现成实例如afiro.mps、25fv47.mps拿来当练手最方便。核心功能深讲三个最常用的能力求解 LP 并在算法之间切换线性规划是 HiGHS 的基本盘。它默认用choose模式自动挑求解器你也可以用--solver手动指定simplex单纯形或ipm内点法。单纯形法稳定性好、结果可直接给出可行基适合大多数问题内点法在超大规模、结构稀疏的矩阵上收敛更快。注意点别在不了解差别的情况下乱切。小规模问题用内点法未必划算因为它收敛到的是中心化解往往还需要一次交叉迭代crossover才能得到顶点解。拿不准就交给默认值。混合整数规划MIP当变量必须取整数——比如要不要开某台机器、派几辆车、选哪几件商品——就需要 MIP。Python 里最省事的是addBinaries直接建 0-1 变量再用表达式加约束、设目标h highspy.Highs() x h.addBinaries(5) # 5 个 0-1 变量 h.addConstr((x * [4, 3, 1, 5, 4]).sum() 11) # 容量约束 h.maximize((x * [8, 5, 3, 11, 7]).sum()) # 最大化价值 h.run() print(x.value) # 解[1, 0, 1, 1, 0]注意点整数约束会让问题从多项式难度跳到组合爆炸变量一多求解时间就上去了。务必给它设time_limit并且可以挂 MIP 回调在还没求出最优时就先拿到一个可行解避免全程空等。不可行性诊断与敏感性分析模型无解时光知道不可行没用得找到是哪几条约束在打架。HiGHS 内置 IIS不可约不可行子集诊断想知道某个系数或右端项变化后最优解会怎么动则用 ranging敏感性分析命令行加--ranging on即可。h.setOptionValue(iis_strategy, highspy.IisStrategy.kIisStrategyIrreducible) status, iis h.getIis() # 返回冲突的变量、约束及其边界状态注意点IIS 默认走的是轻量策略只检查冲突的边界要找完整的不可约子集才需要显式把策略改成kIisStrategyIrreducible代价是要多算一会儿。场景实战用 MIP 做 0-1 选品以一个背包式选品为例把整条链路走通。假设五件商品每件有占用重量和价值总容量 11目标是选出一组使总价值最大import highspy h highspy.Highs() h.setOptionValue(presolve, off) # 演示起见关掉预处理 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() print(解, h.getSolution().col_value) # [1, 0, 1, 1, 0] print(最优价值, h.getInfo().objective_function_value)这个写法可以直接迁移到别的地方生产排产用 LP 最小化成本、同时满足需求约束物流配送在同样 MIP 框架里加车辆容量和时间窗约束投资组合则换成 QP把风险项放进半正定的 Hessian 矩阵里。四类问题在 HiGHS 里是同一套建模入口差别只在约束和目标怎么写。避坑与效率技巧预处理presolve默认是开的它能先削掉大量冗余约束和变量除非你在做特殊实验否则别关。想批量调参时把配置写进 options 文件再传--options_file格式是一行一个名字 值、#开头为注释比在命令行拼一串更干净presolve on solver ipm time_limit 60给 MIP 或大规模问题设--time_limit避免无限等想复现同一次求解固定--random_seed就能拿到一致的结果。大规模稀疏矩阵优先看内点法小规模或要顶点解就交给单纯形法别一个算法套所有问题。延伸资源接口和文档都放在仓库里按需翻就行。多语言接口在 docs/src/interfaces/Python 建模细节看 docs/src/interfaces/python/可执行文件的完整参数在 docs/src/executable.md选项说明见 docs/src/options/definitions.md。能直接抄的示例脚本在 examples/从最简单的 examples/minimal.py 到 examples/knapsack.py、examples/branch-and-price.py 都有测试用例和现成模型文件在 check/instances/构建参数说明在 cmake/README.md。下一步先把examples/minimal.py跑通再挑一个check/instances/里的模型用命令行解一遍遇到具体求解或建模问题可邮件联系 highsoptgmail.com。【免费下载链接】HiGHSLinear optimization software项目地址: https://gitcode.com/GitHub_Trending/hi/HiGHS创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑