khalil-research/PyEPO

A PyTorch-based End-to-End Predict-then-Optimize Library for Linear and Integer Programming

解决的问题

PyEPO 专为“预测与优化”(predict-then-optimize) 问题而设计。在此类场景中,机器学习模型会预测优化问题的系数(如成本或权重),随后用于寻找最佳解。传统上,模型训练旨在最小化预测误差,但 PyEPO 允许根据最终决策的质量(遗憾值,regret)而非仅仅是预测准确度来训练预测器。

运作原理

PyEPO 提供了一个将优化求解器与深度学习前端(PyTorch 和 JAX)整合的框架。它使用梯度代理 (gradient surrogates) 来对不可微分的优化层进行反向传播,从而实现预测器的端到端训练。该库包含一个用于定义线性规划 (LP)、混合整数规划 (MIP) 和二次目标函数的符号式 DSL,这些定义可以编译为各种求解器后端。

适用对象

本库旨在协助运筹学与机器学习领域的研究人员及从业者,将预测模型与下游决策过程进行整合,特别是针对线性与整数规划的应用。

特色亮点

  • 多样化的梯度代理:支持七种损失函数系列,包括代理损失 (SPO+)、扰动方法 (DPO, PFYL)、正则化方法 (RFWO)、黑盒方法 (DBB, NID)、锥对齐估计 (CaVE)、对比学习方法 (NCE) 以及排序学习 (LTR)。
  • 多求解器后端:兼容于 Gurobi, COPT, Pyomo, Google OR-Tools 以及 GPU 原生的 MPAX 求解器。
  • 符号式建模:具备 pyepo.dsl,可定义一次优化问题并编译至不同的后端。
  • GPU 加速:整合 MPAX 以在 GPU 上进行线性与二次规划的批次求解。
  • 性能优化:包含通过 Pathos 进行的并行求解以及解缓存机制,以减少冗余的求解器调用。

相关

  • 项目
  • 项目
  • 项目
  • 项目