Spaces:
Paused
Paused
File size: 1,484 Bytes
5e0b58b | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | """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,
)
|