Skip to main content

SnakeEnv

Struct SnakeEnv 

Source
pub struct SnakeEnv {
    pub width: i32,
    pub height: i32,
    pub snakes: Vec<Snake>,
    pub num_agents: usize,
    pub food: Position,
    pub episode: usize,
    pub steps: usize,
    pub max_steps: usize,
    pub done: bool,
    pub rng: StdRng,
}
Expand description

Multi-agent Snake environment.

§Snapshot semantics

clone_state / restore_state capture every visible env field (grid, snake bodies, food location, score, step count, done flag) and the env’s owned RNG. Because the RNG is part of the snapshot, restoring and re-stepping replays the identical random stream: a food respawn after restore_state lands in the same cell as the original trajectory, so round-trips are fully reproducible (including trajectories that eat food).

Fields§

§width: i32

Grid width

§height: i32

Grid height

§snakes: Vec<Snake>

All snakes

§num_agents: usize

Number of agents

§food: Position

Food position

§episode: usize

Episode counter

§steps: usize

Step counter

§max_steps: usize

Maximum steps per episode

§done: bool

Done flag

§rng: StdRng

Owned RNG for food spawning. Captured by clone_state so that restore_state + step reproduces the exact same trajectory.

Implementations§

Source§

impl SnakeEnv

Source

pub fn new_multi(width: i32, height: i32, num_agents: usize) -> Self

Create new snake environment with specified number of agents

Source

pub fn new_multi_with_seed( width: i32, height: i32, num_agents: usize, seed: u64, ) -> Self

Create new snake environment with a specific RNG seed.

The seed controls food placement. Two envs constructed with the same seed and stepped with the same actions produce identical trajectories.

Source

pub fn new(width: i32, height: i32) -> Self

Create new single-agent snake environment (for backward compatibility)

Source

pub fn reset(&mut self)

Reset environment to initial state

Source

pub fn step_multi(&mut self, actions: &[i64]) -> StepResult

Execute multi-agent step with actions for all snakes Returns a single StepResult with summed rewards (for backward compatibility) Use step_multi_agents for per-agent rewards

Source

pub fn step_multi_agents(&mut self, actions: &[i64]) -> (Vec<f32>, bool, bool)

Execute multi-agent step with per-agent rewards Returns individual rewards for each snake

Source

pub fn step(&mut self, action: i64) -> StepResult

Execute single-agent step (for backward compatibility)

Source

pub fn get_grid_observation(&self, snake_id: usize) -> Vec<f32>

Get grid-based observation for a specific snake

Returns a multi-channel grid representation:

  • Channel 0: Own snake body (1.0 where body is)
  • Channel 1: Own snake head (1.0 at head position)
  • Channel 2: Other snakes (1.0 where other snakes are)
  • Channel 3: Food (1.0 at food position)
  • Channel 4: Walls (1.0 at boundaries)

Flattened as [C0_pixels…, C1_pixels…, C2_pixels…, …]

Source

pub fn get_observation(&self) -> Vec<f32>

Get current observation (for first snake, backward compatibility)

Source

pub fn render(&self) -> GameState

Render current game state

Trait Implementations§

Source§

impl Clone for SnakeEnv

Source§

fn clone(&self) -> SnakeEnv

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SnakeEnv

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Environment for SnakeEnv

Source§

type Action = i64

Action type accepted by Environment::step. Read more
Source§

type State = SnakeEnvState

Snapshot type for this env. For fully deterministic envs without internal RNG, this is the complete env state and restore_state reproduces every subsequent step exactly. For envs that consume an internal RNG (e.g. ball serve direction, food placement), the snapshot captures the simulation step but not the RNG; see the env-level documentation for which fields are preserved. Read more
Source§

fn reset(&mut self)

Reset the environment and return initial observation
Source§

fn get_observation(&self) -> Vec<f32>

Get the current observation
Source§

fn step(&mut self, action: i64) -> StepResult

Step the environment with an action
Source§

fn observation_space(&self) -> SpaceInfo

Get the observation space dimensions
Source§

fn action_space(&self) -> SpaceInfo

Get the action space dimensions
Source§

fn render(&self) -> Vec<u8>

Render the current environment state
Source§

fn close(&mut self)

Close the environment
Source§

fn clone_state(&self) -> SnakeEnvState

Snapshot the current env state for later restoration. Read more
Source§

fn restore_state(&mut self, state: &SnakeEnvState)

Restore the env to a previously-snapshotted state. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more