src/sliding_fb.rs

changeset 91
47d495348e38
parent 89
8d1c959432c8
child 93
8f1e57821d76
equal deleted inserted replaced
90:b471a13e3136 91:47d495348e38
731 /// latter needs to be pruned when μ is. 731 /// latter needs to be pruned when μ is.
732 pub(crate) fn prune_compat(&mut self, μ: &mut RNDM<N, F>, stats: &mut IterInfo<F>) { 732 pub(crate) fn prune_compat(&mut self, μ: &mut RNDM<N, F>, stats: &mut IterInfo<F>) {
733 assert!(self.vec.len() <= μ.len()); 733 assert!(self.vec.len() <= μ.len());
734 let old_len = μ.len(); 734 let old_len = μ.len();
735 for (ρ, δ) in self.vec.iter_mut().zip(μ.iter_spikes()) { 735 for (ρ, δ) in self.vec.iter_mut().zip(μ.iter_spikes()) {
736 ρ.retain = δ.α.abs() > F::EPSILON; 736 ρ.retain = δ.α != F::ZERO;
737 } 737 }
738 μ.prune_by(|δ| δ.α.abs() > F::EPSILON); 738 // Do not prune new insertions on first round.
739 μ.prune_until(self.vec.len());
739 stats.pruned += old_len - μ.len(); 740 stats.pruned += old_len - μ.len();
740 self.vec.retain(|ρ| ρ.retain); 741 self.vec.retain(|ρ| ρ.retain);
741 assert!(self.vec.len() <= μ.len()); 742 assert!(self.vec.len() <= μ.len());
742 } 743 }
743 744
1113 ε, 1114 ε,
1114 ins, 1115 ins,
1115 &reg, 1116 &reg,
1116 Some(|μ̃: &RNDM<N, F>| f.apply(μ̃) + reg.apply(μ̃)), 1117 Some(|μ̃: &RNDM<N, F>| f.apply(μ̃) + reg.apply(μ̃)),
1117 ); 1118 );
1119 // Prune. Do not prune new insertions on first round.
1118 γ.prune_compat(&mut μ, &mut stats); 1120 γ.prune_compat(&mut μ, &mut stats);
1119 1121
1120 if config.insertion.random_insertions { 1122 if config.insertion.random_insertions {
1121 if let Some(x) = domain.random_point() { 1123 if let Some(x) = domain.random_point() {
1122 μ += DeltaMeasure { x, α: 0.0 }; 1124 μ += DeltaMeasure { x, α: 0.0 };
1140 } 1142 }
1141 Ok(()) 1143 Ok(())
1142 })?; 1144 })?;
1143 1145
1144 if did_merge.is_none() { 1146 if did_merge.is_none() {
1147 // Prune. Do not prune new insertions on first round.
1145 γ.prune_compat(&mut μ, &mut stats); 1148 γ.prune_compat(&mut μ, &mut stats);
1146 } 1149 }
1147 1150
1148 let iter = state.iteration(); 1151 let iter = state.iteration();
1149 stats.this_iters += 1; 1152 stats.this_iters += 1;

mercurial