highspy 完整指南:用 Python 求解 LP、MIP 与 QP 优化问题
highspy 完整指南用 Python 求解 LP、MIP 与 QP 优化问题【免费下载链接】HiGHSLinear optimization software项目地址: https://gitcode.com/GitHub_Trending/hi/HiGHS排产排班、库存调拨、资产配置最后都落在同一件事上在有限资源里做选择并给每个选择算出代价。想在 Python 里解决这类问题highspy 是一个现成的选项。它是开源求解器 HiGHS 的官方 Python 接口覆盖线性规划、混合整数规划、二次规划三类问题pip install highspy之后即可使用。HiGHS 与 highspy求解器与封装的分工HiGHS 是一个用 C 编写的高性能开源线性优化求解器覆盖线性规划LP、混合整数规划MIP与二次规划QP预处理、对偶单纯形、内点法等算法均为自研实现。highspy 是它的 Python 层Highs() 实例上的方法与底层 C 接口一一对应但调用时用自然的 Python 语法写就行。相比自己封装 C 库它省掉的成本主要有三处环境成本不用安装 C 编译器不用找头文件和库文件一条pip install highspy得到预编译二进制和 numpy 依赖。使用成本不用处理指针与数组布局约束和目标用 Python 表达式直接写交给求解器即可。迁移成本已有 MPS 格式的模型文件可以直接被 highspy 读取不必在 Python 里逐行重建模型。highspy 安装与首次运行安装是一条命令的事没有编译环节pip install highspy这条命令装的是预编译的 highspy 包同时带上 numpy之后代码里直接 import 就能用不需要额外配置环境变量。第一个线性规划示例的完整代码如下它最小化 x2受两个线性约束限制import highspy h highspy.Highs() inf h.inf x1 h.addVariable(lb-inf) x2 h.addVariable(lb-inf) h.addConstrs(x2 - x1 2, x1 x2 0) h.minimize(x2) h.solve() print(h.getModelStatus()) print(h.getInfo().objective_function_value)这 15 行完成了建实例—加变量—加约束—设目标—求解—取结果的完整流程其中最后两行用于核对答案。结果正确与否看两点getModelStatus()输出应为 kOptimal表示找到了最优解getInfo().objective_function_value输出应为 2这是手算两个约束后能取到的最小值。若状态不是 kOptimal先检查约束写反了方向还是变量上下界设错了。highspy 核心能力读 MPS、切换求解器、回调日志readModel 直接读入 MPS 模型文件模型已经在 MPS 文件里时常由建模工具或其他软件导出不必在 Python 里重新搭建。readModel读入后直接run变量取值、目标值、迭代次数分别从getSolution和getInfo中取。仓库的 check/instances/ 目录里有几十个经典测试模型可以直接拿来练手。h highspy.Highs() h.readModel(check/instances/avgas.mps) h.run() print(h.getInfo().objective_function_value)这段代码读入自带测试模型 avgas 并求解打印最优目标值模型不可行时状态会是 kInfeasible而不是抛出异常。切换求解算法单纯形与内点法二选一HiGHS 默认自动决定开不开预处理、用哪种求解方法多数场景不用碰它。想干预时取出 options 改两个字段再交回即可最常见的组合是关闭预处理并改用内点法。solver选项可取dual_simplex、primal_simplex、ipm等值各选项含义见 docs/src/options/definitions.md。options h.getOptions() options.presolve off options.solver ipm h.passOptions(options) h.run()关闭预处理后求解器在原模型上运行便于观察它的行为换成 ipm 适合单纯形法收敛困难或想对比两种算法耗时的场景。回调机制求解过程的行车记录仪回调机制允许你把自己的函数挂进求解过程在求解中收到指定类型的事件。它像行车记录仪本身不改变行驶过程但事后可回看每一次发生了什么。常用类型包括日志输出、单纯形迭代中断、MIP 更新最优解后两者甚至能据此提前结束求解。含中断条件和最优解跟踪的完整示例在 examples/ 目录里可以找到。三条工程化建议用稀疏结构构建约束大规模模型直接按 CSC 格式填 start_、index_、value_ 三个数组不要构造稠密矩阵。约束数超过 10 万量级时内存和构建耗时能明显下降。热启动两次求解的模型只有小改动边界放宽、右端项微调时把getBasis()的结果存下来用setBasis交给下一个实例。两次求解结构一致时单纯形迭代次数会显著减少。按问题类型调参MIP 问题用time_limit与mip_rel_gap控制解质量和耗时的取舍LP 问题先试一次关掉预处理对比迭代次数确认预处理是否真的在帮忙。适合的场景以及什么时候该换highspy 适合数据分析、供应链、运筹方向的中大型 LP/QP 与 MIP 求解已有 MPS/LP 模型文件、只需把求解能力接进 Python 管线的场景需要快速对比不同求解策略做原型的场景。问题里含非线性约束NLP时HiGHS 覆盖不到应换通用非线性求解器。若要把求解器做成对外服务长期运行直接走 C 接口或可执行程序更稳省去 Python 的进程与内存开销。只解决小规模凸优化时scipy 与 cvxpy 的生态也更常见。下一步可以直接执行pip install highspy从 check/instances/ 挑一个测试模型求解按状态与目标值两项核对输出是否符合预期。【免费下载链接】HiGHSLinear optimization software项目地址: https://gitcode.com/GitHub_Trending/hi/HiGHS创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考