Refactor history

This commit is contained in:
Anders Olsson
2023-10-26 08:18:15 +02:00
parent d8dfbba251
commit e3eebb507c

View File

@@ -267,7 +267,7 @@ impl History {
"(length(weights) > 0) & (length(composition) != length(weights))" "(length(weights) > 0) & (length(composition) != length(weights))"
); );
let mut unique = Vec::with_capacity(10); let mut unique = Vec::with_capacity(100);
let this_agent = composition let this_agent = composition
.iter() .iter()
@@ -331,20 +331,16 @@ impl History {
b.new_forward_info(&self.agents); b.new_forward_info(&self.agents);
} }
let intersect = this_agent for agent in &this_agent {
.iter() if let Some(skill) = b.skills.get_mut(agent) {
.filter(|&agent| b.skills.contains_key(agent)) skill.elapsed =
.cloned() batch::compute_elapsed(self.agents[agent].last_time, b.time);
.collect::<Vec<_>>();
for agent in &intersect { let a = self.agents.get_mut(agent).unwrap();
b.skills.get_mut(agent).unwrap().elapsed =
batch::compute_elapsed(self.agents[agent].last_time, b.time);
let a = self.agents.get_mut(agent).unwrap(); a.last_time = if self.time { b.time } else { i64::MAX };
a.message = b.forward_prior_out(agent);
a.last_time = if self.time { b.time } else { i64::MAX }; }
a.message = b.forward_prior_out(agent);
} }
k += 1; k += 1;
@@ -353,6 +349,7 @@ impl History {
let composition = (i..j) let composition = (i..j)
.map(|e| composition[o[e]].clone()) .map(|e| composition[o[e]].clone())
.collect::<Vec<_>>(); .collect::<Vec<_>>();
let results = if results.is_empty() { let results = if results.is_empty() {
Vec::new() Vec::new()
} else { } else {
@@ -366,15 +363,15 @@ impl History {
}; };
if self.time && self.batches.len() > k && self.batches[k].time == t { if self.time && self.batches.len() > k && self.batches[k].time == t {
let b = &mut self.batches[k]; let batch = &mut self.batches[k];
b.add_events(composition, results, weights, &self.agents); batch.add_events(composition, results, weights, &self.agents);
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);
} }
} else { } else {
let mut batch: Batch = Batch::new(t, self.p_draw); let mut batch: Batch = Batch::new(t, self.p_draw);
@@ -402,20 +399,15 @@ impl History {
b.new_forward_info(&self.agents); b.new_forward_info(&self.agents);
let intersect = this_agent for agent in &this_agent {
.iter() if let Some(skill) = b.skills.get_mut(agent) {
.filter(|&agent| b.skills.contains_key(agent)) skill.elapsed = batch::compute_elapsed(self.agents[agent].last_time, b.time);
.cloned()
.collect::<Vec<_>>();
for agent in &intersect { let a = self.agents.get_mut(agent).unwrap();
b.skills.get_mut(agent).unwrap().elapsed =
batch::compute_elapsed(self.agents[agent].last_time, b.time);
let a = self.agents.get_mut(agent).unwrap(); a.last_time = if self.time { b.time } else { i64::MAX };
a.message = b.forward_prior_out(agent);
a.last_time = if self.time { b.time } else { i64::MAX }; }
a.message = b.forward_prior_out(agent);
} }
k += 1; k += 1;