Dry my eyes
This commit is contained in:
109
src/batch.rs
109
src/batch.rs
@@ -107,94 +107,13 @@ pub struct Batch {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Batch {
|
impl Batch {
|
||||||
pub fn new(
|
pub fn new(time: i64, p_draw: f64) -> Self {
|
||||||
composition: Vec<Vec<Vec<Index>>>,
|
Self {
|
||||||
results: Vec<Vec<f64>>,
|
events: Vec::new(),
|
||||||
weights: Vec<Vec<Vec<f64>>>,
|
skills: HashMap::new(),
|
||||||
time: i64,
|
|
||||||
p_draw: f64,
|
|
||||||
agents: &HashMap<Index, Agent>,
|
|
||||||
) -> Self {
|
|
||||||
assert!(
|
|
||||||
results.is_empty() || results.len() == composition.len(),
|
|
||||||
"TODO: Add a comment here"
|
|
||||||
);
|
|
||||||
assert!(
|
|
||||||
weights.is_empty() || weights.len() == composition.len(),
|
|
||||||
"TODO: Add a comment here"
|
|
||||||
);
|
|
||||||
|
|
||||||
let this_agent = composition
|
|
||||||
.iter()
|
|
||||||
.flatten()
|
|
||||||
.flatten()
|
|
||||||
.collect::<HashSet<_>>();
|
|
||||||
|
|
||||||
let skills = this_agent
|
|
||||||
.iter()
|
|
||||||
.map(|&idx| {
|
|
||||||
let elapsed = compute_elapsed(agents[idx].last_time, time);
|
|
||||||
|
|
||||||
(
|
|
||||||
*idx,
|
|
||||||
Skill {
|
|
||||||
forward: agents[idx].receive(elapsed),
|
|
||||||
elapsed,
|
|
||||||
..Default::default()
|
|
||||||
},
|
|
||||||
)
|
|
||||||
})
|
|
||||||
.collect::<HashMap<_, _>>();
|
|
||||||
|
|
||||||
let events = composition
|
|
||||||
.iter()
|
|
||||||
.enumerate()
|
|
||||||
.map(|(e, event)| {
|
|
||||||
let teams = event
|
|
||||||
.iter()
|
|
||||||
.enumerate()
|
|
||||||
.map(|(t, team)| {
|
|
||||||
let items = team
|
|
||||||
.iter()
|
|
||||||
.map(|&agent| Item {
|
|
||||||
agent,
|
|
||||||
likelihood: N_INF,
|
|
||||||
})
|
|
||||||
.collect::<Vec<_>>();
|
|
||||||
|
|
||||||
Team {
|
|
||||||
items,
|
|
||||||
output: if results.is_empty() {
|
|
||||||
(event.len() - (t + 1)) as f64
|
|
||||||
} else {
|
|
||||||
results[e][t]
|
|
||||||
},
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.collect::<Vec<_>>();
|
|
||||||
|
|
||||||
Event {
|
|
||||||
teams,
|
|
||||||
evidence: 0.0,
|
|
||||||
weights: if weights.is_empty() {
|
|
||||||
Vec::new()
|
|
||||||
} else {
|
|
||||||
weights[e].clone()
|
|
||||||
},
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.collect::<Vec<_>>();
|
|
||||||
|
|
||||||
let mut this = Self {
|
|
||||||
time,
|
time,
|
||||||
events,
|
|
||||||
skills,
|
|
||||||
p_draw,
|
p_draw,
|
||||||
};
|
}
|
||||||
|
|
||||||
this.iteration(0, agents);
|
|
||||||
|
|
||||||
this
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn add_events(
|
pub(crate) fn add_events(
|
||||||
@@ -492,7 +411,9 @@ mod tests {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut batch = Batch::new(
|
let mut batch = Batch::new(0, 0.0);
|
||||||
|
|
||||||
|
batch.add_events(
|
||||||
vec![
|
vec![
|
||||||
vec![vec![a], vec![b]],
|
vec![vec![a], vec![b]],
|
||||||
vec![vec![c], vec![d]],
|
vec![vec![c], vec![d]],
|
||||||
@@ -500,8 +421,6 @@ mod tests {
|
|||||||
],
|
],
|
||||||
vec![vec![1.0, 0.0], vec![0.0, 1.0], vec![1.0, 0.0]],
|
vec![vec![1.0, 0.0], vec![0.0, 1.0], vec![1.0, 0.0]],
|
||||||
vec![],
|
vec![],
|
||||||
0,
|
|
||||||
0.0,
|
|
||||||
&agents,
|
&agents,
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -568,7 +487,9 @@ mod tests {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut batch = Batch::new(
|
let mut batch = Batch::new(0, 0.0);
|
||||||
|
|
||||||
|
batch.add_events(
|
||||||
vec![
|
vec![
|
||||||
vec![vec![a], vec![b]],
|
vec![vec![a], vec![b]],
|
||||||
vec![vec![a], vec![c]],
|
vec![vec![a], vec![c]],
|
||||||
@@ -576,8 +497,6 @@ mod tests {
|
|||||||
],
|
],
|
||||||
vec![vec![1.0, 0.0], vec![0.0, 1.0], vec![1.0, 0.0]],
|
vec![vec![1.0, 0.0], vec![0.0, 1.0], vec![1.0, 0.0]],
|
||||||
vec![],
|
vec![],
|
||||||
0,
|
|
||||||
0.0,
|
|
||||||
&agents,
|
&agents,
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -647,7 +566,9 @@ mod tests {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut batch = Batch::new(
|
let mut batch = Batch::new(0, 0.0);
|
||||||
|
|
||||||
|
batch.add_events(
|
||||||
vec![
|
vec![
|
||||||
vec![vec![a], vec![b]],
|
vec![vec![a], vec![b]],
|
||||||
vec![vec![a], vec![c]],
|
vec![vec![a], vec![c]],
|
||||||
@@ -655,8 +576,6 @@ mod tests {
|
|||||||
],
|
],
|
||||||
vec![vec![1.0, 0.0], vec![0.0, 1.0], vec![1.0, 0.0]],
|
vec![vec![1.0, 0.0], vec![0.0, 1.0], vec![1.0, 0.0]],
|
||||||
vec![],
|
vec![],
|
||||||
0,
|
|
||||||
0.0,
|
|
||||||
&agents,
|
&agents,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -367,17 +367,18 @@ impl History {
|
|||||||
agent.message = b.forward_prior_out(a);
|
agent.message = b.forward_prior_out(a);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
let b = Batch::new(composition, results, weights, t, self.p_draw, &self.agents);
|
let mut batch: Batch = Batch::new(t, self.p_draw);
|
||||||
|
batch.add_events(composition, results, weights, &self.agents);
|
||||||
|
|
||||||
self.batches.insert(k, b);
|
self.batches.insert(k, batch);
|
||||||
|
|
||||||
let b = &self.batches[k];
|
let batch = &self.batches[k];
|
||||||
|
|
||||||
for a in b.skills.keys() {
|
for a in batch.skills.keys() {
|
||||||
let agent = self.agents.get_mut(a).unwrap();
|
let agent = self.agents.get_mut(a).unwrap();
|
||||||
|
|
||||||
agent.last_time = if self.time { t } else { i64::MAX };
|
agent.last_time = if self.time { t } else { i64::MAX };
|
||||||
agent.message = b.forward_prior_out(a);
|
agent.message = batch.forward_prior_out(a);
|
||||||
}
|
}
|
||||||
|
|
||||||
k += 1;
|
k += 1;
|
||||||
|
|||||||
Reference in New Issue
Block a user