--- a/src/subproblem.rs Tue Aug 01 10:25:09 2023 +0300 +++ b/src/subproblem.rs Mon Feb 17 13:54:53 2025 -0500 @@ -14,15 +14,12 @@ pub mod nonneg; pub mod unconstrained; +pub mod l1squared_unconstrained; +pub mod l1squared_nonneg; -#[deprecated(since = "1.0.1", note = "Moved to submodule nonneg")] -pub use nonneg::{ - quadratic_nonneg, - quadratic_nonneg_ssn, - quadratic_nonneg_fb -}; -/// Method for solving finite-dimensional subproblems +/// Method for solving finite-dimensional subproblems. +/// Not all outer methods necessarily support all options. #[derive(Clone, Copy, Eq, PartialEq, Serialize, Deserialize, Debug)] #[allow(dead_code)] pub enum InnerMethod { @@ -30,6 +27,8 @@ FB, /// Semismooth Newton SSN, + /// PDPS + PDPS, } /// Settings for the solution of finite-dimensional subproblems @@ -37,8 +36,10 @@ pub struct InnerSettings<F : Float> { /// Method pub method : InnerMethod, - /// Proportional step length (∈ [0, 1) for `InnerMethod::FB`). - pub τ0 : F, + /// Proportional step length ∈ [0, 1) for `InnerMethod::FB`. + pub fb_τ0 : F, + /// Proportional primal and dual step lengths for `InnerMethod::PDPS`. + pub pdps_τσ0 : (F, F), /// Fraction of `tolerance` given to inner algorithm pub tolerance_mult : F, /// Iterator options @@ -50,7 +51,8 @@ impl<F : Float> Default for InnerSettings<F> { fn default() -> Self { InnerSettings { - τ0 : 0.99, + fb_τ0 : 0.99, + pdps_τσ0 : (1.98, 0.5), iterator_options : AlgIteratorOptions { // max_iter cannot be very small, as initially FB needs many iterations, although // on later invocations even one or two tends to be enough @@ -62,7 +64,7 @@ quiet : true, .. Default::default() }, - method : InnerMethod::FB, + method : InnerMethod::SSN, tolerance_mult : 0.01, } }