feat: added a Drift trait and a "default" ConstantDrift implementation
This commit is contained in:
23
src/agent.rs
23
src/agent.rs
@@ -1,23 +1,29 @@
|
||||
use crate::{gaussian::Gaussian, player::Player, N_INF};
|
||||
use crate::{
|
||||
N_INF,
|
||||
drift::{ConstantDrift, Drift},
|
||||
gaussian::Gaussian,
|
||||
player::Player,
|
||||
};
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct Agent {
|
||||
pub player: Player,
|
||||
pub struct Agent<D: Drift = ConstantDrift> {
|
||||
pub player: Player<D>,
|
||||
pub message: Gaussian,
|
||||
pub last_time: i64,
|
||||
}
|
||||
|
||||
impl Agent {
|
||||
impl<D: Drift> Agent<D> {
|
||||
pub(crate) fn receive(&self, elapsed: i64) -> Gaussian {
|
||||
if self.message != N_INF {
|
||||
self.message.forget(self.player.gamma, elapsed)
|
||||
self.message
|
||||
.forget(self.player.drift.variance_delta(elapsed))
|
||||
} else {
|
||||
self.player.prior
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Default for Agent {
|
||||
impl Default for Agent<ConstantDrift> {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
player: Player::default(),
|
||||
@@ -27,7 +33,10 @@ impl Default for Agent {
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn clean<'a, A: Iterator<Item = &'a mut Agent>>(agents: A, last_time: bool) {
|
||||
pub(crate) fn clean<'a, D: Drift + 'a, A: Iterator<Item = &'a mut Agent<D>>>(
|
||||
agents: A,
|
||||
last_time: bool,
|
||||
) {
|
||||
for a in agents {
|
||||
a.message = N_INF;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user