Step size¶
cuPDLPx initializes the step size from the spectral norm of the scaled constraint matrix. The active-set step size boost can increase it near a solution.
Initial constant step size¶
For the scaled constraint matrix \(A\), the initial step size is[1]
The spectral norm is estimated by power iteration on \(AA^\top\) after preconditioning. The primal and dual step sizes are
The factor 0.998 provides a safety margin relative to the estimated norm.
The canonical PDHG metric is positive definite when
\(\eta<1/\lVert A\rVert_2\). At each restart, the
primal-weight controller can change \(\tau\) and \(\sigma\)
while preserving \(\tau\sigma=\eta^2\) for a fixed \(\eta\).
Active-set step size boost¶
The initial step size \(\eta^0=0.998/\lVert A\rVert_2\) uses the full constraint matrix. Near a solution, inactive constraints and variables that remain at their bounds can permit a larger step size. The active-set step size boost (ASB) retains potentially binding constraints in \(B\) and variables not identified as persistently clamped at a bound in \(F\). The tests below define these sets. The resulting submatrix \(A_{B,F}\) satisfies
ASB estimates \(\lVert A_{B,F}\rVert_2\) and uses it to propose a larger step size at an adaptive restart. A divergence check can trigger rollback and start a new epoch. ASB is enabled by default.
Active set¶
The sets \(B\) and \(F\) retain constraints and variables that do not meet the exclusion tests over the trailing window. These tests use the PDHG update from \((x,y)\) to \((\widehat x,\widehat y)\):
Variables. The primal projection gives the dual-slack estimate
A positive \(\tilde r_i\) indicates projection onto the lower bound; a negative value indicates projection onto the upper bound. Variable \(i\) meets the exclusion test when \(\ell_{v,i}=u_{v,i}\) or when
Constraints. The dual update projects
onto \([-u_c,-\ell_c]\). It gives \(\widehat y_j=0\) when \(\tilde s_j\) lies in this interval. Constraint \(j\) meets the exclusion test when \(\ell_{c,j}<u_{c,j}\) and \(\tilde s_j\) lies inside \([-u_{c,j},-\ell_{c,j}]\) with a margin at each finite endpoint:
Both tolerances default to 1e-8. The submatrix \(A_{B,F}\) contains the rows in
\(B\) and the columns in \(F\).
Activation¶
Trailing window¶
The exclusion tests run at every termination check. An index is removed
from \(B\) or \(F\) only if it meets the exclusion test at every check over the
last 10000 iterations by default. It is restored as soon as it fails the test.
Activation tolerance¶
ASB activates when the relative primal residual, relative dual residual, and relative primal–dual gap are all below the activation tolerance (\(10^{-4}\) by default), and at least one index has been excluded. See Termination criteria for the residual definitions.
Step-size increase¶
After activation, ASB uses adaptive restarts to estimate
by power iteration, setting entries outside \(B\) and \(F\) to zero after each product and warm-starting from the previous eigenvector.
ASB re-estimates the norm when the accumulated additions and removals
reach 1% of the current \(|B|+|F|\) by default. It skips the estimate if the
step-size limit rules out an increase, and stops power iteration early if
the running estimate does so. These decisions are retained until the same
change threshold is reached.
For a positive norm estimate, the proposed step size and acceptance condition are
Here \(\alpha\) is a safety factor (default 0.9), \(\rho\) is the minimum
increase ratio (default 1.1), and the upper limit
\(\eta_{\mathrm{ceil}}\) is initially \(\infty\).
When an increase is accepted, ASB saves the restart iterate, primal weight,
and controller state for rollback.
Divergence protection¶
While \(\eta>\eta^0\), ASB monitors the fixed-point error \(r\), with the metric \(P\) evaluated at the initial step size. The divergence check triggers when the error or residuals are nonfinite, or when
Here \(z^0\) is the first iterate of the current epoch, and \(\delta\) defaults
to 0.05. A rollback
- restores the saved iterate, primal weight, and controller state;
- resets the step size to \(\eta^0\) and discards \(\hat\sigma\);
- resets the local iteration count;
- sets \(\eta_{\mathrm{ceil}}\) to
0.7times the rejected step size by default.
By default, ASB is disabled for the rest of the solve after two rollbacks. The C result and command-line output report step-size increases, rollbacks, and power iteration counts.
Parameters¶
See Step size and reflection for power iteration settings and Active-set step size boost for ASB settings.
References¶
[1] Haihao Lu, Zedong Peng, and Jinwen Yang. cuPDLPx: A Further Enhanced GPU-Based First-Order Solver for Linear Programming, 2025.