HiGHS Python 上手教程:highspy 三步完成安装、建模与求解 HiGHS Python 上手教程highspy 三步完成安装、建模与求解【免费下载链接】HiGHSLinear optimization software项目地址: https://gitcode.com/GitHub_Trending/hi/HiGHSHiGHS 是一个 MIT 许可的 C 优化求解器支持 LP线性规划、MIP混合整数规划和凸 QP二次规划highspy 是它的 Python 接口。这篇教程带你走完装→跑→用三步适合第一次在 Python 里接入 HiGHS 的开发者。它解决了什么问题手上有一个几千个变量的 LP 或 MIP 模型手写单纯形法不现实——数值稳定性、预求解presolve求解前自动简化模型的阶段这些细节都很讲究。需要一个免费、可商用、无外部依赖的求解器替代商业软件HiGHS 是 MIT 许可、无第三方依赖C 库之外还有 Python 等语言接口。想在 Python 脚本里直接定义变量、约束和目标函数并求解不想先手工导出模型文件。本文的命令、API 和路径均按当前仓库highspy 1.15.1核实过。highspy 三步跑起来装进 Python一条命令即可numpy 依赖会随之自动安装无需手动配置 C 环境pip install highspy要求 Python ≥ 3.9见仓库 pyproject.toml。最小可运行示例下面这段代码定义了两个变量、一个约束、一个目标函数并求解运行后控制台会打印 HiGHS 的求解日志最后一行输出最优目标值import highspy h highspy.Highs() x1 h.addVariable(lb0, ubh.inf) # 0 x1 x2 h.addVariable(lb0, ubh.inf) # 0 x2 h.addConstr(x2 - x1 2) # 约束x2 至少比 x1 大 2 h.minimize(x2) # 最小化 x2 h.run() print(最优目标值 , h.getInfo().objective_function_value)该示例取自仓库 examples/minimal.py。默认目标方向是最小化变量下界默认 0、上界默认无穷所以不需要显式写满所有参数。看懂输出h.run()返回后结果分散在三个接口里h.getModelStatus()给出模型状态配合h.modelStatusToString()可转成可读字符串kOptimal表示已求得最优解。h.getInfo()返回求解信息结构常用字段objective_function_value目标值、simplex_iteration_count单纯形迭代次数。h.getSolution()返回原像解各变量取值h.getBasis()返回基状态。核心用法拆解读取 MPS 模型文件并求解HiGHS 能直接读 MPS 和 CPLEX LP 两种格式的文件。仓库自带测试模型路径check/instances/需在仓库根目录下运行脚本。下面这段演示读文件→求解→取解的最小闭环import highspy h highspy.Highs() h.readModel(check/instances/avgas.mps) # 读取 MPS 模型文件 h.run() info h.getInfo() solution h.getSolution() print(h.modelStatusToString(h.getModelStatus())) print(info.objective_function_value) col_value list(solution.col_value) # 先转 list 再访问 print(col_value)配置求解器参数setOptionValue按名字设单个选项。常见选项presolvechoose/on/off、solverchoose/simplex/ipmipm 即内点法仅适用于 LP。例如关闭预求解、改用内点法求解h.setOptionValue(presolve, off) h.setOptionValue(solver, ipm)也可以用h.getOptions()/h.passOptions(options)以结构体方式批量设置所有选项清单见 docs/src/options/definitions.md。上手前绕不开的坑readModel读不到文件现象是返回错误状态或抛异常原因是路径相对当前工作目录解析从别的目录跑脚本就找不到check/instances/avgas.mps解法是用绝对路径或在仓库根目录下执行脚本。用np.inf代替h.inf现象是边界条件行为不符合预期原因是 HiGHS 用内部常量highspy.kHighsInf等价于h.inf表示无穷直接写 numpy 的np.inf可能超出它的内部无穷判定阈值解法是统一用h.inf。逐个访问解数组很慢现象是for i in range(n): v[i]循环明显卡顿原因是solution.col_value等返回的数组逐元素访问开销大官方文档中 0.04s 的操作换成 list 后只要 0.0001s解法是先col_value list(solution.col_value)再访问。求解日志刷屏现象是每次run()都打印一大段日志原因是 highspy 默认把控制台日志打开解法是求解前一行h.silent()关掉输出。适用与不适用适合 HiGHS不适合稀疏 LP / MIP / 凸 QP 模型非凸二次或带非线性约束的模型需要免费、无第三方依赖的求解器带整数变量的 QPHiGHS 不支持该组合在 Python 流程里直接建模、求解、取解对特定商业求解器的性能特征有硬性要求时接下来看什么Python 接口入门文档docs/src/interfaces/python/index.md逐方法示例读模型、建模型、取结果、设选项docs/src/interfaces/python/example-py.md最小完整脚本examples/minimal.py功能更全的演示examples/call_highs_from_python_highspy.py把上面三段代码跑通你的第一个模型就已经求解完成了接下来可以拿自己的 MPS 或 LP 文件试水。【免费下载链接】HiGHSLinear optimization software项目地址: https://gitcode.com/GitHub_Trending/hi/HiGHS创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考