--- a/src/subproblem.rs Tue Aug 01 10:32:12 2023 +0300 +++ b/src/subproblem.rs Thu Aug 29 00:00:00 2024 -0500 @@ -14,6 +14,9 @@ pub mod nonneg; pub mod unconstrained; +pub mod l1squared_unconstrained; +pub mod l1squared_nonneg; + /// Method for solving finite-dimensional subproblems #[derive(Clone, Copy, Eq, PartialEq, Serialize, Deserialize, Debug)] @@ -23,6 +26,10 @@ FB, /// Semismooth Newton SSN, + /// PDPS + PDPS, + /// Problem-specific choice (in practise FB or PDPS, whichever is implemented) + Default, } /// Settings for the solution of finite-dimensional subproblems @@ -30,8 +37,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 @@ -43,7 +52,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 @@ -55,7 +65,7 @@ quiet : true, .. Default::default() }, - method : InnerMethod::FB, + method : InnerMethod::Default, tolerance_mult : 0.01, } }