Skip to main content

operant_core/
env.rs

1//! Vectorized environment traits for high-performance RL.
2
3use std::fmt::Debug;
4
5/// Log data that environments can return for tracking metrics.
6pub trait LogData: Clone + Debug + Default {
7    /// Merge another log into this one (for aggregation).
8    fn merge(&mut self, other: &Self);
9
10    /// Clear/reset the log counters.
11    fn clear(&mut self);
12
13    /// Get the number of episodes recorded.
14    fn episode_count(&self) -> f32;
15}
16
17/// Trait for vectorized environments with SoA memory layout.
18pub trait VecEnvironment {
19    /// Returns the number of parallel environments.
20    fn num_envs(&self) -> usize;
21
22    /// Returns the observation size per environment.
23    fn observation_size(&self) -> usize;
24
25    /// Returns the number of discrete actions, or None for continuous.
26    fn num_actions(&self) -> Option<usize>;
27
28    /// Reset all environments with deterministic seeding.
29    fn reset(&mut self, seed: u64);
30
31    /// Step all environments (includes auto-reset for done envs).
32    fn step(&mut self, actions: &[f32]);
33
34    /// Write observations to buffer.
35    fn write_observations(&self, buffer: &mut [f32]);
36
37    /// Write rewards to buffer.
38    fn write_rewards(&self, buffer: &mut [f32]);
39
40    /// Write terminal flags to buffer.
41    fn write_terminals(&self, buffer: &mut [u8]);
42
43    /// Write truncation flags to buffer.
44    fn write_truncations(&self, buffer: &mut [u8]);
45}