Small refactor
This commit is contained in:
@@ -19,21 +19,21 @@ fn criterion_benchmark(criterion: &mut Criterion) {
|
||||
map.insert(
|
||||
a,
|
||||
Agent {
|
||||
player: Player::new(Gaussian::new(MU, SIGMA), BETA, GAMMA),
|
||||
player: Player::new(Gaussian::from_ms(MU, SIGMA), BETA, GAMMA),
|
||||
..Default::default()
|
||||
},
|
||||
);
|
||||
map.insert(
|
||||
b,
|
||||
Agent {
|
||||
player: Player::new(Gaussian::new(MU, SIGMA), BETA, GAMMA),
|
||||
player: Player::new(Gaussian::from_ms(MU, SIGMA), BETA, GAMMA),
|
||||
..Default::default()
|
||||
},
|
||||
);
|
||||
map.insert(
|
||||
c,
|
||||
Agent {
|
||||
player: Player::new(Gaussian::new(MU, SIGMA), BETA, GAMMA),
|
||||
player: Player::new(Gaussian::from_ms(MU, SIGMA), BETA, GAMMA),
|
||||
..Default::default()
|
||||
},
|
||||
);
|
||||
|
||||
130
src/batch.rs
130
src/batch.rs
@@ -53,9 +53,7 @@ impl Item {
|
||||
} else if forward {
|
||||
Player::new(skill.forward, r.beta, r.gamma)
|
||||
} else {
|
||||
let wp = skill.posterior() / self.likelihood;
|
||||
|
||||
Player::new(wp, r.beta, r.gamma)
|
||||
Player::new(skill.posterior() / self.likelihood, r.beta, r.gamma)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -484,7 +482,11 @@ mod tests {
|
||||
agents.insert(
|
||||
agent,
|
||||
Agent {
|
||||
player: Player::new(Gaussian::new(25.0, 25.0 / 3.0), 25.0 / 6.0, 25.0 / 300.0),
|
||||
player: Player::new(
|
||||
Gaussian::from_ms(25.0, 25.0 / 3.0),
|
||||
25.0 / 6.0,
|
||||
25.0 / 300.0,
|
||||
),
|
||||
..Default::default()
|
||||
},
|
||||
);
|
||||
@@ -505,12 +507,36 @@ mod tests {
|
||||
|
||||
let post = batch.posteriors();
|
||||
|
||||
assert_ulps_eq!(post[&a], Gaussian::new(29.205220, 7.194481), epsilon = 1e-6);
|
||||
assert_ulps_eq!(post[&b], Gaussian::new(20.794779, 7.194481), epsilon = 1e-6);
|
||||
assert_ulps_eq!(post[&c], Gaussian::new(20.794779, 7.194481), epsilon = 1e-6);
|
||||
assert_ulps_eq!(post[&d], Gaussian::new(29.205220, 7.194481), epsilon = 1e-6);
|
||||
assert_ulps_eq!(post[&e], Gaussian::new(29.205220, 7.194481), epsilon = 1e-6);
|
||||
assert_ulps_eq!(post[&f], Gaussian::new(20.794779, 7.194481), epsilon = 1e-6);
|
||||
assert_ulps_eq!(
|
||||
post[&a],
|
||||
Gaussian::from_ms(29.205220, 7.194481),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
post[&b],
|
||||
Gaussian::from_ms(20.794779, 7.194481),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
post[&c],
|
||||
Gaussian::from_ms(20.794779, 7.194481),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
post[&d],
|
||||
Gaussian::from_ms(29.205220, 7.194481),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
post[&e],
|
||||
Gaussian::from_ms(29.205220, 7.194481),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
post[&f],
|
||||
Gaussian::from_ms(20.794779, 7.194481),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
|
||||
assert_eq!(batch.convergence(&agents), 1);
|
||||
}
|
||||
@@ -532,7 +558,11 @@ mod tests {
|
||||
agents.insert(
|
||||
agent,
|
||||
Agent {
|
||||
player: Player::new(Gaussian::new(25.0, 25.0 / 3.0), 25.0 / 6.0, 25.0 / 300.0),
|
||||
player: Player::new(
|
||||
Gaussian::from_ms(25.0, 25.0 / 3.0),
|
||||
25.0 / 6.0,
|
||||
25.0 / 300.0,
|
||||
),
|
||||
..Default::default()
|
||||
},
|
||||
);
|
||||
@@ -553,17 +583,41 @@ mod tests {
|
||||
|
||||
let post = batch.posteriors();
|
||||
|
||||
assert_ulps_eq!(post[&a], Gaussian::new(24.960978, 6.298544), epsilon = 1e-6);
|
||||
assert_ulps_eq!(post[&b], Gaussian::new(27.095590, 6.010330), epsilon = 1e-6);
|
||||
assert_ulps_eq!(post[&c], Gaussian::new(24.889681, 5.866311), epsilon = 1e-6);
|
||||
assert_ulps_eq!(
|
||||
post[&a],
|
||||
Gaussian::from_ms(24.960978, 6.298544),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
post[&b],
|
||||
Gaussian::from_ms(27.095590, 6.010330),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
post[&c],
|
||||
Gaussian::from_ms(24.889681, 5.866311),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
|
||||
assert!(batch.convergence(&agents) > 1);
|
||||
|
||||
let post = batch.posteriors();
|
||||
|
||||
assert_ulps_eq!(post[&a], Gaussian::new(25.000000, 5.419212), epsilon = 1e-6);
|
||||
assert_ulps_eq!(post[&b], Gaussian::new(25.000000, 5.419212), epsilon = 1e-6);
|
||||
assert_ulps_eq!(post[&c], Gaussian::new(25.000000, 5.419212), epsilon = 1e-6);
|
||||
assert_ulps_eq!(
|
||||
post[&a],
|
||||
Gaussian::from_ms(25.000000, 5.419212),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
post[&b],
|
||||
Gaussian::from_ms(25.000000, 5.419212),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
post[&c],
|
||||
Gaussian::from_ms(25.000000, 5.419212),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -583,7 +637,11 @@ mod tests {
|
||||
agents.insert(
|
||||
agent,
|
||||
Agent {
|
||||
player: Player::new(Gaussian::new(25.0, 25.0 / 3.0), 25.0 / 6.0, 25.0 / 300.0),
|
||||
player: Player::new(
|
||||
Gaussian::from_ms(25.0, 25.0 / 3.0),
|
||||
25.0 / 6.0,
|
||||
25.0 / 300.0,
|
||||
),
|
||||
..Default::default()
|
||||
},
|
||||
);
|
||||
@@ -606,9 +664,21 @@ mod tests {
|
||||
|
||||
let post = batch.posteriors();
|
||||
|
||||
assert_ulps_eq!(post[&a], Gaussian::new(25.000000, 5.419212), epsilon = 1e-6);
|
||||
assert_ulps_eq!(post[&b], Gaussian::new(25.000000, 5.419212), epsilon = 1e-6);
|
||||
assert_ulps_eq!(post[&c], Gaussian::new(25.000000, 5.419212), epsilon = 1e-6);
|
||||
assert_ulps_eq!(
|
||||
post[&a],
|
||||
Gaussian::from_ms(25.000000, 5.419212),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
post[&b],
|
||||
Gaussian::from_ms(25.000000, 5.419212),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
post[&c],
|
||||
Gaussian::from_ms(25.000000, 5.419212),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
|
||||
batch.add_events(
|
||||
vec![
|
||||
@@ -627,8 +697,20 @@ mod tests {
|
||||
|
||||
let post = batch.posteriors();
|
||||
|
||||
assert_ulps_eq!(post[&a], Gaussian::new(25.000003, 3.880150), epsilon = 1e-6);
|
||||
assert_ulps_eq!(post[&b], Gaussian::new(25.000003, 3.880150), epsilon = 1e-6);
|
||||
assert_ulps_eq!(post[&c], Gaussian::new(25.000003, 3.880150), epsilon = 1e-6);
|
||||
assert_ulps_eq!(
|
||||
post[&a],
|
||||
Gaussian::from_ms(25.000003, 3.880150),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
post[&b],
|
||||
Gaussian::from_ms(25.000003, 3.880150),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
post[&c],
|
||||
Gaussian::from_ms(25.000003, 3.880150),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
270
src/game.rs
270
src/game.rs
@@ -232,8 +232,16 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn test_1vs1() {
|
||||
let t_a = Player::new(Gaussian::new(25.0, 25.0 / 3.0), 25.0 / 6.0, 25.0 / 300.0);
|
||||
let t_b = Player::new(Gaussian::new(25.0, 25.0 / 3.0), 25.0 / 6.0, 25.0 / 300.0);
|
||||
let t_a = Player::new(
|
||||
Gaussian::from_ms(25.0, 25.0 / 3.0),
|
||||
25.0 / 6.0,
|
||||
25.0 / 300.0,
|
||||
);
|
||||
let t_b = Player::new(
|
||||
Gaussian::from_ms(25.0, 25.0 / 3.0),
|
||||
25.0 / 6.0,
|
||||
25.0 / 300.0,
|
||||
);
|
||||
|
||||
let g = Game::new(vec![vec![t_a], vec![t_b]], vec![0.0, 1.0], vec![], 0.0);
|
||||
let p = g.posteriors();
|
||||
@@ -241,11 +249,11 @@ mod tests {
|
||||
let a = p[0][0];
|
||||
let b = p[1][0];
|
||||
|
||||
assert_ulps_eq!(a, Gaussian::new(20.794779, 7.194481), epsilon = 1e-6);
|
||||
assert_ulps_eq!(b, Gaussian::new(29.205220, 7.194481), epsilon = 1e-6);
|
||||
assert_ulps_eq!(a, Gaussian::from_ms(20.794779, 7.194481), epsilon = 1e-6);
|
||||
assert_ulps_eq!(b, Gaussian::from_ms(29.205220, 7.194481), epsilon = 1e-6);
|
||||
|
||||
let t_a = Player::new(Gaussian::new(29.0, 1.0), 25.0 / 6.0, GAMMA);
|
||||
let t_b = Player::new(Gaussian::new(25.0, 25.0 / 3.0), 25.0 / 6.0, GAMMA);
|
||||
let t_a = Player::new(Gaussian::from_ms(29.0, 1.0), 25.0 / 6.0, GAMMA);
|
||||
let t_b = Player::new(Gaussian::from_ms(25.0, 25.0 / 3.0), 25.0 / 6.0, GAMMA);
|
||||
|
||||
let g = Game::new(vec![vec![t_a], vec![t_b]], vec![0.0, 1.0], vec![], 0.0);
|
||||
let p = g.posteriors();
|
||||
@@ -253,11 +261,11 @@ mod tests {
|
||||
let a = p[0][0];
|
||||
let b = p[1][0];
|
||||
|
||||
assert_ulps_eq!(a, Gaussian::new(28.896475, 0.996604), epsilon = 1e-6);
|
||||
assert_ulps_eq!(b, Gaussian::new(32.189211, 6.062063), epsilon = 1e-6);
|
||||
assert_ulps_eq!(a, Gaussian::from_ms(28.896475, 0.996604), epsilon = 1e-6);
|
||||
assert_ulps_eq!(b, Gaussian::from_ms(32.189211, 6.062063), epsilon = 1e-6);
|
||||
|
||||
let t_a = Player::new(Gaussian::new(1.139, 0.531), 1.0, 0.2125);
|
||||
let t_b = Player::new(Gaussian::new(15.568, 0.51), 1.0, 0.2125);
|
||||
let t_a = Player::new(Gaussian::from_ms(1.139, 0.531), 1.0, 0.2125);
|
||||
let t_b = Player::new(Gaussian::from_ms(15.568, 0.51), 1.0, 0.2125);
|
||||
|
||||
let g = Game::new(vec![vec![t_a], vec![t_b]], vec![0.0, 1.0], vec![], 0.0);
|
||||
|
||||
@@ -269,17 +277,17 @@ mod tests {
|
||||
fn test_1vs1vs1() {
|
||||
let teams = vec![
|
||||
vec![Player::new(
|
||||
Gaussian::new(25.0, 25.0 / 3.0),
|
||||
Gaussian::from_ms(25.0, 25.0 / 3.0),
|
||||
25.0 / 6.0,
|
||||
25.0 / 300.0,
|
||||
)],
|
||||
vec![Player::new(
|
||||
Gaussian::new(25.0, 25.0 / 3.0),
|
||||
Gaussian::from_ms(25.0, 25.0 / 3.0),
|
||||
25.0 / 6.0,
|
||||
25.0 / 300.0,
|
||||
)],
|
||||
vec![Player::new(
|
||||
Gaussian::new(25.0, 25.0 / 3.0),
|
||||
Gaussian::from_ms(25.0, 25.0 / 3.0),
|
||||
25.0 / 6.0,
|
||||
25.0 / 300.0,
|
||||
)],
|
||||
@@ -291,8 +299,8 @@ mod tests {
|
||||
let a = p[0][0];
|
||||
let b = p[1][0];
|
||||
|
||||
assert_ulps_eq!(a, Gaussian::new(25.000000, 6.238469), epsilon = 1e-6);
|
||||
assert_ulps_eq!(b, Gaussian::new(31.311358, 6.698818), epsilon = 1e-6);
|
||||
assert_ulps_eq!(a, Gaussian::from_ms(25.000000, 6.238469), epsilon = 1e-6);
|
||||
assert_ulps_eq!(b, Gaussian::from_ms(31.311358, 6.698818), epsilon = 1e-6);
|
||||
|
||||
let g = Game::new(teams.clone(), vec![], vec![], 0.0);
|
||||
let p = g.posteriors();
|
||||
@@ -300,8 +308,8 @@ mod tests {
|
||||
let a = p[0][0];
|
||||
let b = p[1][0];
|
||||
|
||||
assert_ulps_eq!(a, Gaussian::new(31.311358, 6.698818), epsilon = 1e-6);
|
||||
assert_ulps_eq!(b, Gaussian::new(25.000000, 6.238469), epsilon = 1e-6);
|
||||
assert_ulps_eq!(a, Gaussian::from_ms(31.311358, 6.698818), epsilon = 1e-6);
|
||||
assert_ulps_eq!(b, Gaussian::from_ms(25.000000, 6.238469), epsilon = 1e-6);
|
||||
|
||||
let g = Game::new(teams, vec![1.0, 2.0, 0.0], vec![], 0.5);
|
||||
let p = g.posteriors();
|
||||
@@ -310,15 +318,23 @@ mod tests {
|
||||
let b = p[1][0];
|
||||
let c = p[2][0];
|
||||
|
||||
assert_ulps_eq!(a, Gaussian::new(24.999999, 6.092561), epsilon = 1e-6);
|
||||
assert_ulps_eq!(b, Gaussian::new(33.379314, 6.483575), epsilon = 1e-6);
|
||||
assert_ulps_eq!(c, Gaussian::new(16.620685, 6.483575), epsilon = 1e-6);
|
||||
assert_ulps_eq!(a, Gaussian::from_ms(24.999999, 6.092561), epsilon = 1e-6);
|
||||
assert_ulps_eq!(b, Gaussian::from_ms(33.379314, 6.483575), epsilon = 1e-6);
|
||||
assert_ulps_eq!(c, Gaussian::from_ms(16.620685, 6.483575), epsilon = 1e-6);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_1vs1_draw() {
|
||||
let t_a = Player::new(Gaussian::new(25.0, 25.0 / 3.0), 25.0 / 6.0, 25.0 / 300.0);
|
||||
let t_b = Player::new(Gaussian::new(25.0, 25.0 / 3.0), 25.0 / 6.0, 25.0 / 300.0);
|
||||
let t_a = Player::new(
|
||||
Gaussian::from_ms(25.0, 25.0 / 3.0),
|
||||
25.0 / 6.0,
|
||||
25.0 / 300.0,
|
||||
);
|
||||
let t_b = Player::new(
|
||||
Gaussian::from_ms(25.0, 25.0 / 3.0),
|
||||
25.0 / 6.0,
|
||||
25.0 / 300.0,
|
||||
);
|
||||
|
||||
let g = Game::new(vec![vec![t_a], vec![t_b]], vec![0.0, 0.0], vec![], 0.25);
|
||||
let p = g.posteriors();
|
||||
@@ -326,11 +342,11 @@ mod tests {
|
||||
let a = p[0][0];
|
||||
let b = p[1][0];
|
||||
|
||||
assert_ulps_eq!(a, Gaussian::new(24.999999, 6.469480), epsilon = 1e-6);
|
||||
assert_ulps_eq!(b, Gaussian::new(24.999999, 6.469480), epsilon = 1e-6);
|
||||
assert_ulps_eq!(a, Gaussian::from_ms(24.999999, 6.469480), epsilon = 1e-6);
|
||||
assert_ulps_eq!(b, Gaussian::from_ms(24.999999, 6.469480), epsilon = 1e-6);
|
||||
|
||||
let t_a = Player::new(Gaussian::new(25.0, 3.0), 25.0 / 6.0, 25.0 / 300.0);
|
||||
let t_b = Player::new(Gaussian::new(29.0, 2.0), 25.0 / 6.0, 25.0 / 300.0);
|
||||
let t_a = Player::new(Gaussian::from_ms(25.0, 3.0), 25.0 / 6.0, 25.0 / 300.0);
|
||||
let t_b = Player::new(Gaussian::from_ms(29.0, 2.0), 25.0 / 6.0, 25.0 / 300.0);
|
||||
|
||||
let g = Game::new(vec![vec![t_a], vec![t_b]], vec![0.0, 0.0], vec![], 0.25);
|
||||
let p = g.posteriors();
|
||||
@@ -338,15 +354,27 @@ mod tests {
|
||||
let a = p[0][0];
|
||||
let b = p[1][0];
|
||||
|
||||
assert_ulps_eq!(a, Gaussian::new(25.736001, 2.709956), epsilon = 1e-6);
|
||||
assert_ulps_eq!(b, Gaussian::new(28.672888, 1.916471), epsilon = 1e-6);
|
||||
assert_ulps_eq!(a, Gaussian::from_ms(25.736001, 2.709956), epsilon = 1e-6);
|
||||
assert_ulps_eq!(b, Gaussian::from_ms(28.672888, 1.916471), epsilon = 1e-6);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_1vs1vs1_draw() {
|
||||
let t_a = Player::new(Gaussian::new(25.0, 25.0 / 3.0), 25.0 / 6.0, 25.0 / 300.0);
|
||||
let t_b = Player::new(Gaussian::new(25.0, 25.0 / 3.0), 25.0 / 6.0, 25.0 / 300.0);
|
||||
let t_c = Player::new(Gaussian::new(25.0, 25.0 / 3.0), 25.0 / 6.0, 25.0 / 300.0);
|
||||
let t_a = Player::new(
|
||||
Gaussian::from_ms(25.0, 25.0 / 3.0),
|
||||
25.0 / 6.0,
|
||||
25.0 / 300.0,
|
||||
);
|
||||
let t_b = Player::new(
|
||||
Gaussian::from_ms(25.0, 25.0 / 3.0),
|
||||
25.0 / 6.0,
|
||||
25.0 / 300.0,
|
||||
);
|
||||
let t_c = Player::new(
|
||||
Gaussian::from_ms(25.0, 25.0 / 3.0),
|
||||
25.0 / 6.0,
|
||||
25.0 / 300.0,
|
||||
);
|
||||
|
||||
let g = Game::new(
|
||||
vec![vec![t_a], vec![t_b], vec![t_c]],
|
||||
@@ -360,13 +388,13 @@ mod tests {
|
||||
let b = p[1][0];
|
||||
let c = p[2][0];
|
||||
|
||||
assert_ulps_eq!(a, Gaussian::new(24.999999, 5.729068), epsilon = 1e-6);
|
||||
assert_ulps_eq!(b, Gaussian::new(25.000000, 5.707423), epsilon = 1e-6);
|
||||
assert_ulps_eq!(c, Gaussian::new(24.999999, 5.729068), epsilon = 1e-6);
|
||||
assert_ulps_eq!(a, Gaussian::from_ms(24.999999, 5.729068), epsilon = 1e-6);
|
||||
assert_ulps_eq!(b, Gaussian::from_ms(25.000000, 5.707423), epsilon = 1e-6);
|
||||
assert_ulps_eq!(c, Gaussian::from_ms(24.999999, 5.729068), epsilon = 1e-6);
|
||||
|
||||
let t_a = Player::new(Gaussian::new(25.0, 3.0), 25.0 / 6.0, 25.0 / 300.0);
|
||||
let t_b = Player::new(Gaussian::new(25.0, 3.0), 25.0 / 6.0, 25.0 / 300.0);
|
||||
let t_c = Player::new(Gaussian::new(29.0, 2.0), 25.0 / 6.0, 25.0 / 300.0);
|
||||
let t_a = Player::new(Gaussian::from_ms(25.0, 3.0), 25.0 / 6.0, 25.0 / 300.0);
|
||||
let t_b = Player::new(Gaussian::from_ms(25.0, 3.0), 25.0 / 6.0, 25.0 / 300.0);
|
||||
let t_c = Player::new(Gaussian::from_ms(29.0, 2.0), 25.0 / 6.0, 25.0 / 300.0);
|
||||
|
||||
let g = Game::new(
|
||||
vec![vec![t_a], vec![t_b], vec![t_c]],
|
||||
@@ -380,35 +408,35 @@ mod tests {
|
||||
let b = p[1][0];
|
||||
let c = p[2][0];
|
||||
|
||||
assert_ulps_eq!(a, Gaussian::new(25.488507, 2.638208), epsilon = 1e-6);
|
||||
assert_ulps_eq!(b, Gaussian::new(25.510671, 2.628751), epsilon = 1e-6);
|
||||
assert_ulps_eq!(c, Gaussian::new(28.555920, 1.885689), epsilon = 1e-6);
|
||||
assert_ulps_eq!(a, Gaussian::from_ms(25.488507, 2.638208), epsilon = 1e-6);
|
||||
assert_ulps_eq!(b, Gaussian::from_ms(25.510671, 2.628751), epsilon = 1e-6);
|
||||
assert_ulps_eq!(c, Gaussian::from_ms(28.555920, 1.885689), epsilon = 1e-6);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_2vs1vs2_mixed() {
|
||||
let t_a = vec![
|
||||
Player::new(Gaussian::new(12.0, 3.0), 25.0 / 6.0, 25.0 / 300.0),
|
||||
Player::new(Gaussian::new(18.0, 3.0), 25.0 / 6.0, 25.0 / 300.0),
|
||||
Player::new(Gaussian::from_ms(12.0, 3.0), 25.0 / 6.0, 25.0 / 300.0),
|
||||
Player::new(Gaussian::from_ms(18.0, 3.0), 25.0 / 6.0, 25.0 / 300.0),
|
||||
];
|
||||
let t_b = vec![Player::new(
|
||||
Gaussian::new(30.0, 3.0),
|
||||
Gaussian::from_ms(30.0, 3.0),
|
||||
25.0 / 6.0,
|
||||
25.0 / 300.0,
|
||||
)];
|
||||
let t_c = vec![
|
||||
Player::new(Gaussian::new(14.0, 3.0), 25.0 / 6.0, 25.0 / 300.0),
|
||||
Player::new(Gaussian::new(16., 3.0), 25.0 / 6.0, 25.0 / 300.0),
|
||||
Player::new(Gaussian::from_ms(14.0, 3.0), 25.0 / 6.0, 25.0 / 300.0),
|
||||
Player::new(Gaussian::from_ms(16., 3.0), 25.0 / 6.0, 25.0 / 300.0),
|
||||
];
|
||||
|
||||
let g = Game::new(vec![t_a, t_b, t_c], vec![1.0, 0.0, 0.0], vec![], 0.25);
|
||||
let p = g.posteriors();
|
||||
|
||||
assert_ulps_eq!(p[0][0], Gaussian::new(13.051, 2.864), epsilon = 1e-3);
|
||||
assert_ulps_eq!(p[0][1], Gaussian::new(19.051, 2.864), epsilon = 1e-3);
|
||||
assert_ulps_eq!(p[1][0], Gaussian::new(29.292, 2.764), epsilon = 1e-3);
|
||||
assert_ulps_eq!(p[2][0], Gaussian::new(13.658, 2.813), epsilon = 1e-3);
|
||||
assert_ulps_eq!(p[2][1], Gaussian::new(15.658, 2.813), epsilon = 1e-3);
|
||||
assert_ulps_eq!(p[0][0], Gaussian::from_ms(13.051, 2.864), epsilon = 1e-3);
|
||||
assert_ulps_eq!(p[0][1], Gaussian::from_ms(19.051, 2.864), epsilon = 1e-3);
|
||||
assert_ulps_eq!(p[1][0], Gaussian::from_ms(29.292, 2.764), epsilon = 1e-3);
|
||||
assert_ulps_eq!(p[2][0], Gaussian::from_ms(13.658, 2.813), epsilon = 1e-3);
|
||||
assert_ulps_eq!(p[2][1], Gaussian::from_ms(15.658, 2.813), epsilon = 1e-3);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -417,12 +445,12 @@ mod tests {
|
||||
let w_b = vec![2.0];
|
||||
|
||||
let t_a = vec![Player::new(
|
||||
Gaussian::new(25.0, 25.0 / 3.0),
|
||||
Gaussian::from_ms(25.0, 25.0 / 3.0),
|
||||
25.0 / 6.0,
|
||||
0.0,
|
||||
)];
|
||||
let t_b = vec![Player::new(
|
||||
Gaussian::new(25.0, 25.0 / 3.0),
|
||||
Gaussian::from_ms(25.0, 25.0 / 3.0),
|
||||
25.0 / 6.0,
|
||||
0.0,
|
||||
)];
|
||||
@@ -430,8 +458,16 @@ mod tests {
|
||||
let g = Game::new(vec![t_a.clone(), t_b.clone()], vec![], vec![w_a, w_b], 0.0);
|
||||
let p = g.posteriors();
|
||||
|
||||
assert_ulps_eq!(p[0][0], Gaussian::new(30.625173, 7.765472), epsilon = 1e-6);
|
||||
assert_ulps_eq!(p[1][0], Gaussian::new(13.749653, 5.733840), epsilon = 1e-6);
|
||||
assert_ulps_eq!(
|
||||
p[0][0],
|
||||
Gaussian::from_ms(30.625173, 7.765472),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
p[1][0],
|
||||
Gaussian::from_ms(13.749653, 5.733840),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
|
||||
let w_a = vec![1.0];
|
||||
let w_b = vec![0.7];
|
||||
@@ -439,8 +475,16 @@ mod tests {
|
||||
let g = Game::new(vec![t_a.clone(), t_b.clone()], vec![], vec![w_a, w_b], 0.0);
|
||||
let p = g.posteriors();
|
||||
|
||||
assert_ulps_eq!(p[0][0], Gaussian::new(27.630080, 7.206676), epsilon = 1e-6);
|
||||
assert_ulps_eq!(p[1][0], Gaussian::new(23.158943, 7.801628), epsilon = 1e-6);
|
||||
assert_ulps_eq!(
|
||||
p[0][0],
|
||||
Gaussian::from_ms(27.630080, 7.206676),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
p[1][0],
|
||||
Gaussian::from_ms(23.158943, 7.801628),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
|
||||
let w_a = vec![1.6];
|
||||
let w_b = vec![0.7];
|
||||
@@ -448,26 +492,42 @@ mod tests {
|
||||
let g = Game::new(vec![t_a, t_b], vec![], vec![w_a, w_b], 0.0);
|
||||
let p = g.posteriors();
|
||||
|
||||
assert_ulps_eq!(p[0][0], Gaussian::new(26.142438, 7.573088), epsilon = 1e-6);
|
||||
assert_ulps_eq!(p[1][0], Gaussian::new(24.500183, 8.193278), epsilon = 1e-6);
|
||||
assert_ulps_eq!(
|
||||
p[0][0],
|
||||
Gaussian::from_ms(26.142438, 7.573088),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
p[1][0],
|
||||
Gaussian::from_ms(24.500183, 8.193278),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
|
||||
let w_a = vec![1.0];
|
||||
let w_b = vec![0.0];
|
||||
|
||||
let t_a = vec![Player::new(Gaussian::new(2.0, 6.0), 1.0, 0.0)];
|
||||
let t_b = vec![Player::new(Gaussian::new(2.0, 6.0), 1.0, 0.0)];
|
||||
let t_a = vec![Player::new(Gaussian::from_ms(2.0, 6.0), 1.0, 0.0)];
|
||||
let t_b = vec![Player::new(Gaussian::from_ms(2.0, 6.0), 1.0, 0.0)];
|
||||
|
||||
let g = Game::new(vec![t_a, t_b], vec![], vec![w_a, w_b], 0.0);
|
||||
let p = g.posteriors();
|
||||
|
||||
assert_ulps_eq!(p[0][0], Gaussian::new(5.557067, 4.052826), epsilon = 1e-6);
|
||||
assert_ulps_eq!(p[1][0], Gaussian::new(2.000000, 6.000000), epsilon = 1e-6);
|
||||
assert_ulps_eq!(
|
||||
p[0][0],
|
||||
Gaussian::from_ms(5.557067, 4.052826),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
p[1][0],
|
||||
Gaussian::from_ms(2.000000, 6.000000),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
|
||||
let w_a = vec![1.0];
|
||||
let w_b = vec![-1.0];
|
||||
|
||||
let t_a = vec![Player::new(Gaussian::new(2.0, 6.0), 1.0, 0.0)];
|
||||
let t_b = vec![Player::new(Gaussian::new(2.0, 6.0), 1.0, 0.0)];
|
||||
let t_a = vec![Player::new(Gaussian::from_ms(2.0, 6.0), 1.0, 0.0)];
|
||||
let t_b = vec![Player::new(Gaussian::from_ms(2.0, 6.0), 1.0, 0.0)];
|
||||
|
||||
let g = Game::new(vec![t_a, t_b], vec![], vec![w_a, w_b], 0.0);
|
||||
let p = g.posteriors();
|
||||
@@ -478,24 +538,40 @@ mod tests {
|
||||
#[test]
|
||||
fn test_2vs2_weighted() {
|
||||
let t_a = vec![
|
||||
Player::new(Gaussian::new(25.0, 25.0 / 3.0), 25.0 / 6.0, 0.0),
|
||||
Player::new(Gaussian::new(25.0, 25.0 / 3.0), 25.0 / 6.0, 0.0),
|
||||
Player::new(Gaussian::from_ms(25.0, 25.0 / 3.0), 25.0 / 6.0, 0.0),
|
||||
Player::new(Gaussian::from_ms(25.0, 25.0 / 3.0), 25.0 / 6.0, 0.0),
|
||||
];
|
||||
let w_a = vec![0.4, 0.8];
|
||||
|
||||
let t_b = vec![
|
||||
Player::new(Gaussian::new(25.0, 25.0 / 3.0), 25.0 / 6.0, 0.0),
|
||||
Player::new(Gaussian::new(25.0, 25.0 / 3.0), 25.0 / 6.0, 0.0),
|
||||
Player::new(Gaussian::from_ms(25.0, 25.0 / 3.0), 25.0 / 6.0, 0.0),
|
||||
Player::new(Gaussian::from_ms(25.0, 25.0 / 3.0), 25.0 / 6.0, 0.0),
|
||||
];
|
||||
let w_b = vec![0.9, 0.6];
|
||||
|
||||
let g = Game::new(vec![t_a.clone(), t_b.clone()], vec![], vec![w_a, w_b], 0.0);
|
||||
let p = g.posteriors();
|
||||
|
||||
assert_ulps_eq!(p[0][0], Gaussian::new(27.539023, 8.129639), epsilon = 1e-6);
|
||||
assert_ulps_eq!(p[0][1], Gaussian::new(30.078046, 7.485372), epsilon = 1e-6);
|
||||
assert_ulps_eq!(p[1][0], Gaussian::new(19.287197, 7.243465), epsilon = 1e-6);
|
||||
assert_ulps_eq!(p[1][1], Gaussian::new(21.191465, 7.867608), epsilon = 1e-6);
|
||||
assert_ulps_eq!(
|
||||
p[0][0],
|
||||
Gaussian::from_ms(27.539023, 8.129639),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
p[0][1],
|
||||
Gaussian::from_ms(30.078046, 7.485372),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
p[1][0],
|
||||
Gaussian::from_ms(19.287197, 7.243465),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
p[1][1],
|
||||
Gaussian::from_ms(21.191465, 7.867608),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
|
||||
let w_a = vec![1.3, 1.5];
|
||||
let w_b = vec![0.7, 0.4];
|
||||
@@ -503,10 +579,26 @@ mod tests {
|
||||
let g = Game::new(vec![t_a.clone(), t_b.clone()], vec![], vec![w_a, w_b], 0.0);
|
||||
let p = g.posteriors();
|
||||
|
||||
assert_ulps_eq!(p[0][0], Gaussian::new(25.190190, 8.220511), epsilon = 1e-6);
|
||||
assert_ulps_eq!(p[0][1], Gaussian::new(25.219450, 8.182783), epsilon = 1e-6);
|
||||
assert_ulps_eq!(p[1][0], Gaussian::new(24.897589, 8.300779), epsilon = 1e-6);
|
||||
assert_ulps_eq!(p[1][1], Gaussian::new(24.941479, 8.322717), epsilon = 1e-6);
|
||||
assert_ulps_eq!(
|
||||
p[0][0],
|
||||
Gaussian::from_ms(25.190190, 8.220511),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
p[0][1],
|
||||
Gaussian::from_ms(25.219450, 8.182783),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
p[1][0],
|
||||
Gaussian::from_ms(24.897589, 8.300779),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
p[1][1],
|
||||
Gaussian::from_ms(24.941479, 8.322717),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
|
||||
let w_a = vec![1.6, 0.2];
|
||||
let w_b = vec![0.7, 2.4];
|
||||
@@ -514,16 +606,32 @@ mod tests {
|
||||
let g = Game::new(vec![t_a.clone(), t_b.clone()], vec![], vec![w_a, w_b], 0.0);
|
||||
let p = g.posteriors();
|
||||
|
||||
assert_ulps_eq!(p[0][0], Gaussian::new(31.674697, 7.501180), epsilon = 1e-6);
|
||||
assert_ulps_eq!(p[0][1], Gaussian::new(25.834337, 8.320970), epsilon = 1e-6);
|
||||
assert_ulps_eq!(p[1][0], Gaussian::new(22.079819, 8.180607), epsilon = 1e-6);
|
||||
assert_ulps_eq!(p[1][1], Gaussian::new(14.987953, 6.308469), epsilon = 1e-6);
|
||||
assert_ulps_eq!(
|
||||
p[0][0],
|
||||
Gaussian::from_ms(31.674697, 7.501180),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
p[0][1],
|
||||
Gaussian::from_ms(25.834337, 8.320970),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
p[1][0],
|
||||
Gaussian::from_ms(22.079819, 8.180607),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
p[1][1],
|
||||
Gaussian::from_ms(14.987953, 6.308469),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
|
||||
let g = Game::new(
|
||||
vec![
|
||||
t_a.clone(),
|
||||
vec![Player::new(
|
||||
Gaussian::new(25.0, 25.0 / 3.0),
|
||||
Gaussian::from_ms(25.0, 25.0 / 3.0),
|
||||
25.0 / 6.0,
|
||||
0.0,
|
||||
)],
|
||||
|
||||
@@ -9,9 +9,7 @@ pub struct Gaussian {
|
||||
}
|
||||
|
||||
impl Gaussian {
|
||||
pub fn new(mu: f64, sigma: f64) -> Self {
|
||||
debug_assert!(sigma >= 0.0, "sigma must be equal or larger than 0.0");
|
||||
|
||||
pub const fn from_ms(mu: f64, sigma: f64) -> Self {
|
||||
Gaussian { mu, sigma }
|
||||
}
|
||||
|
||||
|
||||
@@ -280,7 +280,11 @@ impl History {
|
||||
*agent,
|
||||
Agent {
|
||||
player: priors.get(agent).cloned().unwrap_or_else(|| {
|
||||
Player::new(Gaussian::new(self.mu, self.sigma), self.beta, self.gamma)
|
||||
Player::new(
|
||||
Gaussian::from_ms(self.mu, self.sigma),
|
||||
self.beta,
|
||||
self.gamma,
|
||||
)
|
||||
}),
|
||||
..Default::default()
|
||||
},
|
||||
@@ -439,7 +443,7 @@ mod tests {
|
||||
priors.insert(
|
||||
agent,
|
||||
Player::new(
|
||||
Gaussian::new(25.0, 25.0 / 3.0),
|
||||
Gaussian::from_ms(25.0, 25.0 / 3.0),
|
||||
25.0 / 6.0,
|
||||
0.15 * 25.0 / 3.0,
|
||||
),
|
||||
@@ -452,7 +456,11 @@ mod tests {
|
||||
|
||||
let p0 = h.batches[0].posteriors();
|
||||
|
||||
assert_ulps_eq!(p0[&a], Gaussian::new(29.205220, 7.194481), epsilon = 1e-6);
|
||||
assert_ulps_eq!(
|
||||
p0[&a],
|
||||
Gaussian::from_ms(29.205220, 7.194481),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
|
||||
let observed = h.batches[1].skills[&a].forward.sigma;
|
||||
let gamma: f64 = 0.15 * 25.0 / 3.0;
|
||||
@@ -496,7 +504,7 @@ mod tests {
|
||||
priors.insert(
|
||||
agent,
|
||||
Player::new(
|
||||
Gaussian::new(25.0, 25.0 / 3.0),
|
||||
Gaussian::from_ms(25.0, 25.0 / 3.0),
|
||||
25.0 / 6.0,
|
||||
0.15 * 25.0 / 3.0,
|
||||
),
|
||||
@@ -509,12 +517,12 @@ mod tests {
|
||||
|
||||
assert_ulps_eq!(
|
||||
h1.batches[0].skills[&a].posterior(),
|
||||
Gaussian::new(22.904409, 6.010330),
|
||||
Gaussian::from_ms(22.904409, 6.010330),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
h1.batches[0].skills[&c].posterior(),
|
||||
Gaussian::new(25.110318, 5.866311),
|
||||
Gaussian::from_ms(25.110318, 5.866311),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
|
||||
@@ -522,12 +530,12 @@ mod tests {
|
||||
|
||||
assert_ulps_eq!(
|
||||
h1.batches[0].skills[&a].posterior(),
|
||||
Gaussian::new(25.000000, 5.419212),
|
||||
Gaussian::from_ms(25.000000, 5.419212),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
h1.batches[0].skills[&c].posterior(),
|
||||
Gaussian::new(25.000000, 5.419212),
|
||||
Gaussian::from_ms(25.000000, 5.419212),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
|
||||
@@ -544,7 +552,11 @@ mod tests {
|
||||
for agent in [a, b, c] {
|
||||
priors.insert(
|
||||
agent,
|
||||
Player::new(Gaussian::new(25.0, 25.0 / 3.0), 25.0 / 6.0, 25.0 / 300.0),
|
||||
Player::new(
|
||||
Gaussian::from_ms(25.0, 25.0 / 3.0),
|
||||
25.0 / 6.0,
|
||||
25.0 / 300.0,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -554,12 +566,12 @@ mod tests {
|
||||
|
||||
assert_ulps_eq!(
|
||||
h2.batches[2].skills[&a].posterior(),
|
||||
Gaussian::new(22.903522, 6.011017),
|
||||
Gaussian::from_ms(22.903522, 6.011017),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
h2.batches[2].skills[&c].posterior(),
|
||||
Gaussian::new(25.110702, 5.866811),
|
||||
Gaussian::from_ms(25.110702, 5.866811),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
|
||||
@@ -567,12 +579,12 @@ mod tests {
|
||||
|
||||
assert_ulps_eq!(
|
||||
h2.batches[2].skills[&a].posterior(),
|
||||
Gaussian::new(24.998668, 5.420053),
|
||||
Gaussian::from_ms(24.998668, 5.420053),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
h2.batches[2].skills[&c].posterior(),
|
||||
Gaussian::new(25.000532, 5.419827),
|
||||
Gaussian::from_ms(25.000532, 5.419827),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
}
|
||||
@@ -598,7 +610,11 @@ mod tests {
|
||||
for agent in [a, b, c] {
|
||||
priors.insert(
|
||||
agent,
|
||||
Player::new(Gaussian::new(25.0, 25.0 / 3.0), 25.0 / 6.0, 25.0 / 300.0),
|
||||
Player::new(
|
||||
Gaussian::from_ms(25.0, 25.0 / 3.0),
|
||||
25.0 / 6.0,
|
||||
25.0 / 300.0,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -617,12 +633,12 @@ mod tests {
|
||||
|
||||
assert_ulps_eq!(
|
||||
lc[&a][aj_e - 1].1,
|
||||
Gaussian::new(24.998668, 5.420053),
|
||||
Gaussian::from_ms(24.998668, 5.420053),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
lc[&c][cj_e - 1].1,
|
||||
Gaussian::new(25.000532, 5.419827),
|
||||
Gaussian::from_ms(25.000532, 5.419827),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
}
|
||||
@@ -659,17 +675,17 @@ mod tests {
|
||||
|
||||
assert_ulps_eq!(
|
||||
h.batches[0].skills[&a].posterior(),
|
||||
Gaussian::new(25.000267, 5.419381),
|
||||
Gaussian::from_ms(25.000267, 5.419381),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
h.batches[0].skills[&b].posterior(),
|
||||
Gaussian::new(24.999465, 5.419425),
|
||||
Gaussian::from_ms(24.999465, 5.419425),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
h.batches[2].skills[&b].posterior(),
|
||||
Gaussian::new(25.000532, 5.419696),
|
||||
Gaussian::from_ms(25.000532, 5.419696),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
}
|
||||
@@ -749,17 +765,17 @@ mod tests {
|
||||
|
||||
assert_ulps_eq!(
|
||||
h.batches[0].skills[&a].posterior(),
|
||||
Gaussian::new(4.084902, 5.106919),
|
||||
Gaussian::from_ms(4.084902, 5.106919),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
h.batches[0].skills[&c].posterior(),
|
||||
Gaussian::new(-0.533029, 5.106919),
|
||||
Gaussian::from_ms(-0.533029, 5.106919),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
h.batches[2].skills[&e].posterior(),
|
||||
Gaussian::new(-3.551872, 5.154569),
|
||||
Gaussian::from_ms(-3.551872, 5.154569),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
}
|
||||
@@ -796,17 +812,17 @@ mod tests {
|
||||
|
||||
assert_ulps_eq!(
|
||||
h.batches[0].skills[&a].posterior(),
|
||||
Gaussian::new(0.000000, 1.300610),
|
||||
Gaussian::from_ms(0.000000, 1.300610),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
h.batches[0].skills[&b].posterior(),
|
||||
Gaussian::new(0.000000, 1.300610),
|
||||
Gaussian::from_ms(0.000000, 1.300610),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
h.batches[2].skills[&b].posterior(),
|
||||
Gaussian::new(0.000000, 1.300610),
|
||||
Gaussian::from_ms(0.000000, 1.300610),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
|
||||
@@ -833,22 +849,22 @@ mod tests {
|
||||
|
||||
assert_ulps_eq!(
|
||||
h.batches[0].skills[&a].posterior(),
|
||||
Gaussian::new(0.000000, 0.931236),
|
||||
Gaussian::from_ms(0.000000, 0.931236),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
h.batches[3].skills[&a].posterior(),
|
||||
Gaussian::new(0.000000, 0.931236),
|
||||
Gaussian::from_ms(0.000000, 0.931236),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
h.batches[3].skills[&b].posterior(),
|
||||
Gaussian::new(0.000000, 0.931236),
|
||||
Gaussian::from_ms(0.000000, 0.931236),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
h.batches[5].skills[&b].posterior(),
|
||||
Gaussian::new(0.000000, 0.931236),
|
||||
Gaussian::from_ms(0.000000, 0.931236),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
}
|
||||
@@ -885,17 +901,17 @@ mod tests {
|
||||
|
||||
assert_ulps_eq!(
|
||||
h.batches[0].skills[&a].posterior(),
|
||||
Gaussian::new(0.000000, 1.300610),
|
||||
Gaussian::from_ms(0.000000, 1.300610),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
h.batches[0].skills[&b].posterior(),
|
||||
Gaussian::new(0.000000, 1.300610),
|
||||
Gaussian::from_ms(0.000000, 1.300610),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
h.batches[2].skills[&b].posterior(),
|
||||
Gaussian::new(0.000000, 1.300610),
|
||||
Gaussian::from_ms(0.000000, 1.300610),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
|
||||
@@ -922,22 +938,22 @@ mod tests {
|
||||
|
||||
assert_ulps_eq!(
|
||||
h.batches[0].skills[&a].posterior(),
|
||||
Gaussian::new(0.000000, 0.931236),
|
||||
Gaussian::from_ms(0.000000, 0.931236),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
h.batches[3].skills[&a].posterior(),
|
||||
Gaussian::new(0.000000, 0.931236),
|
||||
Gaussian::from_ms(0.000000, 0.931236),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
h.batches[3].skills[&b].posterior(),
|
||||
Gaussian::new(0.000000, 0.931236),
|
||||
Gaussian::from_ms(0.000000, 0.931236),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
h.batches[5].skills[&b].posterior(),
|
||||
Gaussian::new(0.000000, 0.931236),
|
||||
Gaussian::from_ms(0.000000, 0.931236),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
}
|
||||
@@ -1214,22 +1230,22 @@ mod tests {
|
||||
|
||||
assert_ulps_eq!(
|
||||
lc[&a][0].1,
|
||||
Gaussian::new(5.537659, 4.758722),
|
||||
Gaussian::from_ms(5.537659, 4.758722),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
lc[&b][0].1,
|
||||
Gaussian::new(-0.830127, 5.239568),
|
||||
Gaussian::from_ms(-0.830127, 5.239568),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
lc[&a][1].1,
|
||||
Gaussian::new(1.792277, 4.099566),
|
||||
Gaussian::from_ms(1.792277, 4.099566),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
assert_ulps_eq!(
|
||||
lc[&b][1].1,
|
||||
Gaussian::new(4.845533, 3.747616),
|
||||
Gaussian::from_ms(4.845533, 3.747616),
|
||||
epsilon = 1e-6
|
||||
);
|
||||
|
||||
|
||||
15
src/lib.rs
15
src/lib.rs
@@ -31,18 +31,9 @@ pub const ITERATIONS: usize = 30;
|
||||
|
||||
const SQRT_TAU: f64 = 2.5066282746310002;
|
||||
|
||||
pub const N01: Gaussian = Gaussian {
|
||||
mu: 0.0,
|
||||
sigma: 1.0,
|
||||
};
|
||||
pub const N00: Gaussian = Gaussian {
|
||||
mu: 0.0,
|
||||
sigma: 0.0,
|
||||
};
|
||||
pub const N_INF: Gaussian = Gaussian {
|
||||
mu: 0.0,
|
||||
sigma: f64::INFINITY,
|
||||
};
|
||||
pub const N01: Gaussian = Gaussian::from_ms(0.0, 1.0);
|
||||
pub const N00: Gaussian = Gaussian::from_ms(0.0, 0.0);
|
||||
pub const N_INF: Gaussian = Gaussian::from_ms(0.0, f64::INFINITY);
|
||||
|
||||
#[derive(Copy, Clone, Default, PartialEq, PartialOrd, Eq, Ord, Hash, Debug)]
|
||||
pub struct Index(usize);
|
||||
|
||||
Reference in New Issue
Block a user