src/run.rs

changeset 25
79943be70720
parent 24
d29d1fcf5423
equal deleted inserted replaced
24:d29d1fcf5423 25:79943be70720
55 pointsource_pdps_reg, 55 pointsource_pdps_reg,
56 }; 56 };
57 use crate::frank_wolfe::{ 57 use crate::frank_wolfe::{
58 FWConfig, 58 FWConfig,
59 FWVariant, 59 FWVariant,
60 pointsource_fw, 60 pointsource_fw_reg,
61 prepare_optimise_weights, 61 WeightOptim,
62 optimise_weights,
63 }; 62 };
64 use crate::subproblem::InnerSettings; 63 use crate::subproblem::InnerSettings;
65 use crate::seminorms::*; 64 use crate::seminorms::*;
66 use crate::plot::*; 65 use crate::plot::*;
67 use crate::{AlgorithmOverrides, CommandLineArgs}; 66 use crate::{AlgorithmOverrides, CommandLineArgs};
434 Skipping.").red(); 433 Skipping.").red();
435 eprintln!("{}", msg); 434 eprintln!("{}", msg);
436 }; 435 };
437 // Create Logger and IteratorFactory 436 // Create Logger and IteratorFactory
438 let mut logger = Logger::new(); 437 let mut logger = Logger::new();
439 let findim_data = prepare_optimise_weights(&opA); 438 let reg : Box<dyn WeightOptim<_, _, _, N>> = match regularisation {
439 Regularisation::Radon(α) => Box::new(RadonRegTerm(α)),
440 Regularisation::NonnegRadon(α) => Box::new(NonnegRadonRegTerm(α)),
441 };
442 let findim_data = reg.prepare_optimise_weights(&opA, &b);
440 let inner_config : InnerSettings<F> = Default::default(); 443 let inner_config : InnerSettings<F> = Default::default();
441 let inner_it = inner_config.iterator_options; 444 let inner_it = inner_config.iterator_options;
442 let logmap = |iter, Timed { cpu_time, data }| { 445 let logmap = |iter, Timed { cpu_time, data }| {
443 let IterInfo { 446 let IterInfo {
444 value, 447 value,
448 pruned, 451 pruned,
449 postprocessing, 452 postprocessing,
450 this_iters, 453 this_iters,
451 .. 454 ..
452 } = data; 455 } = data;
453 let post_value = match (postprocessing, dataterm, regularisation) { 456 let post_value = match (postprocessing, dataterm) {
454 (Some(mut μ), DataTerm::L2Squared, Regularisation::Radon(α)) => { 457 (Some(mut μ), DataTerm::L2Squared) => {
455 // Comparison postprocessing is only implemented for the case handled 458 // Comparison postprocessing is only implemented for the case handled
456 // by the FW variants. 459 // by the FW variants.
457 optimise_weights( 460 reg.optimise_weights(
458 &mut μ, &opA, &b, α, &findim_data, &inner_config, 461 &mut μ, &opA, &b, &findim_data, &inner_config,
459 inner_it 462 inner_it
460 ); 463 );
461 dataterm.value_at_residual(opA.apply(&μ) - &b) 464 dataterm.value_at_residual(opA.apply(&μ) - &b)
462 + regularisation.apply(&μ) 465 + regularisation.apply(&μ)
463 }, 466 },
542 }, 545 },
543 AlgorithmConfig::FW(ref algconfig) => { 546 AlgorithmConfig::FW(ref algconfig) => {
544 match (regularisation, dataterm) { 547 match (regularisation, dataterm) {
545 (Regularisation::Radon(α), DataTerm::L2Squared) => { 548 (Regularisation::Radon(α), DataTerm::L2Squared) => {
546 running(); 549 running();
547 pointsource_fw(&opA, &b, α, algconfig, iterator, plotter) 550 pointsource_fw_reg(&opA, &b, RadonRegTerm(α),
551 algconfig, iterator, plotter)
552 },
553 (Regularisation::NonnegRadon(α), DataTerm::L2Squared) => {
554 running();
555 pointsource_fw_reg(&opA, &b, NonnegRadonRegTerm(α),
556 algconfig, iterator, plotter)
548 }, 557 },
549 _ => { 558 _ => {
550 not_implemented(); 559 not_implemented();
551 continue 560 continue
552 } 561 }

mercurial