PDLP: A Practical First-Order Method for Large-Scale Linear Programming
David Applegate, Mateo Díaz, Oliver Hinder, Haihao Lu, Miles Lubin, Brendan O'Donoghue, Warren Schudy
TL;DR
PDLP is a practical first-order method for large-scale linear programming that extends PDHG with diagonal preconditioning, adaptive restarts, adaptive step sizes, primal-weight updates, presolve, and a feasibility polishing phase. Implemented in a multithreaded C++ core within Google OR-Tools, PDLP demonstrates reliable, scalable performance on extremely large LPs (125M to 6.3B nonzeros), solving eight of eleven instances to within a 1% relative gap while maintaining primal and dual feasibility errors below $10^{-8}$. Compared to Gurobi barrier and simplex methods, PDLP achieves competitive wall-clock performance under memory constraints, highlighting the practical potential of carefully engineered first-order methods for industry-scale optimization. The key contributions—feasibility polishing and a high-performance C++ PDLP implementation—substantially advance the applicability of first-order LP solvers in real systems. The work also provides a rich large-scale benchmark suite to guide future algorithmic developments and hardware-accelerated implementations for LP.
Abstract
We present PDLP, a practical first-order method for linear programming (LP) designed to solve large-scale LP problems. PDLP is based on the primal-dual hybrid gradient (PDHG) method applied to the minimax formulation of LP. PDLP incorporates several enhancements to PDHG, including diagonal preconditioning, presolving, adaptive step sizes, adaptive restarting, and feasibility polishing. Our algorithm is implemented in C++, available in Google's open-source OR-Tools library, and supports multithreading. To evaluate our method, we introduce a new collection of eleven large-scale LP problems with sizes ranging from 125 million to 6.3 billion nonzeros. PDLP solves eight of these instances to optimality gaps of 1\% (with primal and dual feasibility errors of less than $10^{-8}$) within six days on a single machine. We also compare PDLP with Gurobi barrier, primal simplex, and dual simplex implementations. Gurobi barrier solves only three instances, exceeding our 1TB RAM limit on the other eight. While primal and dual simplex are more memory-efficient than the barrier method, they are slower and solve only three instances within six days. Compared with the conference version of this work (in: Advances in Neural Information Processing Systems 34 (NeurIPS 2021)), the key new contributions are: (i) feasibility polishing, a technique that quickly finds solutions that are approximately optimal but almost exactly feasible (without which only three of the eleven problems can be solved); (ii) a multithreaded C++ implementation available in Google OR-Tools; and (iii) a new collection of large-scale LP problems. Note that the conference version should be referred to for comparisons with SCS and ablation studies, which we do not repeat in this paper.
