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}