HiGHS 线性优化求解器:从建模到出解的 5 分钟上手指南

发布时间:2026/10/23 1:57:27
HiGHS 线性优化求解器:从建模到出解的 5 分钟上手指南
HiGHS 线性优化求解器从建模到出解的 5 分钟上手指南【免费下载链接】HiGHSLinear optimization software项目地址: https://gitcode.com/GitHub_Trending/hi/HiGHSHiGHS 是一款用 C 实现的开源线性优化求解器线性规划、混合整数规划、凸二次规划都能处理核心代码零第三方依赖MIT 协议可商用。本文带你 5 分钟内装好 highspy、跑通第一个问题并说明它的能力边界和常用调优参数。一、它解决什么问题先看三个高频场景里你通常卡在哪里。排班与排产车间要决定每类产品做多少张受机器产能、人工工时、订单下限约束目标是最小化成本或最大化利润。这类问题写成线性规划很直接但变量一多手工试算和电子表格已经无能为力需要求解器给出最优解和对偶价格。配送与资源分配车辆路径、机组分配、设备选型决策天然是选不选、放哪里。一旦引入整数约束问题规模稍大就呈指数增长单纯解一个 LP 松弛不够用必须靠真正的混合整数规划求解器做分支定界。资产配置最小化组合方差、约束期望收益本质是一个带二次目标的凸 QP。很多团队的卡点不在建模而在求解器商业求解器按核收费部分开源工具依赖链重、升级麻烦。HiGHS 的位置一句话一个 MIT 协议、零第三方依赖的 C 开源优化求解器同一套接口覆盖 LP、MIP 和凸 QP。二、5 分钟跑通最小路径最短路径只有一条装 Python 包直接建模求解。pip install highspyimport highspy h highspy.Highs() h.silent() # 例桌子和椅子受装配与打磨工时约束利润最大 x h.addVariables([Tables, SetsOfChairs], obj[10, 25]) h.addConstrs(x[Tables] 2*x[SetsOfChairs] 80, x[Tables] 4*x[SetsOfChairs] 120) h.setMaximize() h.solve() print(Make, h.vals(x)) print(Optimal profit, h.getObjectiveValue())运行后你会看到Make [40. 20.]和Optimal profit 900.0制椅 20 套、制桌 40 张时利润最大。highspy 的简化接口可以直接用比较运算符写约束这是它比底层矩阵接口快得多的地方。如果你要源码构建cmake -S . -B build配置后cmake --build build编译细节见 cmake/README.md命令行方式则直接用highs可执行文件求解 MPS 或 LP 文件无需先建模。三、能力与边界一张表看清支持什么问题类型对应算法适用规模 / 前提条件注意限制线性规划 LP修正单纯形法、HiPO / IPX 内点法大规模稀疏问题百万级变量内点法求解器依赖 BLAS默认编译为可选组件单纯形稳定性最好混合整数规划 MIP分支定界 割平面 启发式整数变量规模是关键预处理和并行影响明显弱松弛、无界分支空间的问题会慢注意整数变量取值范围凸二次规划 QP主动集法目标函数 Hessian 半正定仅支持凸 QP非凸问题不在能力圈几个有但需要主动开启的特性并行求解parallel选项对 MIP 分支节点生效、自动预处理默认开启见下一章、不可行性诊断IIS可定位冲突约束子集、敏感性分析ranging给出目标系数和右端项的变化范围、多目标支持。这些不是默认全开的文档里有说明。四、建模思路两个典型场景场景一车间排产 LP。每个产品做多少台受机器产能和人工工时约束求利润最大。建模要点决策变量是各产品产量连续非负约束是资源上限每个资源一行和订单下限目标函数是利润线性组合。变量和约束的规模通常是几十到几千单纯形秒解。仓库里的 chip.py桌子和椅子和 distillation.py原油调配就是这个形态读完这两个文件你基本掌握了 LP 建模的全部套路。场景二带时间窗的配送 MIP。决定哪些订单由哪辆车服务、按什么顺序。建模要点决策变量是订单-车辆分配0/1 整数和访问顺序关键约束是车辆容量、每个站点的时间窗、车辆路径的连续性。这类问题的难点不在建模而在规模——整数变量一多分支定界的时间就上不封顶。可以先用 knapsack.py 熟悉整数变量怎么加更贴近实际的列生成写法见 branch-and-price.py。读完这两个场景你应该能判断如果你的问题能写成线性目标 线性约束 部分整数变量HiGHS 就建得出来。五、影响求解速度的关键选项presolve— 预处理默认on。遇到奇怪的数值行为或想对照原始问题排查时先关掉再看一遍。time_limit— 求解时间上限单位秒。设上限后超时会返回当前最优解MIP或最佳可行解便于你判断再等 10 分钟值不值。parallel/threads— 并行线程数。MIP 分支阶段加速明显单纯形基本用不上。output_flag— 控制台日志开关。调试建模时建议保留批量跑任务时关掉。random_seed— 固定随机种子保证同样输入下 MIP 的分支顺序可复现。用options_file可以一次固化一组参数highs --options_file my_options.txt model.mps其中my_options.txt每行一个参数名 取值如presolve on、time_limit 600。命令行参数会覆盖文件中的值方便临时改。六、跑不通时先查这三处源码构建失败多半是 CMake 版本不足 3.15 或编译器太旧。看 configure 阶段第一段报错cmake/README.md 列了平台要求和可选开关如果只是想先跑起来pip install highspy是最快路径。求解返回 infeasible先确认约束方向和上下界单位一致吨写成公斤是最常见的建模事故再用 HiGHS 的 IIS 功能拿到一组冲突约束子集对着数据修文档入口在 docs/src/interfaces/python/index.md。大规模问题超时先关掉presolve再开一次对比预处理前后的规模判断是模型本身大还是被预处理放大/缩小有异常MIP 则设time_limit先拿到次优解再迭代收紧界。求解器行为细节参考 docs/src/solvers.md。七、继续深入官方文档入口docs/src/安装、接口、选项、算法说明都在这里Python 接口示例docs/src/interfaces/python/example-py.md可直接运行的示例examples/LP / MIP / 多目标 / 列生成都有测试用例check/每个测试对应一种行为读代码比读文档更快建立直觉遇到行为疑问、想提改进或贡献代码直接到仓库提 issue 或 PR 即可。从你的第一个小规模 LP 跑通开始比收藏十篇教程有用。【免费下载链接】HiGHSLinear optimization software项目地址: https://gitcode.com/GitHub_Trending/hi/HiGHS创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考