Update test to use builder
This commit is contained in:
197
src/history.rs
197
src/history.rs
@@ -116,6 +116,25 @@ pub struct History {
|
|||||||
iterations: usize,
|
iterations: usize,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Default for History {
|
||||||
|
fn default() -> Self {
|
||||||
|
Self {
|
||||||
|
size: 0,
|
||||||
|
batches: Vec::new(),
|
||||||
|
agents: HashMap::new(),
|
||||||
|
time: true,
|
||||||
|
mu: MU,
|
||||||
|
sigma: SIGMA,
|
||||||
|
beta: BETA,
|
||||||
|
gamma: GAMMA,
|
||||||
|
p_draw: P_DRAW,
|
||||||
|
online: false,
|
||||||
|
epsilon: EPSILON,
|
||||||
|
iterations: ITERATIONS,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl History {
|
impl History {
|
||||||
pub fn builder() -> HistoryBuilder {
|
pub fn builder() -> HistoryBuilder {
|
||||||
HistoryBuilder::default()
|
HistoryBuilder::default()
|
||||||
@@ -595,7 +614,7 @@ mod tests {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut h = History::builder().build();
|
let mut h = History::default();
|
||||||
|
|
||||||
h.add_events(composition, results, vec![1, 2, 3], vec![], priors);
|
h.add_events(composition, results, vec![1, 2, 3], vec![], priors);
|
||||||
|
|
||||||
@@ -649,7 +668,7 @@ mod tests {
|
|||||||
priors.insert(k.to_string(), player);
|
priors.insert(k.to_string(), player);
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut h1 = History::builder().build();
|
let mut h1 = History::default();
|
||||||
|
|
||||||
h1.add_events(composition, results, times, vec![], priors);
|
h1.add_events(composition, results, times, vec![], priors);
|
||||||
|
|
||||||
@@ -740,7 +759,7 @@ mod tests {
|
|||||||
priors.insert(k.to_string(), player);
|
priors.insert(k.to_string(), player);
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut h = History::builder().build();
|
let mut h = History::default();
|
||||||
|
|
||||||
h.add_events(composition, results, times, vec![], priors);
|
h.add_events(composition, results, times, vec![], priors);
|
||||||
h.convergence(ITERATIONS, EPSILON, false);
|
h.convergence(ITERATIONS, EPSILON, false);
|
||||||
@@ -774,21 +793,17 @@ mod tests {
|
|||||||
];
|
];
|
||||||
let results = vec![vec![1.0, 0.0], vec![0.0, 1.0], vec![1.0, 0.0]];
|
let results = vec![vec![1.0, 0.0], vec![0.0, 1.0], vec![1.0, 0.0]];
|
||||||
|
|
||||||
let mut h = History::new(
|
let mut h = History::builder()
|
||||||
composition,
|
.mu(25.0)
|
||||||
results,
|
.sigma(25.0 / 3.0)
|
||||||
vec![],
|
.beta(25.0 / 6.0)
|
||||||
vec![],
|
.gamma(25.0 / 300.0)
|
||||||
HashMap::new(),
|
.time(false)
|
||||||
25.0,
|
.build();
|
||||||
25.0 / 3.0,
|
|
||||||
25.0 / 6.0,
|
|
||||||
25.0 / 300.0,
|
|
||||||
0.0,
|
|
||||||
false,
|
|
||||||
);
|
|
||||||
|
|
||||||
let (_step, _i) = h.convergence(ITERATIONS, EPSILON, false);
|
h.add_events(composition, results, vec![], vec![], HashMap::new());
|
||||||
|
|
||||||
|
h.convergence(ITERATIONS, EPSILON, false);
|
||||||
|
|
||||||
assert_eq!(h.batches[2].skills["b"].elapsed, 1);
|
assert_eq!(h.batches[2].skills["b"].elapsed, 1);
|
||||||
assert_eq!(h.batches[2].skills["c"].elapsed, 1);
|
assert_eq!(h.batches[2].skills["c"].elapsed, 1);
|
||||||
@@ -819,19 +834,15 @@ mod tests {
|
|||||||
];
|
];
|
||||||
let results = vec![vec![1.0, 0.0], vec![0.0, 1.0], vec![1.0, 0.0]];
|
let results = vec![vec![1.0, 0.0], vec![0.0, 1.0], vec![1.0, 0.0]];
|
||||||
|
|
||||||
let mut h = History::new(
|
let mut h = History::builder()
|
||||||
composition,
|
.mu(0.0)
|
||||||
results,
|
.sigma(6.0)
|
||||||
vec![],
|
.beta(1.0)
|
||||||
vec![],
|
.gamma(0.0)
|
||||||
HashMap::new(),
|
.time(false)
|
||||||
0.0,
|
.build();
|
||||||
6.0,
|
|
||||||
1.0,
|
h.add_events(composition, results, vec![], vec![], HashMap::new());
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
false,
|
|
||||||
);
|
|
||||||
|
|
||||||
let trueskill_log_evidence = h.log_evidence(false, &vec![]);
|
let trueskill_log_evidence = h.log_evidence(false, &vec![]);
|
||||||
let trueskill_log_evidence_online = h.log_evidence(true, &vec![]);
|
let trueskill_log_evidence_online = h.log_evidence(true, &vec![]);
|
||||||
@@ -904,21 +915,23 @@ mod tests {
|
|||||||
];
|
];
|
||||||
let results = vec![vec![1.0, 0.0], vec![0.0, 1.0], vec![1.0, 0.0]];
|
let results = vec![vec![1.0, 0.0], vec![0.0, 1.0], vec![1.0, 0.0]];
|
||||||
|
|
||||||
let mut h = History::new(
|
let mut h = History::builder()
|
||||||
|
.mu(0.0)
|
||||||
|
.sigma(2.0)
|
||||||
|
.beta(1.0)
|
||||||
|
.gamma(0.0)
|
||||||
|
.time(false)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
h.add_events(
|
||||||
composition.clone(),
|
composition.clone(),
|
||||||
results.clone(),
|
results.clone(),
|
||||||
vec![],
|
vec![],
|
||||||
vec![],
|
vec![],
|
||||||
HashMap::new(),
|
HashMap::new(),
|
||||||
0.0,
|
|
||||||
2.0,
|
|
||||||
1.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
false,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
let (_step, _i) = h.convergence(ITERATIONS, EPSILON, false);
|
h.convergence(ITERATIONS, EPSILON, false);
|
||||||
|
|
||||||
assert_eq!(h.batches[2].skills["b"].elapsed, 1);
|
assert_eq!(h.batches[2].skills["b"].elapsed, 1);
|
||||||
assert_eq!(h.batches[2].skills["c"].elapsed, 1);
|
assert_eq!(h.batches[2].skills["c"].elapsed, 1);
|
||||||
@@ -984,20 +997,6 @@ mod tests {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_only_add_events() {
|
fn test_only_add_events() {
|
||||||
let mut h = History::new(
|
|
||||||
vec![],
|
|
||||||
vec![],
|
|
||||||
vec![],
|
|
||||||
vec![],
|
|
||||||
HashMap::new(),
|
|
||||||
0.0,
|
|
||||||
2.0,
|
|
||||||
1.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
false,
|
|
||||||
);
|
|
||||||
|
|
||||||
let composition = vec![
|
let composition = vec![
|
||||||
vec![vec!["a"], vec!["b"]],
|
vec![vec!["a"], vec!["b"]],
|
||||||
vec![vec!["a"], vec!["c"]],
|
vec![vec!["a"], vec!["c"]],
|
||||||
@@ -1005,6 +1004,14 @@ mod tests {
|
|||||||
];
|
];
|
||||||
let results = vec![vec![1.0, 0.0], vec![0.0, 1.0], vec![1.0, 0.0]];
|
let results = vec![vec![1.0, 0.0], vec![0.0, 1.0], vec![1.0, 0.0]];
|
||||||
|
|
||||||
|
let mut h = History::builder()
|
||||||
|
.mu(0.0)
|
||||||
|
.sigma(2.0)
|
||||||
|
.beta(1.0)
|
||||||
|
.gamma(0.0)
|
||||||
|
.time(false)
|
||||||
|
.build();
|
||||||
|
|
||||||
h.add_events(
|
h.add_events(
|
||||||
composition.clone(),
|
composition.clone(),
|
||||||
results.clone(),
|
results.clone(),
|
||||||
@@ -1013,7 +1020,7 @@ mod tests {
|
|||||||
HashMap::new(),
|
HashMap::new(),
|
||||||
);
|
);
|
||||||
|
|
||||||
let (_step, _i) = h.convergence(ITERATIONS, EPSILON, false);
|
h.convergence(ITERATIONS, EPSILON, false);
|
||||||
|
|
||||||
assert_eq!(h.batches[2].skills["b"].elapsed, 1);
|
assert_eq!(h.batches[2].skills["b"].elapsed, 1);
|
||||||
assert_eq!(h.batches[2].skills["c"].elapsed, 1);
|
assert_eq!(h.batches[2].skills["c"].elapsed, 1);
|
||||||
@@ -1081,19 +1088,9 @@ mod tests {
|
|||||||
fn test_log_evidence() {
|
fn test_log_evidence() {
|
||||||
let composition = vec![vec![vec!["a"], vec!["b"]], vec![vec!["b"], vec!["a"]]];
|
let composition = vec![vec![vec!["a"], vec!["b"]], vec![vec!["b"], vec!["a"]]];
|
||||||
|
|
||||||
let mut h = History::new(
|
let mut h = History::builder().time(false).build();
|
||||||
composition.clone(),
|
|
||||||
vec![],
|
h.add_events(composition.clone(), vec![], vec![], vec![], HashMap::new());
|
||||||
vec![],
|
|
||||||
vec![],
|
|
||||||
HashMap::new(),
|
|
||||||
MU,
|
|
||||||
SIGMA,
|
|
||||||
BETA,
|
|
||||||
GAMMA,
|
|
||||||
P_DRAW,
|
|
||||||
false,
|
|
||||||
);
|
|
||||||
|
|
||||||
let p_d_m_2 = h.log_evidence(false, &vec![]).exp() * 2.0;
|
let p_d_m_2 = h.log_evidence(false, &vec![]).exp() * 2.0;
|
||||||
|
|
||||||
@@ -1130,19 +1127,9 @@ mod tests {
|
|||||||
epsilon = 0.00001
|
epsilon = 0.00001
|
||||||
);
|
);
|
||||||
|
|
||||||
let mut h = History::new(
|
let mut h = History::builder().time(false).build();
|
||||||
composition,
|
|
||||||
vec![],
|
h.add_events(composition, vec![], vec![], vec![], HashMap::new());
|
||||||
vec![],
|
|
||||||
vec![],
|
|
||||||
HashMap::new(),
|
|
||||||
MU,
|
|
||||||
SIGMA,
|
|
||||||
BETA,
|
|
||||||
GAMMA,
|
|
||||||
P_DRAW,
|
|
||||||
true,
|
|
||||||
);
|
|
||||||
|
|
||||||
assert_ulps_eq!(
|
assert_ulps_eq!(
|
||||||
((0.5f64 * 0.1765).ln() / 2.0).exp(),
|
((0.5f64 * 0.1765).ln() / 2.0).exp(),
|
||||||
@@ -1160,18 +1147,19 @@ mod tests {
|
|||||||
];
|
];
|
||||||
let results = vec![vec![1.0, 0.0], vec![0.0, 1.0], vec![1.0, 0.0]];
|
let results = vec![vec![1.0, 0.0], vec![0.0, 1.0], vec![1.0, 0.0]];
|
||||||
|
|
||||||
let mut h = History::new(
|
let mut h = History::builder()
|
||||||
|
.mu(0.0)
|
||||||
|
.sigma(2.0)
|
||||||
|
.beta(1.0)
|
||||||
|
.gamma(0.0)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
h.add_events(
|
||||||
composition.clone(),
|
composition.clone(),
|
||||||
results.clone(),
|
results.clone(),
|
||||||
vec![0, 10, 20],
|
vec![0, 10, 20],
|
||||||
vec![],
|
vec![],
|
||||||
HashMap::new(),
|
HashMap::new(),
|
||||||
0.0,
|
|
||||||
2.0,
|
|
||||||
1.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
false,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
h.convergence(ITERATIONS, EPSILON, false);
|
h.convergence(ITERATIONS, EPSILON, false);
|
||||||
@@ -1259,18 +1247,19 @@ mod tests {
|
|||||||
vec![vec!["b"], vec!["c"]],
|
vec![vec!["b"], vec!["c"]],
|
||||||
];
|
];
|
||||||
|
|
||||||
let mut h = History::new(
|
let mut h = History::builder()
|
||||||
|
.mu(0.0)
|
||||||
|
.sigma(2.0)
|
||||||
|
.beta(1.0)
|
||||||
|
.gamma(0.0)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
h.add_events(
|
||||||
composition.clone(),
|
composition.clone(),
|
||||||
vec![],
|
vec![],
|
||||||
vec![0, 10, 20],
|
vec![0, 10, 20],
|
||||||
vec![],
|
vec![],
|
||||||
HashMap::new(),
|
HashMap::new(),
|
||||||
0.0,
|
|
||||||
2.0,
|
|
||||||
1.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
false,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
h.convergence(ITERATIONS, EPSILON, false);
|
h.convergence(ITERATIONS, EPSILON, false);
|
||||||
@@ -1350,19 +1339,15 @@ mod tests {
|
|||||||
let composition = vec![vec![vec!["a"], vec!["b"]], vec![vec!["b"], vec!["a"]]];
|
let composition = vec![vec![vec!["a"], vec!["b"]], vec![vec!["b"], vec!["a"]]];
|
||||||
let weights = vec![vec![vec![5.0], vec![4.0]], vec![vec![5.0], vec![4.0]]];
|
let weights = vec![vec![vec![5.0], vec![4.0]], vec![vec![5.0], vec![4.0]]];
|
||||||
|
|
||||||
let mut h = History::new(
|
let mut h = History::builder()
|
||||||
composition.clone(),
|
.mu(2.0)
|
||||||
vec![],
|
.sigma(6.0)
|
||||||
vec![],
|
.beta(1.0)
|
||||||
weights,
|
.gamma(0.0)
|
||||||
HashMap::new(),
|
.time(false)
|
||||||
2.0,
|
.build();
|
||||||
6.0,
|
|
||||||
1.0,
|
h.add_events(composition.clone(), vec![], vec![], weights, HashMap::new());
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
false,
|
|
||||||
);
|
|
||||||
|
|
||||||
let lc = h.learning_curves();
|
let lc = h.learning_curves();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user