Thu, 23 Jan 2025 23:34:05 +0100
Merging adjustments, parameter tuning, etc.
0 | 1 | /*! |
2 | Experimental setups. | |
3 | */ | |
4 | ||
5 | //use numeric_literals::replace_float_literals; | |
6 | use serde::{Serialize, Deserialize}; | |
7 | use clap::ValueEnum; | |
8 | use std::collections::HashMap; | |
9 | use std::hash::{Hash, Hasher}; | |
10 | use std::collections::hash_map::DefaultHasher; | |
11 | ||
12 | use alg_tools::bisection_tree::*; | |
13 | use alg_tools::error::DynResult; | |
14 | use alg_tools::norms::Linfinity; | |
15 | ||
39
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
16 | use crate::{ExperimentOverrides, AlgorithmOverrides}; |
0 | 17 | use crate::kernels::*; |
34
efa60bc4f743
Radon FB + sliding improvements
Tuomo Valkonen <tuomov@iki.fi>
parents:
25
diff
changeset
|
18 | use crate::kernels::SupportProductFirst as Prod; |
0 | 19 | use crate::types::*; |
20 | use crate::run::{ | |
21 | RunnableExperiment, | |
24
d29d1fcf5423
Support arbitrary regularisation terms; implement non-positivity-constrained regularisation.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
22 | ExperimentV2, |
35 | 23 | ExperimentBiased, |
0 | 24 | Named, |
25 | DefaultAlgorithm, | |
26 | }; | |
27 | //use crate::fb::FBGenericConfig; | |
28 | use crate::rand_distr::{SerializableNormal, SaltAndPepper}; | |
24
d29d1fcf5423
Support arbitrary regularisation terms; implement non-positivity-constrained regularisation.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
29 | use crate::regularisation::Regularisation; |
35 | 30 | use alg_tools::euclidean::Euclidean; |
31 | use alg_tools::instance::Instance; | |
32 | use alg_tools::mapping::Mapping; | |
33 | use alg_tools::operator_arithmetic::{MappingSum, Weighted}; | |
0 | 34 | |
35 | /// Experiments shorthands, to be used with the command line parser | |
36 | ||
37 | #[derive(ValueEnum, Debug, Copy, Clone, Eq, PartialEq, Hash, Serialize, Deserialize)] | |
38 | #[allow(non_camel_case_types)] | |
39 | pub enum DefaultExperiment { | |
40 | /// One dimension, cut gaussian spread, 2-norm-squared data fidelity | |
41 | #[clap(name = "1d")] | |
42 | Experiment1D, | |
43 | /// One dimension, “fast” spread, 2-norm-squared data fidelity | |
44 | #[clap(name = "1d_fast")] | |
45 | Experiment1DFast, | |
46 | /// Two dimensions, cut gaussian spread, 2-norm-squared data fidelity | |
47 | #[clap(name = "2d")] | |
48 | Experiment2D, | |
49 | /// Two dimensions, “fast” spread, 2-norm-squared data fidelity | |
50 | #[clap(name = "2d_fast")] | |
51 | Experiment2DFast, | |
52 | /// One dimension, cut gaussian spread, 1-norm data fidelity | |
53 | #[clap(name = "1d_l1")] | |
54 | Experiment1D_L1, | |
55 | /// One dimension, ‘“fast” spread, 1-norm data fidelity | |
56 | #[clap(name = "1d_l1_fast")] | |
57 | Experiment1D_L1_Fast, | |
58 | /// Two dimensions, cut gaussian spread, 1-norm data fidelity | |
59 | #[clap(name = "2d_l1")] | |
60 | Experiment2D_L1, | |
61 | /// Two dimensions, “fast” spread, 1-norm data fidelity | |
62 | #[clap(name = "2d_l1_fast")] | |
63 | Experiment2D_L1_Fast, | |
39
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
64 | /// One dimension, “fast” spread, 2-norm-squared data fidelity with extra TV-regularised bias |
35 | 65 | #[clap(name = "1d_tv_fast")] |
66 | Experiment1D_TV_Fast, | |
39
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
67 | /// Two dimensions, “fast” spread, 2-norm-squared data fidelity with extra TV-regularised bias |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
68 | #[clap(name = "2d_tv_fast")] |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
69 | Experiment2D_TV_Fast, |
0 | 70 | } |
71 | ||
72 | macro_rules! make_float_constant { | |
73 | ($name:ident = $value:expr) => { | |
74 | #[derive(Debug, Copy, Eq, PartialEq, Clone, Serialize, Deserialize)] | |
75 | #[serde(into = "float")] | |
76 | struct $name; | |
77 | impl Into<float> for $name { | |
78 | #[inline] | |
79 | fn into(self) -> float { $value } | |
80 | } | |
81 | impl Constant for $name { | |
82 | type Type = float; | |
83 | fn value(&self) -> float { $value } | |
84 | } | |
85 | } | |
86 | } | |
87 | ||
88 | /// Ground-truth measure spike locations and magnitudes for 1D experiments | |
89 | static MU_TRUE_1D_BASIC : [(float, float); 4] = [ | |
90 | (0.10, 10.0), | |
91 | (0.30, 2.0), | |
92 | (0.70, 3.0), | |
93 | (0.80, 5.0) | |
94 | ]; | |
95 | ||
96 | /// Ground-truth measure spike locations and magnitudes for 2D experiments | |
97 | static MU_TRUE_2D_BASIC : [([float; 2], float); 4] = [ | |
98 | ([0.15, 0.15], 10.0), | |
99 | ([0.75, 0.45], 2.0), | |
100 | ([0.80, 0.50], 4.0), | |
101 | ([0.30, 0.70], 5.0) | |
102 | ]; | |
103 | ||
35 | 104 | /// The $\{0,1\}$-valued characteristic function of a ball as a [`Mapping`]. |
105 | #[derive(Debug,Copy,Clone,Serialize,PartialEq)] | |
106 | struct BallCharacteristic<F : Float, const N : usize> { | |
107 | pub center : Loc<F, N>, | |
108 | pub radius : F, | |
109 | } | |
110 | ||
111 | impl<F : Float, const N : usize> Mapping<Loc<F, N>> for BallCharacteristic<F, N> { | |
112 | type Codomain =F; | |
113 | ||
114 | fn apply<I : Instance<Loc<F, N>>>(&self, i : I) -> F { | |
115 | if self.center.dist2(i) <= self.radius { | |
116 | F::ONE | |
117 | } else { | |
118 | F::ZERO | |
119 | } | |
120 | } | |
121 | } | |
122 | ||
0 | 123 | //#[replace_float_literals(F::cast_from(literal))] |
124 | impl DefaultExperiment { | |
125 | /// Convert the experiment shorthand into a runnable experiment configuration. | |
126 | pub fn get_experiment(&self, cli : &ExperimentOverrides<float>) -> DynResult<Box<dyn RunnableExperiment<float>>> { | |
127 | let name = "pointsource".to_string() | |
128 | + self.to_possible_value().unwrap().get_name(); | |
129 | ||
130 | let kernel_plot_width = 0.2; | |
131 | ||
132 | const BASE_SEED : u64 = 915373234; | |
133 | ||
134 | const N_SENSORS_1D : usize = 100; | |
135 | make_float_constant!(SensorWidth1D = 0.4/(N_SENSORS_1D as float)); | |
136 | ||
137 | const N_SENSORS_2D : usize = 16; | |
138 | make_float_constant!(SensorWidth2D = 0.4/(N_SENSORS_2D as float)); | |
139 | ||
140 | const N_SENSORS_2D_MORE : usize = 32; | |
141 | make_float_constant!(SensorWidth2DMore = 0.4/(N_SENSORS_2D_MORE as float)); | |
142 | ||
143 | make_float_constant!(Variance1 = 0.05.powi(2)); | |
144 | make_float_constant!(CutOff1 = 0.15); | |
145 | make_float_constant!(Hat1 = 0.16); | |
35 | 146 | make_float_constant!(HatBias = 0.05); |
0 | 147 | |
148 | // We use a different step length for PDPS in 2D experiments | |
39
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
149 | // let pdps_2d = (DefaultAlgorithm::PDPS, |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
150 | // AlgorithmOverrides { |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
151 | // tau0 : Some(3.0), |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
152 | // sigma0 : Some(0.99 / 3.0), |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
153 | // .. Default::default() |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
154 | // } |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
155 | // ); |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
156 | // let radon_pdps_2d = (DefaultAlgorithm::RadonPDPS, |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
157 | // AlgorithmOverrides { |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
158 | // tau0 : Some(3.0), |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
159 | // sigma0 : Some(0.99 / 3.0), |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
160 | // .. Default::default() |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
161 | // } |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
162 | // ); |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
163 | let sliding_fb_cut_gaussian = (DefaultAlgorithm::SlidingFB, |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
164 | AlgorithmOverrides { |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
165 | theta0 : Some(0.3), |
0 | 166 | .. Default::default() |
167 | } | |
39
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
168 | ); |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
169 | // let higher_cpos = |alg| (alg, |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
170 | // AlgorithmOverrides { |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
171 | // transport_tolerance_pos : Some(1000.0), |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
172 | // .. Default::default() |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
173 | // } |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
174 | // ); |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
175 | let higher_cpos_merging = |alg| (alg, |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
176 | AlgorithmOverrides { |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
177 | transport_tolerance_pos : Some(1000.0), |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
178 | merge : Some(true), |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
179 | fitness_merging : Some(true), |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
180 | .. Default::default() |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
181 | } |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
182 | ); |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
183 | let much_higher_cpos_merging_steptune = |alg| (alg, |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
184 | AlgorithmOverrides { |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
185 | transport_tolerance_pri : Some(1000.0), |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
186 | transport_tolerance_pos : Some(10000.0), |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
187 | sigma0 : Some(0.15), |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
188 | theta0 : Some(0.3), |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
189 | merge : Some(true), |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
190 | fitness_merging : Some(true), |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
191 | .. Default::default() |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
192 | } |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
193 | ); |
0 | 194 | // We add a hash of the experiment name to the configured |
195 | // noise seed to not use the same noise for different experiments. | |
196 | let mut h = DefaultHasher::new(); | |
197 | name.hash(&mut h); | |
198 | let noise_seed = cli.noise_seed.unwrap_or(BASE_SEED) + h.finish(); | |
199 | ||
39
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
200 | let default_merge_radius = 0.01; |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
201 | |
0 | 202 | use DefaultExperiment::*; |
203 | Ok(match self { | |
204 | Experiment1D => { | |
205 | let base_spread = Gaussian { variance : Variance1 }; | |
206 | let spread_cutoff = BallIndicator { r : CutOff1, exponent : Linfinity }; | |
24
d29d1fcf5423
Support arbitrary regularisation terms; implement non-positivity-constrained regularisation.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
207 | Box::new(Named { name, data : ExperimentV2 { |
0 | 208 | domain : [[0.0, 1.0]].into(), |
209 | sensor_count : [N_SENSORS_1D], | |
39
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
210 | regularisation : Regularisation::NonnegRadon(cli.alpha.unwrap_or(0.08)), |
0 | 211 | noise_distr : SerializableNormal::new(0.0, cli.variance.unwrap_or(0.2))?, |
212 | dataterm : DataTerm::L2Squared, | |
213 | μ_hat : MU_TRUE_1D_BASIC.into(), | |
214 | sensor : BallIndicator { r : SensorWidth1D, exponent : Linfinity }, | |
215 | spread : Prod(spread_cutoff, base_spread), | |
216 | kernel : Prod(AutoConvolution(spread_cutoff), base_spread), | |
217 | kernel_plot_width, | |
218 | noise_seed, | |
39
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
219 | default_merge_radius, |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
220 | algorithm_overrides: HashMap::from([ |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
221 | sliding_fb_cut_gaussian, |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
222 | higher_cpos_merging(DefaultAlgorithm::RadonFB), |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
223 | higher_cpos_merging(DefaultAlgorithm::RadonSlidingFB), |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
224 | ]), |
0 | 225 | }}) |
226 | }, | |
227 | Experiment1DFast => { | |
228 | let base_spread = HatConv { radius : Hat1 }; | |
24
d29d1fcf5423
Support arbitrary regularisation terms; implement non-positivity-constrained regularisation.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
229 | Box::new(Named { name, data : ExperimentV2 { |
0 | 230 | domain : [[0.0, 1.0]].into(), |
231 | sensor_count : [N_SENSORS_1D], | |
25
79943be70720
Implement non-negativity constraints for the conditional gradient methods
Tuomo Valkonen <tuomov@iki.fi>
parents:
24
diff
changeset
|
232 | regularisation : Regularisation::NonnegRadon(cli.alpha.unwrap_or(0.06)), |
0 | 233 | noise_distr : SerializableNormal::new(0.0, cli.variance.unwrap_or(0.2))?, |
234 | dataterm : DataTerm::L2Squared, | |
235 | μ_hat : MU_TRUE_1D_BASIC.into(), | |
236 | sensor : BallIndicator { r : SensorWidth1D, exponent : Linfinity }, | |
237 | spread : base_spread, | |
238 | kernel : base_spread, | |
239 | kernel_plot_width, | |
240 | noise_seed, | |
39
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
241 | default_merge_radius, |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
242 | algorithm_overrides: HashMap::from([ |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
243 | higher_cpos_merging(DefaultAlgorithm::RadonFB), |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
244 | higher_cpos_merging(DefaultAlgorithm::RadonSlidingFB), |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
245 | ]), |
0 | 246 | }}) |
247 | }, | |
248 | Experiment2D => { | |
249 | let base_spread = Gaussian { variance : Variance1 }; | |
250 | let spread_cutoff = BallIndicator { r : CutOff1, exponent : Linfinity }; | |
24
d29d1fcf5423
Support arbitrary regularisation terms; implement non-positivity-constrained regularisation.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
251 | Box::new(Named { name, data : ExperimentV2 { |
0 | 252 | domain : [[0.0, 1.0]; 2].into(), |
253 | sensor_count : [N_SENSORS_2D; 2], | |
25
79943be70720
Implement non-negativity constraints for the conditional gradient methods
Tuomo Valkonen <tuomov@iki.fi>
parents:
24
diff
changeset
|
254 | regularisation : Regularisation::NonnegRadon(cli.alpha.unwrap_or(0.19)), |
0 | 255 | noise_distr : SerializableNormal::new(0.0, cli.variance.unwrap_or(0.25))?, |
256 | dataterm : DataTerm::L2Squared, | |
257 | μ_hat : MU_TRUE_2D_BASIC.into(), | |
258 | sensor : BallIndicator { r : SensorWidth2D, exponent : Linfinity }, | |
259 | spread : Prod(spread_cutoff, base_spread), | |
260 | kernel : Prod(AutoConvolution(spread_cutoff), base_spread), | |
261 | kernel_plot_width, | |
262 | noise_seed, | |
39
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
263 | default_merge_radius, |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
264 | algorithm_overrides: HashMap::from([ |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
265 | sliding_fb_cut_gaussian, |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
266 | higher_cpos_merging(DefaultAlgorithm::RadonFB), |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
267 | higher_cpos_merging(DefaultAlgorithm::RadonSlidingFB), |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
268 | // pdps_2d, |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
269 | // radon_pdps_2d |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
270 | ]), |
0 | 271 | }}) |
272 | }, | |
273 | Experiment2DFast => { | |
274 | let base_spread = HatConv { radius : Hat1 }; | |
24
d29d1fcf5423
Support arbitrary regularisation terms; implement non-positivity-constrained regularisation.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
275 | Box::new(Named { name, data : ExperimentV2 { |
0 | 276 | domain : [[0.0, 1.0]; 2].into(), |
277 | sensor_count : [N_SENSORS_2D; 2], | |
25
79943be70720
Implement non-negativity constraints for the conditional gradient methods
Tuomo Valkonen <tuomov@iki.fi>
parents:
24
diff
changeset
|
278 | regularisation : Regularisation::NonnegRadon(cli.alpha.unwrap_or(0.12)), |
0 | 279 | noise_distr : SerializableNormal::new(0.0, cli.variance.unwrap_or(0.15))?, //0.25 |
280 | dataterm : DataTerm::L2Squared, | |
281 | μ_hat : MU_TRUE_2D_BASIC.into(), | |
282 | sensor : BallIndicator { r : SensorWidth2D, exponent : Linfinity }, | |
283 | spread : base_spread, | |
284 | kernel : base_spread, | |
285 | kernel_plot_width, | |
286 | noise_seed, | |
39
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
287 | default_merge_radius, |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
288 | algorithm_overrides: HashMap::from([ |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
289 | // pdps_2d, |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
290 | // radon_pdps_2d |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
291 | higher_cpos_merging(DefaultAlgorithm::RadonFB), |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
292 | higher_cpos_merging(DefaultAlgorithm::RadonSlidingFB), |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
293 | ]), |
0 | 294 | }}) |
295 | }, | |
296 | Experiment1D_L1 => { | |
297 | let base_spread = Gaussian { variance : Variance1 }; | |
298 | let spread_cutoff = BallIndicator { r : CutOff1, exponent : Linfinity }; | |
24
d29d1fcf5423
Support arbitrary regularisation terms; implement non-positivity-constrained regularisation.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
299 | Box::new(Named { name, data : ExperimentV2 { |
0 | 300 | domain : [[0.0, 1.0]].into(), |
301 | sensor_count : [N_SENSORS_1D], | |
24
d29d1fcf5423
Support arbitrary regularisation terms; implement non-positivity-constrained regularisation.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
302 | regularisation : Regularisation::NonnegRadon(cli.alpha.unwrap_or(0.1)), |
0 | 303 | noise_distr : SaltAndPepper::new( |
304 | cli.salt_and_pepper.as_ref().map_or(0.6, |v| v[0]), | |
305 | cli.salt_and_pepper.as_ref().map_or(0.4, |v| v[1]) | |
306 | )?, | |
307 | dataterm : DataTerm::L1, | |
308 | μ_hat : MU_TRUE_1D_BASIC.into(), | |
309 | sensor : BallIndicator { r : SensorWidth1D, exponent : Linfinity }, | |
310 | spread : Prod(spread_cutoff, base_spread), | |
311 | kernel : Prod(AutoConvolution(spread_cutoff), base_spread), | |
312 | kernel_plot_width, | |
313 | noise_seed, | |
39
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
314 | default_merge_radius, |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
315 | algorithm_overrides: HashMap::new(), |
0 | 316 | }}) |
317 | }, | |
318 | Experiment1D_L1_Fast => { | |
319 | let base_spread = HatConv { radius : Hat1 }; | |
24
d29d1fcf5423
Support arbitrary regularisation terms; implement non-positivity-constrained regularisation.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
320 | Box::new(Named { name, data : ExperimentV2 { |
0 | 321 | domain : [[0.0, 1.0]].into(), |
322 | sensor_count : [N_SENSORS_1D], | |
24
d29d1fcf5423
Support arbitrary regularisation terms; implement non-positivity-constrained regularisation.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
323 | regularisation : Regularisation::NonnegRadon(cli.alpha.unwrap_or(0.12)), |
0 | 324 | noise_distr : SaltAndPepper::new( |
325 | cli.salt_and_pepper.as_ref().map_or(0.6, |v| v[0]), | |
326 | cli.salt_and_pepper.as_ref().map_or(0.4, |v| v[1]) | |
327 | )?, | |
328 | dataterm : DataTerm::L1, | |
329 | μ_hat : MU_TRUE_1D_BASIC.into(), | |
330 | sensor : BallIndicator { r : SensorWidth1D, exponent : Linfinity }, | |
331 | spread : base_spread, | |
332 | kernel : base_spread, | |
333 | kernel_plot_width, | |
334 | noise_seed, | |
39
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
335 | default_merge_radius, |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
336 | algorithm_overrides: HashMap::new(), |
0 | 337 | }}) |
338 | }, | |
339 | Experiment2D_L1 => { | |
340 | let base_spread = Gaussian { variance : Variance1 }; | |
341 | let spread_cutoff = BallIndicator { r : CutOff1, exponent : Linfinity }; | |
24
d29d1fcf5423
Support arbitrary regularisation terms; implement non-positivity-constrained regularisation.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
342 | Box::new(Named { name, data : ExperimentV2 { |
0 | 343 | domain : [[0.0, 1.0]; 2].into(), |
344 | sensor_count : [N_SENSORS_2D; 2], | |
24
d29d1fcf5423
Support arbitrary regularisation terms; implement non-positivity-constrained regularisation.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
345 | regularisation : Regularisation::NonnegRadon(cli.alpha.unwrap_or(0.35)), |
0 | 346 | noise_distr : SaltAndPepper::new( |
347 | cli.salt_and_pepper.as_ref().map_or(0.8, |v| v[0]), | |
348 | cli.salt_and_pepper.as_ref().map_or(0.2, |v| v[1]) | |
349 | )?, | |
350 | dataterm : DataTerm::L1, | |
351 | μ_hat : MU_TRUE_2D_BASIC.into(), | |
352 | sensor : BallIndicator { r : SensorWidth2D, exponent : Linfinity }, | |
353 | spread : Prod(spread_cutoff, base_spread), | |
354 | kernel : Prod(AutoConvolution(spread_cutoff), base_spread), | |
355 | kernel_plot_width, | |
356 | noise_seed, | |
39
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
357 | default_merge_radius, |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
358 | algorithm_overrides: HashMap::from([ |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
359 | // pdps_2d, |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
360 | // radon_pdps_2d |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
361 | ]), |
0 | 362 | }}) |
363 | }, | |
364 | Experiment2D_L1_Fast => { | |
365 | let base_spread = HatConv { radius : Hat1 }; | |
24
d29d1fcf5423
Support arbitrary regularisation terms; implement non-positivity-constrained regularisation.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
366 | Box::new(Named { name, data : ExperimentV2 { |
0 | 367 | domain : [[0.0, 1.0]; 2].into(), |
368 | sensor_count : [N_SENSORS_2D; 2], | |
24
d29d1fcf5423
Support arbitrary regularisation terms; implement non-positivity-constrained regularisation.
Tuomo Valkonen <tuomov@iki.fi>
parents:
0
diff
changeset
|
369 | regularisation : Regularisation::NonnegRadon(cli.alpha.unwrap_or(0.40)), |
0 | 370 | noise_distr : SaltAndPepper::new( |
371 | cli.salt_and_pepper.as_ref().map_or(0.8, |v| v[0]), | |
372 | cli.salt_and_pepper.as_ref().map_or(0.2, |v| v[1]) | |
373 | )?, | |
374 | dataterm : DataTerm::L1, | |
375 | μ_hat : MU_TRUE_2D_BASIC.into(), | |
376 | sensor : BallIndicator { r : SensorWidth2D, exponent : Linfinity }, | |
377 | spread : base_spread, | |
378 | kernel : base_spread, | |
379 | kernel_plot_width, | |
380 | noise_seed, | |
39
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
381 | default_merge_radius, |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
382 | algorithm_overrides: HashMap::from([ |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
383 | // pdps_2d, |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
384 | // radon_pdps_2d |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
385 | ]), |
0 | 386 | }}) |
387 | }, | |
35 | 388 | Experiment1D_TV_Fast => { |
389 | let base_spread = HatConv { radius : HatBias }; | |
390 | Box::new(Named { name, data : ExperimentBiased { | |
391 | λ : 0.02, | |
392 | bias : MappingSum::new([ | |
393 | Weighted::new(1.0, BallCharacteristic{ center : 0.3.into(), radius : 0.2 }), | |
394 | Weighted::new(0.5, BallCharacteristic{ center : 0.6.into(), radius : 0.3 }), | |
395 | ]), | |
396 | base : ExperimentV2 { | |
397 | domain : [[0.0, 1.0]].into(), | |
398 | sensor_count : [N_SENSORS_1D], | |
399 | regularisation : Regularisation::NonnegRadon(cli.alpha.unwrap_or(0.2)), | |
400 | noise_distr : SerializableNormal::new(0.0, cli.variance.unwrap_or(0.1))?, | |
401 | dataterm : DataTerm::L2Squared, | |
402 | μ_hat : MU_TRUE_1D_BASIC.into(), | |
403 | sensor : BallIndicator { r : SensorWidth1D, exponent : Linfinity }, | |
404 | spread : base_spread, | |
405 | kernel : base_spread, | |
406 | kernel_plot_width, | |
407 | noise_seed, | |
39
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
408 | default_merge_radius, |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
409 | algorithm_overrides: HashMap::from([ |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
410 | higher_cpos_merging(DefaultAlgorithm::RadonForwardPDPS), |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
411 | higher_cpos_merging(DefaultAlgorithm::RadonSlidingPDPS), |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
412 | ]), |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
413 | }, |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
414 | }}) |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
415 | }, |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
416 | Experiment2D_TV_Fast => { |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
417 | let base_spread = HatConv { radius : Hat1 }; |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
418 | Box::new(Named { name, data : ExperimentBiased { |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
419 | λ : 0.005, |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
420 | bias : MappingSum::new([ |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
421 | Weighted::new(1.0, BallCharacteristic{ center : [0.3, 0.3].into(), radius : 0.2 }), |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
422 | Weighted::new(0.5, BallCharacteristic{ center : [0.6, 0.6].into(), radius : 0.3 }), |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
423 | ]), |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
424 | base : ExperimentV2 { |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
425 | domain : [[0.0, 1.0]; 2].into(), |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
426 | sensor_count : [N_SENSORS_2D; 2], |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
427 | regularisation : Regularisation::NonnegRadon(cli.alpha.unwrap_or(0.06)), |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
428 | noise_distr : SerializableNormal::new(0.0, cli.variance.unwrap_or(0.15))?, //0.25 |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
429 | dataterm : DataTerm::L2Squared, |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
430 | μ_hat : MU_TRUE_2D_BASIC.into(), |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
431 | sensor : BallIndicator { r : SensorWidth2D, exponent : Linfinity }, |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
432 | spread : base_spread, |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
433 | kernel : base_spread, |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
434 | kernel_plot_width, |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
435 | noise_seed, |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
436 | default_merge_radius, |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
437 | algorithm_overrides: HashMap::from([ |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
438 | much_higher_cpos_merging_steptune(DefaultAlgorithm::RadonForwardPDPS), |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
439 | much_higher_cpos_merging_steptune(DefaultAlgorithm::RadonSlidingPDPS), |
6316d68b58af
Merging adjustments, parameter tuning, etc.
Tuomo Valkonen <tuomov@iki.fi>
parents:
37
diff
changeset
|
440 | ]), |
35 | 441 | }, |
442 | }}) | |
443 | }, | |
0 | 444 | }) |
445 | } | |
446 | } | |
447 |