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 { |