src/experiments.rs

branch
dev
changeset 37
c5d8bd1a7728
parent 35
b087e3eab191
child 38
0f59c0d02e13
child 39
6316d68b58af
equal deleted inserted replaced
36:fb911f72e698 37:c5d8bd1a7728
22 RunnableExperiment, 22 RunnableExperiment,
23 ExperimentV2, 23 ExperimentV2,
24 ExperimentBiased, 24 ExperimentBiased,
25 Named, 25 Named,
26 DefaultAlgorithm, 26 DefaultAlgorithm,
27 AlgorithmConfig 27 AlgorithmConfig,
28 ProxTerm
28 }; 29 };
29 //use crate::fb::FBGenericConfig; 30 //use crate::fb::FBGenericConfig;
30 use crate::rand_distr::{SerializableNormal, SaltAndPepper}; 31 use crate::rand_distr::{SerializableNormal, SaltAndPepper};
31 use crate::regularisation::Regularisation; 32 use crate::regularisation::Regularisation;
32 use alg_tools::euclidean::Euclidean; 33 use alg_tools::euclidean::Euclidean;
151 τ0, 152 τ0,
152 σ0 : 0.99 / τ0, 153 σ0 : 0.99 / τ0,
153 .. Default::default() 154 .. Default::default()
154 } 155 }
155 }; 156 };
156 157 let defaults_2d = HashMap::from([
158 (DefaultAlgorithm::PDPS, AlgorithmConfig::PDPS(pdps_2d(), ProxTerm::Wave)),
159 (DefaultAlgorithm::RadonPDPS, AlgorithmConfig::PDPS(pdps_2d(), ProxTerm::RadonSquared))
160 ]);
161
157 // We add a hash of the experiment name to the configured 162 // We add a hash of the experiment name to the configured
158 // noise seed to not use the same noise for different experiments. 163 // noise seed to not use the same noise for different experiments.
159 let mut h = DefaultHasher::new(); 164 let mut h = DefaultHasher::new();
160 name.hash(&mut h); 165 name.hash(&mut h);
161 let noise_seed = cli.noise_seed.unwrap_or(BASE_SEED) + h.finish(); 166 let noise_seed = cli.noise_seed.unwrap_or(BASE_SEED) + h.finish();
210 sensor : BallIndicator { r : SensorWidth2D, exponent : Linfinity }, 215 sensor : BallIndicator { r : SensorWidth2D, exponent : Linfinity },
211 spread : Prod(spread_cutoff, base_spread), 216 spread : Prod(spread_cutoff, base_spread),
212 kernel : Prod(AutoConvolution(spread_cutoff), base_spread), 217 kernel : Prod(AutoConvolution(spread_cutoff), base_spread),
213 kernel_plot_width, 218 kernel_plot_width,
214 noise_seed, 219 noise_seed,
215 algorithm_defaults: HashMap::from([ 220 algorithm_defaults: defaults_2d,
216 (DefaultAlgorithm::PDPS, AlgorithmConfig::PDPS(pdps_2d()))
217 ]),
218 }}) 221 }})
219 }, 222 },
220 Experiment2DFast => { 223 Experiment2DFast => {
221 let base_spread = HatConv { radius : Hat1 }; 224 let base_spread = HatConv { radius : Hat1 };
222 Box::new(Named { name, data : ExperimentV2 { 225 Box::new(Named { name, data : ExperimentV2 {
229 sensor : BallIndicator { r : SensorWidth2D, exponent : Linfinity }, 232 sensor : BallIndicator { r : SensorWidth2D, exponent : Linfinity },
230 spread : base_spread, 233 spread : base_spread,
231 kernel : base_spread, 234 kernel : base_spread,
232 kernel_plot_width, 235 kernel_plot_width,
233 noise_seed, 236 noise_seed,
234 algorithm_defaults: HashMap::from([ 237 algorithm_defaults: defaults_2d,
235 (DefaultAlgorithm::PDPS, AlgorithmConfig::PDPS(pdps_2d()))
236 ]),
237 }}) 238 }})
238 }, 239 },
239 Experiment1D_L1 => { 240 Experiment1D_L1 => {
240 let base_spread = Gaussian { variance : Variance1 }; 241 let base_spread = Gaussian { variance : Variance1 };
241 let spread_cutoff = BallIndicator { r : CutOff1, exponent : Linfinity }; 242 let spread_cutoff = BallIndicator { r : CutOff1, exponent : Linfinity };
293 sensor : BallIndicator { r : SensorWidth2D, exponent : Linfinity }, 294 sensor : BallIndicator { r : SensorWidth2D, exponent : Linfinity },
294 spread : Prod(spread_cutoff, base_spread), 295 spread : Prod(spread_cutoff, base_spread),
295 kernel : Prod(AutoConvolution(spread_cutoff), base_spread), 296 kernel : Prod(AutoConvolution(spread_cutoff), base_spread),
296 kernel_plot_width, 297 kernel_plot_width,
297 noise_seed, 298 noise_seed,
298 algorithm_defaults: HashMap::from([ 299 algorithm_defaults: defaults_2d,
299 (DefaultAlgorithm::PDPS, AlgorithmConfig::PDPS(pdps_2d()))
300 ]),
301 }}) 300 }})
302 }, 301 },
303 Experiment2D_L1_Fast => { 302 Experiment2D_L1_Fast => {
304 let base_spread = HatConv { radius : Hat1 }; 303 let base_spread = HatConv { radius : Hat1 };
305 Box::new(Named { name, data : ExperimentV2 { 304 Box::new(Named { name, data : ExperimentV2 {
315 sensor : BallIndicator { r : SensorWidth2D, exponent : Linfinity }, 314 sensor : BallIndicator { r : SensorWidth2D, exponent : Linfinity },
316 spread : base_spread, 315 spread : base_spread,
317 kernel : base_spread, 316 kernel : base_spread,
318 kernel_plot_width, 317 kernel_plot_width,
319 noise_seed, 318 noise_seed,
320 algorithm_defaults: HashMap::from([ 319 algorithm_defaults: defaults_2d,
321 (DefaultAlgorithm::PDPS, AlgorithmConfig::PDPS(pdps_2d()))
322 ]),
323 }}) 320 }})
324 }, 321 },
325 Experiment1D_TV_Fast => { 322 Experiment1D_TV_Fast => {
326 let base_spread = HatConv { radius : HatBias }; 323 let base_spread = HatConv { radius : HatBias };
327 Box::new(Named { name, data : ExperimentBiased { 324 Box::new(Named { name, data : ExperimentBiased {

mercurial