src/experiments.rs

changeset 24
d29d1fcf5423
parent 0
eb3c7813b67a
child 25
79943be70720
--- 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])

mercurial