diff --git a/src/factor_graph.rs b/src/factor_graph.rs index 7022c16..c671ae8 100644 --- a/src/factor_graph.rs +++ b/src/factor_graph.rs @@ -145,6 +145,7 @@ impl LikelihoodFactor { .get(self.value) .map(|variable| variable.get_value()) .unwrap(); + let fx = variable_arena .get_mut(self.value) .map(|variable| variable.get_message(self.id)) diff --git a/src/lib.rs b/src/lib.rs index 57f1b90..47fa4b7 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -149,34 +149,7 @@ fn rate(rating_groups: &[&[Rating]]) { factor.start(&mut variable_arena); } - for factor in &skill_to_perf { - factor.update_value(&mut variable_arena); - } - - for factor in &perf_to_team { - factor.update_sum(&mut variable_arena); - } - - for factor in &team_diff { - factor.update_sum(&mut variable_arena); - } - - for factor in &trunc { - factor.update(&mut variable_arena); - } - - for factor in &team_diff { - factor.update_term(&mut variable_arena, 0); - factor.update_term(&mut variable_arena, 1); - } - - for factor in &perf_to_team { - factor.update_term(&mut variable_arena, 0); - } - - for factor in &skill_to_perf { - factor.update_mean(&mut variable_arena); - } + println!("before:"); for i in 0..size { let value = variable_arena @@ -187,7 +160,52 @@ fn rate(rating_groups: &[&[Rating]]) { let mu = value.mu(); let sigma = value.sigma(); - println!("player={}, mu={}, sigma={}", i, mu, sigma); + println!("* player={}, mu={}, sigma={}", i, mu, sigma); + } + + for factor in &skill_to_perf { + factor.update_value(&mut variable_arena); + } + + for factor in &perf_to_team { + factor.update_sum(&mut variable_arena); + } + + for _ in 0..5 { + for factor in &team_diff { + factor.update_sum(&mut variable_arena); + } + + for factor in &trunc { + factor.update(&mut variable_arena); + } + + for factor in &team_diff { + factor.update_term(&mut variable_arena, 0); + factor.update_term(&mut variable_arena, 1); + } + } + + for factor in &perf_to_team { + factor.update_term(&mut variable_arena, 0); + } + + for factor in &skill_to_perf { + factor.update_mean(&mut variable_arena); + } + + println!("after:"); + + for i in 0..size { + let value = variable_arena + .get(ss[i]) + .map(|variable| variable.get_value()) + .unwrap(); + + let mu = value.mu(); + let sigma = value.sigma(); + + println!("* player={}, mu={}, sigma={}", i, mu, sigma); } } @@ -264,7 +282,7 @@ mod tests { sigma: SIGMA, }; - assert_eq!(quality(&[&[alice], &[bob]]), 0.41614607); + assert_eq!(quality(&[&[alice], &[bob]]), 0.41614606763952605); } #[test] @@ -279,6 +297,9 @@ mod tests { sigma: SIGMA, }; + // alice: mu=27.175, sigma=7.112 + // bob: mu=23.141, sigma=6.859 + rate(&[&[alice], &[bob]]); assert_eq!(true, false);