src/run.rs

changeset 20
90f77ad9a98d
parent 9
21b0e537ac0e
child 23
9869fa1e0ccd
equal deleted inserted replaced
17:de8d43ebfd0d 20:90f77ad9a98d
62 }; 62 };
63 use crate::subproblem::InnerSettings; 63 use crate::subproblem::InnerSettings;
64 use crate::seminorms::*; 64 use crate::seminorms::*;
65 use crate::plot::*; 65 use crate::plot::*;
66 use crate::{AlgorithmOverrides, CommandLineArgs}; 66 use crate::{AlgorithmOverrides, CommandLineArgs};
67 use crate::tolerance::Tolerance;
67 68
68 /// Available algorithms and their configurations 69 /// Available algorithms and their configurations
69 #[derive(Copy, Clone, Debug, Serialize, Deserialize)] 70 #[derive(Copy, Clone, Debug, Serialize, Deserialize)]
70 pub enum AlgorithmConfig<F : Float> { 71 pub enum AlgorithmConfig<F : Float> {
71 FB(FBConfig<F>), 72 FB(FBConfig<F>),
72 FW(FWConfig<F>), 73 FW(FWConfig<F>),
73 PDPS(PDPSConfig<F>), 74 PDPS(PDPSConfig<F>),
75 }
76
77 fn unpack_tolerance<F : Float>(v : &Vec<F>) -> Tolerance<F> {
78 assert!(v.len() == 3);
79 Tolerance::Power { initial : v[0], factor : v[1], exponent : v[2] }
74 } 80 }
75 81
76 impl<F : ClapFloat> AlgorithmConfig<F> { 82 impl<F : ClapFloat> AlgorithmConfig<F> {
77 /// Override supported parameters based on the command line. 83 /// Override supported parameters based on the command line.
78 pub fn cli_override(self, cli : &AlgorithmOverrides<F>) -> Self { 84 pub fn cli_override(self, cli : &AlgorithmOverrides<F>) -> Self {
83 .map_or(g.bootstrap_insertions, 89 .map_or(g.bootstrap_insertions,
84 |n| Some((n[0], n[1]))), 90 |n| Some((n[0], n[1]))),
85 merge_every : cli.merge_every.unwrap_or(g.merge_every), 91 merge_every : cli.merge_every.unwrap_or(g.merge_every),
86 merging : cli.merging.clone().unwrap_or(g.merging), 92 merging : cli.merging.clone().unwrap_or(g.merging),
87 final_merging : cli.final_merging.clone().unwrap_or(g.final_merging), 93 final_merging : cli.final_merging.clone().unwrap_or(g.final_merging),
94 tolerance: cli.tolerance.as_ref().map(unpack_tolerance).unwrap_or(g.tolerance),
88 .. g 95 .. g
89 } 96 }
90 }; 97 };
91 98
92 use AlgorithmConfig::*; 99 use AlgorithmConfig::*;
103 insertion : override_fb_generic(pdps.insertion), 110 insertion : override_fb_generic(pdps.insertion),
104 .. pdps 111 .. pdps
105 }), 112 }),
106 FW(fw) => FW(FWConfig { 113 FW(fw) => FW(FWConfig {
107 merging : cli.merging.clone().unwrap_or(fw.merging), 114 merging : cli.merging.clone().unwrap_or(fw.merging),
115 tolerance : cli.tolerance.as_ref().map(unpack_tolerance).unwrap_or(fw.tolerance),
108 .. fw 116 .. fw
109 }) 117 })
110 } 118 }
111 } 119 }
112 } 120 }

mercurial