src/subproblem.rs

changeset 52
f0e8704d3f0e
parent 39
6316d68b58af
--- 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,
         }
     }

mercurial