burtenshaw's picture
burtenshaw HF Staff
Upload folder using huggingface_hub
fdd14ba verified

Maze Environment

Integration of Maze game with the OpenEnv framework.

Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ RL Training Code (Client)          β”‚
β”‚   MazeEnv.step(action)             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
               β”‚ HTTP
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ FastAPI Server (Docker)            β”‚
β”‚   MazeEnvironment                  β”‚
β”‚     β”œβ”€ Wraps Maze environment      β”‚
β”‚     └─ Agent controls player       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Installation & Usage

Option 1: Local Development (without Docker)

Requirements:

  • Python 3.11+
  • Numpy
from envs.maze_env import MazeEnv, MazeAction

# Start local server manually
# python -m envs.maze_env.server.app

# Connect to local server
env = MazeEnv(base_url="http://localhost:8000")

# Reset environment
result = env.reset()
print(f"Initial state: {result.observation.info_state}")
print(f"Legal actions: {result.observation.legal_actions}")

# Take actions
for _ in range(10):
    action_id = result.observation.legal_actions[0]  # Choose first legal action
    result = env.step(MazeAction(action_id=action_id))
    print(f"Reward: {result.reward}, Done: {result.done}")
    if result.done:
        break

# Cleanup
env.close()

Option 2: Docker (Recommended)

Build Docker image:

cd OpenEnv
docker build -f src/envs/maze_env/server/Dockerfile -t maze-env:latest .

Use with from_docker_image():

from envs.maze_env import MazeEnv, MazeAction

# Automatically starts container
env = MazeEnv.from_docker_image("maze-env:latest")

result = env.reset()
result = env.step(MazeAction(action_id=0))

env.close()  # Stops container

Configuration

Variables

  • maze : Maze as a numpy array saved in mazearray.py

Example

docker run -p 8000:8000 maze-env:latest

API Reference

MazeAction

@dataclass
class MazeAction(Action):
    action: int                        # Action to be taken

MazeObservation

@dataclass
class MazeObservation(Observation):
    position: List[int]  # [row, col]
    total_reward: float  # Total reward
    legal_actions: List[int] = field(default_factory=list)  # Legal action based on the current position

MazeState

@dataclass
class MazeState(State):
    episode_id: str     # Episode
    step_count: int     # Number of steps
    done: bool = False  # Solve status

References