Solution Pool¶
End-to-end predict-then-optimize training involves repeated solving of optimization problems. A solution pool [1] serves as an inner approximation of the feasible region, reducing computation by reusing previously computed solutions. Instead of solving the full linear/integer program, PyEPO selects the best cached solution from the pool.
The algorithm is shown below.
Algorithm — Gradient descent with inner approximation (numbering follows [1])
Input: \(A, b\); training data \(\mathcal{D} \equiv \{(x_i, c_i)\}_{i=1}^n\)
Hyperparams: \(\alpha\) (learning rate), epochs, \(p_{\text{solve}}\)
The solution pool is integrated into all pyepo.func modules.
solve_ratio controls the fraction of instances solved exactly during training. The default is 1.0 (no caching). When solve_ratio is less than 1, pass dataset to seed the pool with initial solutions.
Example with SPO+ (other functions work the same way):
import pyepo
spo = pyepo.func.SPOPlus(optmodel, processes=2, solve_ratio=0.7, dataset=dataset)