It works!

This commit is contained in:
2018-10-25 21:40:38 +02:00
parent e8aa60fcdd
commit 4fc27841e9
4 changed files with 44 additions and 4 deletions

View File

@@ -54,6 +54,8 @@ impl Variable {
self.factors.insert(factor, value * old / self.value);
self.value = value;
// debug!("Variable::value value={:?}", self.value);
}
pub fn get_value(&self) -> Gaussian {
@@ -65,6 +67,8 @@ impl Variable {
self.factors.insert(factor, message);
self.value = self.value / old * message;
// debug!("Variable::message value={:?}", self.value);
}
pub fn get_message(&self, factor: usize) -> Gaussian {
@@ -95,6 +99,8 @@ impl PriorFactor {
}
pub fn start(&self, variable_arena: &mut VariableArena) {
debug!("Prior::down var={:?}, value={:?}", self.variable.index, self.gaussian);
variable_arena
.get_mut(self.variable)
.unwrap()
@@ -137,6 +143,8 @@ impl LikelihoodFactor {
let a = 1.0 / (1.0 + self.variance * (x.pi() - fx.pi()));
let gaussian = Gaussian::from_pi_tau(a * (x.pi() - fx.pi()), a * (x.tau() - fx.tau()));
debug!("Likelihood::up var={:?}, value={:?}", self.mean.index, gaussian);
variable_arena
.get_mut(self.mean)
.unwrap()
@@ -152,6 +160,8 @@ impl LikelihoodFactor {
let a = 1.0 / (1.0 + self.variance * (y.pi() - fy.pi()));
let gaussian = Gaussian::from_pi_tau(a * (y.pi() - fy.pi()), a * (y.tau() - fy.tau()));
debug!("Likelihood::down var={:?}, value={:?}", self.value.index, gaussian);
variable_arena
.get_mut(self.value)
.unwrap()
@@ -210,6 +220,12 @@ impl SumFactor {
let gaussian = Gaussian::from_pi_tau(new_pi, new_tau);
if variable == self.sum {
debug!("Sum::down var={:?}, value={:?}", variable.index, gaussian);
} else {
debug!("Sum::up var={:?}, value={:?}", variable.index, gaussian);
}
variable_arena
.get_mut(variable)
.unwrap()
@@ -264,6 +280,12 @@ impl SumFactor {
self.internal_update(variable_arena, idx_term, y, fy, &a);
}
pub fn update_all_terms(&self, variable_arena: &mut VariableArena) {
for i in 0..self.terms.len() {
self.update_term(variable_arena, i);
}
}
}
fn v_win(t: f64, e: f64) -> f64 {
@@ -337,6 +359,8 @@ impl TruncateFactor {
let gaussian = Gaussian::from_pi_tau(c / m_w, (d + sqrt_c * v) / m_w);
debug!("Trunc::up var={:?}, value={:?}", self.variable.index, gaussian);
variable_arena
.get_mut(self.variable)
.unwrap()