资讯动态

HiGHS + highspy 入门指南:5 步用 Python 解线性规划、整数与二次模型

发布时间:2026/10/23 2:37:35 来源:尧图企业网站定制
HiGHS highspy 入门指南5 步用 Python 解线性规划、整数与二次模型【免费下载链接】HiGHSLinear optimization software项目地址: https://gitcode.com/GitHub_Trending/hi/HiGHSHiGHS 是一款开源线性优化软件MIT 协议负责求解 LP线性规划、MIP混合整数规划和凸 QP二次规划这类问题它的 Python 封装 highspy 把求解器 API 变成了几行就能跑通的代码。装上它你的 Python 项目就多了一个不用写 C、不用配商业许可证的求解内核。HiGHS 能力速览支持 LP、凸 QP、MIP 三类模型变量可带整数、半连续等类型约束自带预求解presolve求解前先化简模型和后处理串行与多线程两种模式内置多种算法原始/对偶单纯形、内点法IPM、QP 的主动集法、MIP 的分支定界支持求解中注册回调函数实时读取日志、割平面、搜索节点等信息提供 Python、C、C#、Fortran、Julia 多语言接口仓库highspy/下即是 Python 绑定源码环境配置一条命令装好 highspy大多数场景你只需要预编译包pip install highspy这条命令会顺带装好 numpy 依赖装完在 Python 里import highspy能打印出模块就说明就绪。如果你要改求解器源码或需要特定构建选项再考虑从源码构建CMake 3.15git clone https://gitcode.com/GitHub_Trending/hi/HiGHS cd HiGHS cmake -S . -B build cmake --build build产物是可执行程序bin/highs和动态库lib/highs进 build 目录跑ctest可验证编译是否成功。一般用不着走到这一步跟着上面第一条命令做就行。实战一10 行代码建模并求解 LPhighspy 提供一个轻量建模接口addVariable建变量、addConstr加约束、maximize直接求解。下面的例子最大化10x1 25x2受两条资源约束限制import highspy h highspy.Highs() x1 h.addVariable() # 默认下界 0、连续 x2 h.addVariable() h.addConstr(x1 2 * x2 80) h.addConstr(x1 4 * x2 120) h.maximize(10 * x1 25 * x2) print(x1 , h.val(x1), x2 , h.val(x2))预期输出两个变量取值x1 16.0, x2 32.0——maximize内部会自动调用求解并回填变量值不需要单独写run()。实战二解 0-1 整数模型与读取 MPS 文件把变量声明成addBinaries就切换到了 MIP 模式如果你已有标准格式模型文件readModel可以直接读。仓库里自带测试集在仓库根目录下可以这样试import highspy # 0-1 模型4 个开关型决策变量 h highspy.Highs() x h.addBinaries(4) h.addConstr(x[0] x[1] 1) h.minimize(5 * x[0] 4 * x[1] 7 * x[2] 3 * x[3]) print([round(v) for v in h.vals(x)]) # 读取现成的 MPS 模型路径按你仓库实际位置改 h2 highspy.Highs() h2.readModel(check/instances/avgas.mps) h2.run() print(h2.modelStatusToString(h2.getModelStatus()))第一个模型预期输出最优解[0, 1, 0, 0]第二个模型解完会打印HighsModelStatus.kOptimal表示找到了最优解。check/instances/下还有上百个 LP/MPS 样本可以随手拿来练手。按需选用的进阶技巧换内点法大规模稀疏 LP 可设options.solver ipm后passOptions(options)单纯形迭代多时内点法往往更稳控制预求解options.presolve off可跳过 presolve调试数值问题时有用正常求解建议保持开启写回调简单场景用model.cbMipGetCutPool func挂到事件上即可在 MIP 求解时打印每轮割平面复杂控制用setCallbackstartCallback取求解细节getInfo()返回目标值、迭代次数、对偶状态getSolution()、getBasis()分别取变量取值和基状态做敏感性分析时离不开多目标与灵敏度支持多目标求解和HighsRanging区间分析调ranging相关接口拿到成本系数变化范围你的项目适合 HiGHS 吗如果你的项目涉及生产排程、设备分配这类每个任务恰好分给一台机器的问题MIP 模型加上容量约束就是 HiGHS 的主场仓库examples/里有个完整的广义分配问题示例callback_gap.py。做物流路径、库存调度的同学稀疏网络结构 整数变量的组合它同样能吃下。金融方向上组合优化里带二次风险项的部分可以交给凸 QP 求解。另外它的命令行工具highs直接吃.mps/.lp文件做模型校验、跑基准测试时不用写代码。几条踩坑后的经验小模型在控制台刷屏很烦跑批前先h.setOptionValue(log_to_console, False)关掉日志只留报错级别。MIP 别让它无限搜设time_limit秒兜底配合gap_rel控制最优性间隙比干等精确解实际得多。大规模问题先确认矩阵是稀疏存储addRows的 starts/indices 格式就是 CSR 式稀疏结构稠密传参会让内存和速度一起崩。结语装上 highspy把第一个 LP 跑起来剩下的交给实践。【免费下载链接】HiGHSLinear optimization software项目地址: https://gitcode.com/GitHub_Trending/hi/HiGHS创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

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

免费获取报价 →
↑