ULSAlgorithms v0.21.0 adds cut-pool management, root convergence statistics and pure separator benchmarks without changing the exactness guarantee introduced in v0.20.0.
LsCuttingPlaneOptions.SelectionPolicy supports:
AllViolated is the v0.20.0 behavior and remains the default.
For the two top-K policies, use:
A minimum efficacy can also be imposed:
Eligible violated cuts that are deliberately not inserted are retained in the trace with:
Therefore cut-pool management never destroys observability.
Every root iteration now records:
The complete solve exposes:
For a minimization problem, root-gap closure is:
\[\frac{z_{LP}^{final}-z_{LP}^{initial}} {z_{MIP}-z_{LP}^{initial}}. \]
The metric is omitted when the initial LP already matches the final MILP objective numerically.
Cut selection changes only root strengthening.
The algorithm still solves the final strengthened model with binary setup variables and the same optimization engine selected for the first LP. Therefore all selection policies retain the exact final MILP guarantee.
LsSeparationBenchmarks measures the two separation engines independently of CPLEX, Gurobi, Xpress or CBC.
Benchmark horizons:
The benchmark reports both time and allocations through BenchmarkDotNet's MemoryDiagnoser.
Keeping solver time outside this benchmark makes it possible to measure whether future separator/data-structure changes actually improve the ULSAlgorithms code rather than merely observing optimization-engine variability.