src/run.rs

changeset 25
79943be70720
parent 24
d29d1fcf5423
--- a/src/run.rs	Sun Dec 11 23:25:53 2022 +0200
+++ b/src/run.rs	Tue Mar 21 20:31:01 2023 +0200
@@ -57,9 +57,8 @@
 use crate::frank_wolfe::{
     FWConfig,
     FWVariant,
-    pointsource_fw,
-    prepare_optimise_weights,
-    optimise_weights,
+    pointsource_fw_reg,
+    WeightOptim,
 };
 use crate::subproblem::InnerSettings;
 use crate::seminorms::*;
@@ -436,7 +435,11 @@
             };
             // Create Logger and IteratorFactory
             let mut logger = Logger::new();
-            let findim_data = prepare_optimise_weights(&opA);
+            let reg : Box<dyn WeightOptim<_, _, _, N>> = match regularisation {
+                Regularisation::Radon(α) => Box::new(RadonRegTerm(α)),
+                Regularisation::NonnegRadon(α) => Box::new(NonnegRadonRegTerm(α)),
+            };
+            let findim_data = reg.prepare_optimise_weights(&opA, &b);
             let inner_config : InnerSettings<F> = Default::default();
             let inner_it = inner_config.iterator_options;
             let logmap = |iter, Timed { cpu_time, data }| {
@@ -450,12 +453,12 @@
                     this_iters,
                     ..
                 } = data;
-                let post_value = match (postprocessing, dataterm, regularisation) {
-                    (Some(mut μ), DataTerm::L2Squared, Regularisation::Radon(α)) => {
+                let post_value = match (postprocessing, dataterm) {
+                    (Some(mut μ), DataTerm::L2Squared) => {
                         // Comparison postprocessing is only implemented for the case handled
                         // by the FW variants.
-                        optimise_weights(
-                            &mut μ, &opA, &b, α, &findim_data, &inner_config,
+                        reg.optimise_weights(
+                            &mut μ, &opA, &b, &findim_data, &inner_config,
                             inner_it
                         );
                         dataterm.value_at_residual(opA.apply(&μ) - &b)
@@ -544,7 +547,13 @@
                     match (regularisation, dataterm) {
                         (Regularisation::Radon(α), DataTerm::L2Squared) => {
                             running();
-                            pointsource_fw(&opA, &b, α, algconfig, iterator, plotter)
+                            pointsource_fw_reg(&opA, &b, RadonRegTerm(α),
+                                               algconfig, iterator, plotter)
+                        },
+                        (Regularisation::NonnegRadon(α), DataTerm::L2Squared) => {
+                            running();
+                            pointsource_fw_reg(&opA, &b, NonnegRadonRegTerm(α),
+                                               algconfig, iterator, plotter)
                         },
                         _ => {
                             not_implemented();

mercurial