Thu, 26 Feb 2026 13:05:07 -0500
Allow fitness merge when forward_pdps and sliding_pdps are used as forward-backward with aux variable.
|
24
d29d1fcf5423
Support arbitrary regularisation terms; implement non-positivity-constrained regularisation.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
1 | /*! |
|
d29d1fcf5423
Support arbitrary regularisation terms; implement non-positivity-constrained regularisation.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
2 | Iterative algorithms for solving the finite-dimensional subproblem. |
|
d29d1fcf5423
Support arbitrary regularisation terms; implement non-positivity-constrained regularisation.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
3 | */ |
| 0 | 4 | |
|
63
7a8a55fd41c0
Subproblem solver and sliding adjustments/improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
39
diff
changeset
|
5 | use alg_tools::iterate::{AlgIteratorOptions, Verbose}; |
|
7a8a55fd41c0
Subproblem solver and sliding adjustments/improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
39
diff
changeset
|
6 | use clap::ValueEnum; |
| 0 | 7 | use numeric_literals::replace_float_literals; |
|
63
7a8a55fd41c0
Subproblem solver and sliding adjustments/improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
39
diff
changeset
|
8 | use serde::{Deserialize, Serialize}; |
| 0 | 9 | |
| 10 | use crate::types::*; | |
| 11 | ||
|
63
7a8a55fd41c0
Subproblem solver and sliding adjustments/improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
39
diff
changeset
|
12 | pub mod l1squared_nonneg; |
|
7a8a55fd41c0
Subproblem solver and sliding adjustments/improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
39
diff
changeset
|
13 | pub mod l1squared_unconstrained; |
|
24
d29d1fcf5423
Support arbitrary regularisation terms; implement non-positivity-constrained regularisation.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
14 | pub mod nonneg; |
|
d29d1fcf5423
Support arbitrary regularisation terms; implement non-positivity-constrained regularisation.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
15 | pub mod unconstrained; |
|
d29d1fcf5423
Support arbitrary regularisation terms; implement non-positivity-constrained regularisation.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
16 | |
|
39
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
34
diff
changeset
|
17 | /// Method for solving finite-dimensional subproblems. |
|
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
34
diff
changeset
|
18 | /// Not all outer methods necessarily support all options. |
|
63
7a8a55fd41c0
Subproblem solver and sliding adjustments/improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
39
diff
changeset
|
19 | #[derive(Clone, Copy, Eq, PartialEq, Serialize, Deserialize, Debug, ValueEnum)] |
| 0 | 20 | #[allow(dead_code)] |
| 21 | pub enum InnerMethod { | |
| 22 | /// Forward-backward | |
| 23 | FB, | |
| 24 | /// Semismooth Newton | |
| 25 | SSN, | |
|
34
efa60bc4f743
Radon FB + sliding improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
29
diff
changeset
|
26 | /// PDPS |
|
efa60bc4f743
Radon FB + sliding improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
29
diff
changeset
|
27 | PDPS, |
|
63
7a8a55fd41c0
Subproblem solver and sliding adjustments/improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
39
diff
changeset
|
28 | /// Proximal point method |
|
7a8a55fd41c0
Subproblem solver and sliding adjustments/improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
39
diff
changeset
|
29 | PP, |
| 0 | 30 | } |
| 31 | ||
| 32 | /// Settings for the solution of finite-dimensional subproblems | |
| 33 | #[derive(Clone, Copy, Eq, PartialEq, Serialize, Deserialize, Debug)] | |
|
63
7a8a55fd41c0
Subproblem solver and sliding adjustments/improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
39
diff
changeset
|
34 | pub struct InnerSettings<F: Float> { |
| 0 | 35 | /// Method |
|
63
7a8a55fd41c0
Subproblem solver and sliding adjustments/improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
39
diff
changeset
|
36 | pub method: InnerMethod, |
|
34
efa60bc4f743
Radon FB + sliding improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
29
diff
changeset
|
37 | /// Proportional step length ∈ [0, 1) for `InnerMethod::FB`. |
|
63
7a8a55fd41c0
Subproblem solver and sliding adjustments/improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
39
diff
changeset
|
38 | pub fb_τ0: F, |
|
34
efa60bc4f743
Radon FB + sliding improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
29
diff
changeset
|
39 | /// Proportional primal and dual step lengths for `InnerMethod::PDPS`. |
|
63
7a8a55fd41c0
Subproblem solver and sliding adjustments/improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
39
diff
changeset
|
40 | pub pdps_τσ0: (F, F), |
|
7a8a55fd41c0
Subproblem solver and sliding adjustments/improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
39
diff
changeset
|
41 | /// Proximal point step length parameter and its growth |
|
7a8a55fd41c0
Subproblem solver and sliding adjustments/improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
39
diff
changeset
|
42 | pub pp_τ: (F, F), |
| 0 | 43 | /// Fraction of `tolerance` given to inner algorithm |
|
63
7a8a55fd41c0
Subproblem solver and sliding adjustments/improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
39
diff
changeset
|
44 | pub tolerance_mult: F, |
| 0 | 45 | /// Iterator options |
| 46 | #[serde(flatten)] | |
|
63
7a8a55fd41c0
Subproblem solver and sliding adjustments/improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
39
diff
changeset
|
47 | pub iterator_options: AlgIteratorOptions, |
| 0 | 48 | } |
| 49 | ||
| 50 | #[replace_float_literals(F::cast_from(literal))] | |
|
63
7a8a55fd41c0
Subproblem solver and sliding adjustments/improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
39
diff
changeset
|
51 | impl<F: Float> Default for InnerSettings<F> { |
| 0 | 52 | fn default() -> Self { |
| 53 | InnerSettings { | |
|
63
7a8a55fd41c0
Subproblem solver and sliding adjustments/improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
39
diff
changeset
|
54 | fb_τ0: 0.99, |
|
7a8a55fd41c0
Subproblem solver and sliding adjustments/improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
39
diff
changeset
|
55 | pdps_τσ0: (1.98, 0.5), |
|
7a8a55fd41c0
Subproblem solver and sliding adjustments/improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
39
diff
changeset
|
56 | pp_τ: (100.0, 100.0), |
|
7a8a55fd41c0
Subproblem solver and sliding adjustments/improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
39
diff
changeset
|
57 | iterator_options: AlgIteratorOptions { |
| 0 | 58 | // max_iter cannot be very small, as initially FB needs many iterations, although |
| 59 | // on later invocations even one or two tends to be enough | |
|
63
7a8a55fd41c0
Subproblem solver and sliding adjustments/improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
39
diff
changeset
|
60 | max_iter: 2000, |
| 0 | 61 | // verbose_iter affects testing of sufficient convergence, so we set it to |
| 62 | // a small value… | |
|
63
7a8a55fd41c0
Subproblem solver and sliding adjustments/improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
39
diff
changeset
|
63 | verbose_iter: Verbose::Every(1), |
| 0 | 64 | // … but don't print out anything |
|
63
7a8a55fd41c0
Subproblem solver and sliding adjustments/improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
39
diff
changeset
|
65 | quiet: true, |
|
7a8a55fd41c0
Subproblem solver and sliding adjustments/improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
39
diff
changeset
|
66 | ..Default::default() |
| 0 | 67 | }, |
|
63
7a8a55fd41c0
Subproblem solver and sliding adjustments/improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
39
diff
changeset
|
68 | method: InnerMethod::SSN, |
|
7a8a55fd41c0
Subproblem solver and sliding adjustments/improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
39
diff
changeset
|
69 | tolerance_mult: 0.01, |
| 0 | 70 | } |
| 71 | } | |
| 72 | } |