--- a/src/experiments.rs Sun Dec 11 23:19:17 2022 +0200 +++ b/src/experiments.rs Sun Dec 11 23:25:53 2022 +0200 @@ -20,13 +20,14 @@ use crate::types::*; use crate::run::{ RunnableExperiment, - Experiment, + ExperimentV2, Named, DefaultAlgorithm, AlgorithmConfig }; //use crate::fb::FBGenericConfig; use crate::rand_distr::{SerializableNormal, SaltAndPepper}; +use crate::regularisation::Regularisation; /// Experiments shorthands, to be used with the command line parser @@ -136,10 +137,10 @@ Experiment1D => { let base_spread = Gaussian { variance : Variance1 }; let spread_cutoff = BallIndicator { r : CutOff1, exponent : Linfinity }; - Box::new(Named { name, data : Experiment { + Box::new(Named { name, data : ExperimentV2 { domain : [[0.0, 1.0]].into(), sensor_count : [N_SENSORS_1D], - α : cli.alpha.unwrap_or(0.09), + regularisation : Regularisation::Radon(cli.alpha.unwrap_or(0.09)), noise_distr : SerializableNormal::new(0.0, cli.variance.unwrap_or(0.2))?, dataterm : DataTerm::L2Squared, μ_hat : MU_TRUE_1D_BASIC.into(), @@ -153,10 +154,10 @@ }, Experiment1DFast => { let base_spread = HatConv { radius : Hat1 }; - Box::new(Named { name, data : Experiment { + Box::new(Named { name, data : ExperimentV2 { domain : [[0.0, 1.0]].into(), sensor_count : [N_SENSORS_1D], - α : cli.alpha.unwrap_or(0.06), + regularisation : Regularisation::Radon(cli.alpha.unwrap_or(0.06)), noise_distr : SerializableNormal::new(0.0, cli.variance.unwrap_or(0.2))?, dataterm : DataTerm::L2Squared, μ_hat : MU_TRUE_1D_BASIC.into(), @@ -171,10 +172,10 @@ Experiment2D => { let base_spread = Gaussian { variance : Variance1 }; let spread_cutoff = BallIndicator { r : CutOff1, exponent : Linfinity }; - Box::new(Named { name, data : Experiment { + Box::new(Named { name, data : ExperimentV2 { domain : [[0.0, 1.0]; 2].into(), sensor_count : [N_SENSORS_2D; 2], - α : cli.alpha.unwrap_or(0.19), // 0.18, //0.17, //0.16, + regularisation : Regularisation::Radon(cli.alpha.unwrap_or(0.19)), noise_distr : SerializableNormal::new(0.0, cli.variance.unwrap_or(0.25))?, dataterm : DataTerm::L2Squared, μ_hat : MU_TRUE_2D_BASIC.into(), @@ -190,10 +191,10 @@ }, Experiment2DFast => { let base_spread = HatConv { radius : Hat1 }; - Box::new(Named { name, data : Experiment { + Box::new(Named { name, data : ExperimentV2 { domain : [[0.0, 1.0]; 2].into(), sensor_count : [N_SENSORS_2D; 2], - α : cli.alpha.unwrap_or(0.12), //0.10, //0.14, + regularisation : Regularisation::Radon(cli.alpha.unwrap_or(0.12)), noise_distr : SerializableNormal::new(0.0, cli.variance.unwrap_or(0.15))?, //0.25 dataterm : DataTerm::L2Squared, μ_hat : MU_TRUE_2D_BASIC.into(), @@ -210,10 +211,10 @@ Experiment1D_L1 => { let base_spread = Gaussian { variance : Variance1 }; let spread_cutoff = BallIndicator { r : CutOff1, exponent : Linfinity }; - Box::new(Named { name, data : Experiment { + Box::new(Named { name, data : ExperimentV2 { domain : [[0.0, 1.0]].into(), sensor_count : [N_SENSORS_1D], - α : cli.alpha.unwrap_or(0.1), + regularisation : Regularisation::NonnegRadon(cli.alpha.unwrap_or(0.1)), noise_distr : SaltAndPepper::new( cli.salt_and_pepper.as_ref().map_or(0.6, |v| v[0]), cli.salt_and_pepper.as_ref().map_or(0.4, |v| v[1]) @@ -230,10 +231,10 @@ }, Experiment1D_L1_Fast => { let base_spread = HatConv { radius : Hat1 }; - Box::new(Named { name, data : Experiment { + Box::new(Named { name, data : ExperimentV2 { domain : [[0.0, 1.0]].into(), sensor_count : [N_SENSORS_1D], - α : cli.alpha.unwrap_or(0.12), + regularisation : Regularisation::NonnegRadon(cli.alpha.unwrap_or(0.12)), noise_distr : SaltAndPepper::new( cli.salt_and_pepper.as_ref().map_or(0.6, |v| v[0]), cli.salt_and_pepper.as_ref().map_or(0.4, |v| v[1]) @@ -251,10 +252,10 @@ Experiment2D_L1 => { let base_spread = Gaussian { variance : Variance1 }; let spread_cutoff = BallIndicator { r : CutOff1, exponent : Linfinity }; - Box::new(Named { name, data : Experiment { + Box::new(Named { name, data : ExperimentV2 { domain : [[0.0, 1.0]; 2].into(), sensor_count : [N_SENSORS_2D; 2], - α : cli.alpha.unwrap_or(0.35), + regularisation : Regularisation::NonnegRadon(cli.alpha.unwrap_or(0.35)), noise_distr : SaltAndPepper::new( cli.salt_and_pepper.as_ref().map_or(0.8, |v| v[0]), cli.salt_and_pepper.as_ref().map_or(0.2, |v| v[1]) @@ -273,10 +274,10 @@ }, Experiment2D_L1_Fast => { let base_spread = HatConv { radius : Hat1 }; - Box::new(Named { name, data : Experiment { + Box::new(Named { name, data : ExperimentV2 { domain : [[0.0, 1.0]; 2].into(), sensor_count : [N_SENSORS_2D; 2], - α : cli.alpha.unwrap_or(0.40), + regularisation : Regularisation::NonnegRadon(cli.alpha.unwrap_or(0.40)), noise_distr : SaltAndPepper::new( cli.salt_and_pepper.as_ref().map_or(0.8, |v| v[0]), cli.salt_and_pepper.as_ref().map_or(0.2, |v| v[1])