☰
HiGHS:快速求解线性规划与混合整数规划的开源优化求解器
2026/10/23 1:46:30 网站建设 项目流程

HiGHS:快速求解线性规划与混合整数规划的开源优化求解器

【免费下载链接】HiGHSLinear optimization software项目地址: https://gitcode.com/GitHub_Trending/hi/HiGHS

HiGHS 是一款基于 MIT 协议的开源线性规划求解器,针对大规模稀疏优化问题做了性能优化,用 C++ 实现且无第三方依赖。它支持线性规划(LP)、凸二次规划(QP)与混合整数规划(MIP),在 Linux、macOS、Windows 上均可构建使用,也提供 C、C++、C#、Fortran 和 Python 接口。

项目定位与价值

HiGHS 的模型形式为min 1/2 x'Qx + c'x,约束为L <= Ax <= U且l <= x <= u,其中Q半正定。Q为零矩阵时退化为标准 LP;若要求部分变量取整,则变为 MIP。也就是说,一个求解器同时覆盖 LP、QP、MIP 三类模型,省去了在不同工具之间转换模型的麻烦。

特性说明
开源协议MIT 协议,可免费用于商业项目,无使用限制
实现语言主要为 C++,含少量 C;构建不需要任何第三方依赖
运行平台Linux、macOS、Windows 均已开发测试
运行形态支持串行求解,也提供并行计算能力
模型输入支持 LP、MPS 文件与程序化建模

典型建模场景

生产排程、物流配载、投资组合、发电调度等问题的共同点,是都能写成"线性(或凸二次)目标 + 线性约束"的形式。HiGHS 按模型类型分工求解:

场景建模方式说明
生产排程、配载、发电调度LP目标与约束均为线性,单纯形法通常很快收敛
车辆路径、班次排班等含 0-1 决策的问题MIP引入整数变量,由分支定界框架求解
均值-方差型投资组合QP方差项构成凸二次目标,由主动集算法处理

如果模型同时含整数变量与二次目标,需要先按标准建模方法改写;HiGHS 求解的 MIP 部分基于线性化形式。

Python 安装步骤与首次运行

最快的上手路径是安装 Python 包highspy,再写几行代码建模求解:

pip install highspy
import 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) # 设置目标函数 h.run() # 求解 print(h.getModelStatus()) # 模型状态 print(h.getInfo().objective_function_value) # 最优目标值

这段代码与仓库示例 call_highs_from_python_highspy.py 的建模方式一致:addVariable声明变量,addConstrs以线性表达式添加约束,run()触发求解,getInfo()读取目标值与迭代数等信息。

从源码构建时,需要 CMake 3.15 及以上版本:

cmake -S . -B build cmake --build build

构建产物为可执行文件bin/highs与库文件lib/highs,可用ctest验证编译结果。C/C++ 集成只需包含Highs.h头文件并链接该库,C 接口见 highs_c_api.h,C# 与 Fortran 的示例分别在 examples/call_highs_from_csharp.cs 和 examples/call_highs_from_fortran.f90。

能处理哪些数学模型:LP、MIP 与 QP 的求解策略

LP 求解器提供两套算法。原始/对偶修正单纯形法稳健性强,适合大多数标准 LP,且能给出基结构,便于做灵敏度分析;内点法面向大规模稀疏问题,迭代次数对问题规模不敏感,求解后默认可执行 crossover 得到基本可行解(由run_crossover选项控制),通过solver选项可在两者间切换。

MIP 求解器采用分支定界框架,配套割平面生成、冲突池管理、原始启发式(含可行性跳跃)与伪成本机制,并支持多线程并行搜索。对一般规模整数问题通常能给出精确最优解或高质量近似解,大规模问题则受时间限制约束。

QP 求解器基于主动集法,只接受半正定二次目标,面向凸二次规划。它同样维护基结构,支持热启动式的连续求解。

性能调优与进阶用法

HiGHS 支持选项文件,每行一个key = value,#开头为注释,仓库里有一份 sample_options_file 可作模板。常用配置:

presolve = on # 预处理,先缩减问题规模 time_limit = 3600 # 求解时间上限(秒) parallel = on # 开启并行 threads = 8 # 并行线程数 random_seed = 42 # 固定随机种子,保证结果可复现

命令行方式:

highs --options_file my_options.txt model.mps

进阶建议:MIP 问题优先保持presolve = on,预处理通常比任何单个参数都有效;大规模稀疏 LP 若单纯形迭代过多,可切换内点法再配合 crossover;超大规模问题注意矩阵稀疏存储与内存占用,必要时用选项文件收紧求解过程日志(如log_to_console),避免 I/O 拖慢整体速度。

常见问题排查

构建失败:现象为 CMake 配置阶段报错。先确认 CMake 版本不低于 3.15、工具链支持 C++11;HiGHS 无第三方依赖,通常不是缺库问题,构建细节可查 cmake/README.md。

求解偏慢或超时:现象是迭代数异常多或触发time_limit。检查 presolve 是否被误关,确认整数变量的取值域已收紧;仍不满足时切换solver选项,或按上文选项文件调整线程数与时间上限。

接口行为异常:Python 端报错多与highspy版本和 numpy 兼容性有关,可先升级两者;C/C++ 端注意头文件包含路径与链接库版本要和源码一致,接口差异可对照 examples/ 下各语言示例的最小调用方式。

文档、示例与延伸阅读

建议按由浅入深的顺序阅读仓库内容:

  1. 官方文档:docs/src/ 下的使用指南、选项定义(options/definitions.md)、求解器说明(solvers.md)与术语表(terminology.md);
  2. 示例代码:examples/ 提供 Python、C、C++、C#、Fortran 五种语言的调用示例,以及 knapsack.py、branch-and-price.py、network_flow.py 等带算法思路的建模演示;
  3. 测试用例:check/instances/ 收集了大量 LP/MIP 测试实例(含 MPS 与 LP 格式),配套的 check/TestLpSolvers.cpp 等用例展示了不同求解路径的行为差异,适合想理解求解器内部行为的读者。

HiGHS 以 MIT 协议提供 LP、MIP、QP 三类模型的统一求解能力,适合科研与工程中的优化建模需求。仓库地址:https://gitcode.com/GitHub_Trending/hi/HiGHS

【免费下载链接】HiGHSLinear optimization software项目地址: https://gitcode.com/GitHub_Trending/hi/HiGHS

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询