PyEPO: A PyTorch-based End-to-End Predict-then-Optimize Library for Linear and Integer Programming
In deterministic optimization, it is typically assumed that all parameters of
the problem are fixed and known. In practice, however, some parameters may be a
priori unknown but can be estimated from historical data. A typical
predict-then-optimize approach separates predictions and optimization into two
stages. Recently, end-to-end predict-then-optimize has become an attractive
alternative. In this work, we present the PyEPO package, a PyTorch-based
end-to-end predict-then-optimize library in Python. To the best of our
knowledge, PyEPO (pronounced like "pineapple" with a silent "n") is the first
such generic tool for linear and integer programming with predicted objective
function coefficients. It provides two base algorithms: the first is based on
the convex surrogate loss function from the seminal work of Elmachtoub & Grigas
(2021), and the second is based on the differentiable black-box solver approach
of Vlastelica et al. (2019). PyEPO provides a simple interface for the
definition of new optimization problems, the implementation of state-of-the-art
predict-then-optimize training algorithms, the use of custom neural network
architectures, and the comparison of end-to-end approaches with the two-stage
approach. PyEPO enables us to conduct a comprehensive set of experiments
comparing a number of end-to-end and two-stage approaches along axes such as
prediction accuracy, decision quality, and running time on problems such as
Shortest Path, Multiple Knapsack, and the Traveling Salesperson Problem. We
discuss some empirical insights from these experiments which could guide future
research. PyEPO and its documentation are available at
https://github.com/khalil-research/PyEPO.