use crate::prelude::*;
use beet_core::prelude::*;
#[derive(Clone, Component)]
pub struct QTableEnv<S: StateSpace + Clone, A: ActionSpace + Clone> {
outcomes: HashMap<(S, A), StepOutcome<S>>,
}
impl<S: StateSpace + Clone, A: ActionSpace + Clone> QTableEnv<S, A> {
pub fn new(outcomes: HashMap<(S, A), StepOutcome<S>>) -> Self {
Self { outcomes }
}
}
impl<S: StateSpace + Clone, A: ActionSpace + Clone> Environment
for QTableEnv<S, A>
{
type State = S;
type Action = A;
fn step(
&mut self,
state: &Self::State,
action: &Self::Action,
) -> StepOutcome<Self::State> {
self.outcomes[&(state.clone(), action.clone())].clone()
}
}