More things, better things, awesome
This commit is contained in:
@@ -286,13 +286,20 @@ impl History {
|
||||
|
||||
data
|
||||
}
|
||||
|
||||
pub fn log_evidence(&mut self, forward: bool, agents: &Vec<&str>) -> f64 {
|
||||
self.batches
|
||||
.iter()
|
||||
.map(|batch| batch.log_evidence2(self.online, agents, forward, &mut self.agents))
|
||||
.sum()
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use approx::assert_ulps_eq;
|
||||
|
||||
use crate::{Game, Player, BETA, EPSILON, GAMMA, ITERATIONS, MU, P_DRAW, SIGMA};
|
||||
use crate::{Game, Gaussian, Player, BETA, EPSILON, GAMMA, ITERATIONS, MU, P_DRAW, SIGMA};
|
||||
|
||||
use super::*;
|
||||
|
||||
@@ -635,4 +642,89 @@ mod tests {
|
||||
epsilon = 0.000001
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_teams() {
|
||||
let composition = vec![
|
||||
vec![vec!["a", "b"], vec!["c", "d"]],
|
||||
vec![vec!["e", "f"], vec!["b", "c"]],
|
||||
vec![vec!["a", "d"], vec!["e", "f"]],
|
||||
];
|
||||
let results = vec![vec![1.0, 0.0], vec![0.0, 1.0], vec![1.0, 0.0]];
|
||||
|
||||
let mut h = History::new(
|
||||
composition,
|
||||
results,
|
||||
vec![],
|
||||
vec![],
|
||||
HashMap::new(),
|
||||
0.0,
|
||||
6.0,
|
||||
1.0,
|
||||
0.0,
|
||||
0.0,
|
||||
false,
|
||||
);
|
||||
|
||||
let trueskill_log_evidence = h.log_evidence(false, &vec![]);
|
||||
let trueskill_log_evidence_online = h.log_evidence(true, &vec![]);
|
||||
|
||||
assert_ulps_eq!(
|
||||
trueskill_log_evidence,
|
||||
trueskill_log_evidence_online,
|
||||
epsilon = 0.000001
|
||||
);
|
||||
|
||||
assert_ulps_eq!(
|
||||
h.batches[0].posterior("b").mu,
|
||||
-1.0 * h.batches[0].posterior("c").mu,
|
||||
epsilon = 0.000001
|
||||
);
|
||||
|
||||
let evidence_second_event = h.log_evidence(false, &vec!["b"]).exp() * 2.0;
|
||||
assert_ulps_eq!(0.5, evidence_second_event, epsilon = 0.000001);
|
||||
|
||||
let evidence_third_event = h.log_evidence(false, &vec!["a"]).exp() * 2.0;
|
||||
assert_ulps_eq!(0.669885, evidence_third_event, epsilon = 0.000001);
|
||||
|
||||
h.convergence(ITERATIONS, EPSILON, false);
|
||||
|
||||
let loocv_hat = h.log_evidence(false, &vec![]).exp();
|
||||
let p_d_m_hat = h.log_evidence(true, &vec![]).exp();
|
||||
|
||||
assert_ulps_eq!(loocv_hat, 0.2410274245857821, epsilon = 0.000001);
|
||||
assert_ulps_eq!(p_d_m_hat, 0.17243238958411006, epsilon = 0.000001);
|
||||
|
||||
assert_ulps_eq!(
|
||||
h.batches[0].posterior("a"),
|
||||
h.batches[0].posterior("b"),
|
||||
epsilon = 0.000001
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
h.batches[0].posterior("c"),
|
||||
h.batches[0].posterior("d"),
|
||||
epsilon = 0.000001
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
h.batches[1].posterior("e"),
|
||||
h.batches[1].posterior("f"),
|
||||
epsilon = 0.000001
|
||||
);
|
||||
|
||||
assert_ulps_eq!(
|
||||
h.batches[0].posterior("a"),
|
||||
Gaussian::new(4.084902364982456, 5.10691909049607),
|
||||
epsilon = 0.000001
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
h.batches[0].posterior("c"),
|
||||
Gaussian::new(-0.5330294544847751, 5.10691909049607),
|
||||
epsilon = 0.000001
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
h.batches[2].posterior("e"),
|
||||
Gaussian::new(-3.551872900373382, 5.154569731627773),
|
||||
epsilon = 0.000001
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user