Brain-5D-Space / src /embodiment /deterministic.py
github-actions[bot]
Sync: publish Space API fix
5e0b58b
Raw History Blame Contribute Delete
1.48 kB
"""Deterministic environment used for the first Alpha.7 loop proof."""
from __future__ import annotations
from dataclasses import dataclass
from .environment import EnvironmentAdapter
from .models import ActionCommand, EnvironmentKind, EnvironmentObservation
@dataclass(slots=True)
class DeterministicTargetEnvironment(EnvironmentAdapter):
"""One-dimensional target task with deterministic seeded reset."""
target: int = 3
position: int = 0
tick: int = 0
@property
def environment_id(self) -> str:
return "deterministic-target-v1"
@property
def kind(self) -> EnvironmentKind:
return EnvironmentKind.SIMULATED
def reset(self, seed: int | None = None) -> EnvironmentObservation:
self.position = 0 if seed is None else seed % 2
self.tick = 0
return self._observation(0.0)
def step(self, action: ActionCommand) -> EnvironmentObservation:
self.tick += 1
if action.action == "right":
self.position += 1
elif action.action == "left":
self.position -= 1
reward = 1.0 if self.position == self.target else 0.0
return self._observation(reward)
def _observation(self, reward: float) -> EnvironmentObservation:
return EnvironmentObservation(
tick=self.tick,
state={"position": self.position, "target": self.target},
reward=reward,
terminated=self.position == self.target,
)