src/types.rs

branch
dev
changeset 34
efa60bc4f743
parent 32
56c8adc32b09
child 35
b087e3eab191
equal deleted inserted replaced
33:aec67cdd6b14 34:efa60bc4f743
25 /// Structure for storing iteration statistics 25 /// Structure for storing iteration statistics
26 #[derive(Debug, Clone, Serialize)] 26 #[derive(Debug, Clone, Serialize)]
27 pub struct IterInfo<F : Float, const N : usize> { 27 pub struct IterInfo<F : Float, const N : usize> {
28 /// Function value 28 /// Function value
29 pub value : F, 29 pub value : F,
30 /// Number of speaks 30 /// Number of spikes
31 pub n_spikes : usize, 31 pub n_spikes : usize,
32 /// Number of iterations this statistic covers 32 /// Number of iterations this statistic covers
33 pub this_iters : usize, 33 pub this_iters : usize,
34 /// Number of spikes removed by merging since last IterInfo statistic 34 /// Number of spikes removed by merging since last IterInfo statistic
35 pub merged : usize, 35 pub merged : usize,
36 /// Number of spikes removed by pruning since last IterInfo statistic 36 /// Number of spikes removed by pruning since last IterInfo statistic
37 pub pruned : usize, 37 pub pruned : usize,
38 /// Number of inner iterations since last IterInfo statistic 38 /// Number of inner iterations since last IterInfo statistic
39 pub inner_iters : usize, 39 pub inner_iters : usize,
40 /// Tuple of (transported mass, source mass)
41 pub untransported_fraction : Option<(F, F)>,
42 /// Tuple of (|destination mass - untransported_mass|, transported mass)
43 pub transport_error : Option<(F, F)>,
40 /// Current tolerance 44 /// Current tolerance
41 pub ε : F, 45 pub ε : F,
42 /// Solve fin.dim problem for this measure to get the optimal `value`. 46 /// Solve fin.dim problem for this measure to get the optimal `value`.
43 pub postprocessing : Option<DiscreteMeasure<Loc<F, N>, F>>, 47 pub postprocessing : Option<DiscreteMeasure<Loc<F, N>, F>>,
44 } 48 }
53 merged : 0, 57 merged : 0,
54 pruned : 0, 58 pruned : 0,
55 inner_iters : 0, 59 inner_iters : 0,
56 ε : F::NAN, 60 ε : F::NAN,
57 postprocessing : None, 61 postprocessing : None,
62 untransported_fraction : None,
63 transport_error : None,
58 } 64 }
59 } 65 }
60 } 66 }
61 67
68 #[replace_float_literals(F::cast_from(literal))]
62 impl<F, const N : usize> LogRepr for IterInfo<F, N> where F : LogRepr + Float { 69 impl<F, const N : usize> LogRepr for IterInfo<F, N> where F : LogRepr + Float {
63 fn logrepr(&self) -> ColoredString { 70 fn logrepr(&self) -> ColoredString {
64 format!("{}\t| N = {}, ε = {:.8}, inner_iters_mean = {}, merged+pruned_mean = {}+{}", 71 format!("{}\t| N = {}, ε = {:.8}, inner_iters_mean = {}, merged+pruned_mean = {}+{}{}{}",
65 self.value.logrepr(), 72 self.value.logrepr(),
66 self.n_spikes, 73 self.n_spikes,
67 self.ε, 74 self.ε,
68 self.inner_iters as float / self.this_iters as float, 75 self.inner_iters as float / self.this_iters as float,
69 self.merged as float / self.this_iters as float, 76 self.merged as float / self.this_iters as float,
70 self.pruned as float / self.this_iters as float, 77 self.pruned as float / self.this_iters as float,
78 match self.untransported_fraction {
79 None => format!(""),
80 Some((a, b)) => if b > 0.0 {
81 format!(", untransported {:.2}%", 100.0*a/b)
82 } else {
83 format!("")
84 }
85 },
86 match self.transport_error {
87 None => format!(""),
88 Some((a, b)) => if b > 0.0 {
89 format!(", transport error {:.2}%", 100.0*a/b)
90 } else {
91 format!("")
92 }
93 }
71 ).as_str().into() 94 ).as_str().into()
72 } 95 }
73 } 96 }
74 97
75 /// Branch and bound refinement settings 98 /// Branch and bound refinement settings

mercurial