pub struct SolverSettings {Show 18 fields
pub max_iterations: usize,
pub absolute_tolerance: f64,
pub relative_tolerance: f64,
pub rho: f64,
pub sigma: f64,
pub check_termination_every: usize,
pub adaptive_rho: bool,
pub adaptive_rho_interval: usize,
pub adaptive_rho_tolerance: f64,
pub adaptive_rho_multiplier: f64,
pub over_relaxation: f64,
pub minimum_rho: f64,
pub maximum_rho: f64,
pub scaling_iterations: usize,
pub infeasibility_tolerance: f64,
pub polish: bool,
pub polish_regularization: f64,
pub polish_refinement_iterations: usize,
}Expand description
ADMM settings.
Fields§
§max_iterations: usizeMaximum number of ADMM iterations.
absolute_tolerance: f64Absolute stopping tolerance.
relative_tolerance: f64Relative stopping tolerance.
rho: f64Initial augmented-Lagrangian penalty.
sigma: f64Positive proximal regularization in the x update.
check_termination_every: usizeEvaluate KKT residuals every this many iterations.
adaptive_rho: boolWhether residual balancing may update rho.
adaptive_rho_interval: usizeConsider a penalty update every this many iterations.
adaptive_rho_tolerance: f64Update when one ADMM residual exceeds the other by this ratio.
adaptive_rho_multiplier: f64Multiplicative increase or decrease applied to rho.
over_relaxation: f64Over-relaxation coefficient alpha blended into every consensus
update: the slack and multiplier steps see
alpha * Ax + (1 - alpha) * z_prev instead of Ax.
Must lie in the open interval (0, 2); 1.0 disables relaxation and
recovers plain ADMM. Values around 1.6 typically cut iteration
counts substantially on feasible convex QPs (see Boyd et al. §3.4.3
and the OSQP default).
minimum_rho: f64Smallest penalty selected by adaptation.
maximum_rho: f64Largest penalty selected by adaptation.
scaling_iterations: usizeNumber of Ruiz equilibration passes over the problem data before
iterating; 0 disables automatic scaling.
Scaling only changes the space ADMM iterates in. Termination checks and every reported residual are always evaluated on the original data.
infeasibility_tolerance: f64Tolerance for declaring the problem primal or dual infeasible from
ADMM iterate differences; 0 disables infeasibility detection.
Candidate certificates are normalized to unit infinity norm and
evaluated on the original data, so the tolerance is relative: a
direction qualifies when its defining residuals are below the
tolerance and its gap is below the negated tolerance (see
crate::check_primal_certificate /
crate::check_dual_certificate). Problems infeasible by a margin
smaller than this tolerance stop at SolveStatus::MaxIterations
with diagnostics instead.
polish: boolWhether to refine Solved iterates with one direct active-set solve
(polishing).
The active set is guessed from the final multipliers and the
resulting KKT system is solved through the same SMW reduction the
iterations use, at the cost of one extra reduced factorization. The
polished iterate is adopted only when its worst KKT residual —
re-audited with crate::check_kkt on the original data — improves
on the ADMM iterate’s, so enabling polish never degrades a solution.
Solution::polished records the outcome.
polish_regularization: f64Regularization added to the polishing KKT system so it stays factorable even when the active-set guess is degenerate.
The regularization error is removed afterwards by
SolverSettings::polish_refinement_iterations rounds of iterative
refinement against the unregularized system.
polish_refinement_iterations: usizeIterative-refinement rounds applied to the polishing solve.
Trait Implementations§
Source§impl Clone for SolverSettings
impl Clone for SolverSettings
Source§fn clone(&self) -> SolverSettings
fn clone(&self) -> SolverSettings
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more