More things, better things, awesome

This commit is contained in:
2022-06-18 23:39:42 +02:00
parent dc10504b80
commit c9d9d59535
7 changed files with 214 additions and 4 deletions

View File

@@ -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
);
}
}