src/subproblem.rs

branch
dev
changeset 34
efa60bc4f743
parent 29
87649ccfa6a8
child 39
6316d68b58af
--- 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,
         }
     }

mercurial