  We present PDLP, a practical first-order method for linear programming (LP)
that can solve to the high levels of accuracy that are expected in traditional
LP applications. In addition, it can scale to very large problems because its
core operation is matrix-vector multiplications. PDLP is derived by applying
the primal-dual hybrid gradient (PDHG) method, popularized by Chambolle and
Pock (2011), to a saddle-point formulation of LP. PDLP enhances PDHG for LP by
combining several new techniques with older tricks from the literature; the
enhancements include diagonal preconditioning, presolving, adaptive step sizes,
and adaptive restarting. PDLP improves the state of the art for first-order
methods applied to LP. We compare PDLP with SCS, an ADMM-based solver, on a set
of 383 LP instances derived from MIPLIB 2017. With a target of $10^{-8}$
relative accuracy and 1 hour time limit, PDLP achieves a 6.3x reduction in the
geometric mean of solve times and a 4.6x reduction in the number of instances
unsolved (from 227 to 49). Furthermore, we highlight standard benchmark
instances and a large-scale application (PageRank) where our open-source
prototype of PDLP, written in Julia, outperforms a commercial LP solver.
