src/sliding_fb.rs

branch
dev
changeset 46
f358958cc1a6
parent 45
5200e7090e06
child 49
6b0db7251ebe
equal deleted inserted replaced
45:5200e7090e06 46:f358958cc1a6
47 /// Transport step length $θ$ normalised to $(0, 1)$. 47 /// Transport step length $θ$ normalised to $(0, 1)$.
48 pub θ0 : F, 48 pub θ0 : F,
49 /// Factor in $(0, 1)$ for decreasing transport to adapt to tolerance. 49 /// Factor in $(0, 1)$ for decreasing transport to adapt to tolerance.
50 pub adaptation : F, 50 pub adaptation : F,
51 /// A posteriori transport tolerance multiplier (C_pos) 51 /// A posteriori transport tolerance multiplier (C_pos)
52 pub tolerance_mult_pos : F, 52 pub tolerance_mult_con : F,
53 } 53 }
54 54
55 #[replace_float_literals(F::cast_from(literal))] 55 #[replace_float_literals(F::cast_from(literal))]
56 impl <F : Float> TransportConfig<F> { 56 impl <F : Float> TransportConfig<F> {
57 /// Check that the parameters are ok. Panics if not. 57 /// Check that the parameters are ok. Panics if not.
58 pub fn check(&self) { 58 pub fn check(&self) {
59 assert!(self.θ0 > 0.0); 59 assert!(self.θ0 > 0.0);
60 assert!(0.0 < self.adaptation && self.adaptation < 1.0); 60 assert!(0.0 < self.adaptation && self.adaptation < 1.0);
61 assert!(self.tolerance_mult_pos > 0.0); 61 assert!(self.tolerance_mult_con > 0.0);
62 } 62 }
63 } 63 }
64 64
65 #[replace_float_literals(F::cast_from(literal))] 65 #[replace_float_literals(F::cast_from(literal))]
66 impl<F : Float> Default for TransportConfig<F> { 66 impl<F : Float> Default for TransportConfig<F> {
67 fn default() -> Self { 67 fn default() -> Self {
68 TransportConfig { 68 TransportConfig {
69 θ0 : 0.9, 69 θ0 : 0.9,
70 adaptation : 0.9, 70 adaptation : 0.9,
71 tolerance_mult_pos : 100.0, 71 tolerance_mult_con : 100.0,
72 } 72 }
73 } 73 }
74 } 74 }
75 75
76 /// Settings for [`pointsource_sliding_fb_reg`]. 76 /// Settings for [`pointsource_sliding_fb_reg`].
235 // 2. Through bounding ∫ B_ω(y, z) dλ(x, y, z). 235 // 2. Through bounding ∫ B_ω(y, z) dλ(x, y, z).
236 // through the estimate ≤ C ‖Δ‖‖γ^{k+1}‖ for Δ := μ^{k+1}-μ^k-(π_♯^1-π_♯^0)γ^{k+1}, 236 // through the estimate ≤ C ‖Δ‖‖γ^{k+1}‖ for Δ := μ^{k+1}-μ^k-(π_♯^1-π_♯^0)γ^{k+1},
237 // which holds for some some C if the convolution kernel in 𝒟 has Lipschitz gradient. 237 // which holds for some some C if the convolution kernel in 𝒟 has Lipschitz gradient.
238 let nγ = γ1.norm(Radon); 238 let nγ = γ1.norm(Radon);
239 let nΔ = μ_base_minus_γ0.norm(Radon) + μ.dist_matching(&γ1) + extra.unwrap_or(0.0); 239 let nΔ = μ_base_minus_γ0.norm(Radon) + μ.dist_matching(&γ1) + extra.unwrap_or(0.0);
240 let t = ε * tconfig.tolerance_mult_pos; 240 let t = ε * tconfig.tolerance_mult_con;
241 if nγ*nΔ > t { 241 if nγ*nΔ > t {
242 // Since t/(nγ*nΔ)<1, and the constant tconfig.adaptation < 1, 242 // Since t/(nγ*nΔ)<1, and the constant tconfig.adaptation < 1,
243 // this will guarantee that eventually ‖γ‖ decreases sufficiently that we 243 // this will guarantee that eventually ‖γ‖ decreases sufficiently that we
244 // will not enter here. 244 // will not enter here.
245 *γ1 *= tconfig.adaptation * t / ( nγ * nΔ ); 245 *γ1 *= tconfig.adaptation * t / ( nγ * nΔ );

mercurial