pub struct ReinforcementLearner {
pub algorithm: RlAlgorithm,
pub q_table: HashMap<StateId, Vec<f64>>,
pub q_table2: HashMap<StateId, Vec<f64>>,
pub n_actions: usize,
pub total_steps: u64,
pub total_episodes: u64,
pub episode_returns: VecDeque<f64>,
pub rng_state: u64,
}Expand description
Tabular reinforcement-learning agent supporting Q-learning, SARSA, and Double Q-learning.
Q-values are stored in a HashMap and initialised lazily to 0.0 on first
access, so memory consumption grows only with the number of visited states.
Fields§
§algorithm: RlAlgorithmThe learning algorithm and its hyper-parameters.
q_table: HashMap<StateId, Vec<f64>>Primary Q-table: q_table[s][a] = Q(s, a).
q_table2: HashMap<StateId, Vec<f64>>Secondary Q-table used only by Double Q-learning.
n_actions: usizeNumber of discrete actions.
total_steps: u64Total environment steps executed via update.
total_episodes: u64Total episodes recorded via start_episode /
end_episode.
episode_returns: VecDeque<f64>Sliding window of episode returns (capped at 1 000 entries).
rng_state: u64Current xorshift64 PRNG state (always non-zero).
Implementations§
Source§impl ReinforcementLearner
impl ReinforcementLearner
Sourcepub fn new(algorithm: RlAlgorithm, n_actions: usize, seed: u64) -> Self
pub fn new(algorithm: RlAlgorithm, n_actions: usize, seed: u64) -> Self
Create a new learner with the given algorithm, action-space size, and random seed.
A seed of 0 is promoted to 1 to satisfy the xorshift64 requirement.
Sourcepub fn select_action(&mut self, state: StateId, policy: &Policy) -> ActionId
pub fn select_action(&mut self, state: StateId, policy: &Policy) -> ActionId
Select an action for state according to policy.
Policy::EpsilonGreedy— random with prob ε, else argmax Q(s, ·).Policy::Greedy— always argmax Q(s, ·).Policy::Random— uniformly random over the action space.
Sourcepub fn update(&mut self, experience: &Experience) -> f64
pub fn update(&mut self, experience: &Experience) -> f64
Apply one temporal-difference update from experience; return the TD
error δ.
Also increments total_steps.
Sourcepub fn batch_update(&mut self, experiences: &[Experience]) -> Vec<f64>
pub fn batch_update(&mut self, experiences: &[Experience]) -> Vec<f64>
Apply TD updates for a slice of experiences in order; return the corresponding TD errors.
Sourcepub fn best_action(&self, state: StateId) -> ActionId
pub fn best_action(&self, state: StateId) -> ActionId
Return the action with the highest Q-value in the primary table.
Falls back to ActionId(0) when the state has never been visited.
Sourcepub fn q_value(&self, state: StateId, action: ActionId) -> f64
pub fn q_value(&self, state: StateId, action: ActionId) -> f64
Return Q(s, a) from the primary table; 0.0 if the pair is unseen.
Sourcepub fn value(&self, state: StateId) -> f64
pub fn value(&self, state: StateId) -> f64
Return V(s) = max_a Q(s, a) from the primary table; 0.0 if unseen.
Sourcepub fn explored_states(&self) -> usize
pub fn explored_states(&self) -> usize
Number of distinct states whose Q-values have been initialised.
Sourcepub fn start_episode(&mut self)
pub fn start_episode(&mut self)
Signal the start of a new episode.
Pushes a placeholder return of 0.0 and increments total_episodes.
Sourcepub fn end_episode(&mut self, total_return: f64)
pub fn end_episode(&mut self, total_return: f64)
Signal the end of the current episode, recording its total return.
Updates the last entry in episode_returns and caps the deque at 1 000
entries (oldest entries are dropped).
Sourcepub fn avg_return(&self, last_n: usize) -> f64
pub fn avg_return(&self, last_n: usize) -> f64
Return the mean episode return over the last last_n episodes.
Returns 0.0 if no episodes have been recorded.
Trait Implementations§
Source§impl Clone for ReinforcementLearner
impl Clone for ReinforcementLearner
Source§fn clone(&self) -> ReinforcementLearner
fn clone(&self) -> ReinforcementLearner
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for ReinforcementLearner
impl RefUnwindSafe for ReinforcementLearner
impl Send for ReinforcementLearner
impl Sync for ReinforcementLearner
impl Unpin for ReinforcementLearner
impl UnsafeUnpin for ReinforcementLearner
impl UnwindSafe for ReinforcementLearner
Blanket Implementations§
impl<T> Allocation for T
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more