How muzilyag/snake_ai works
This is a multi-agent snake reinforcement-learning application: it runs parallel game environments, trains role-specific MAPPO agents, and offers live visualization, metrics, plotting, and checkpoints. The main loop coordinates environment setup, action selection, simulation, rollout collection, and training. The native engine separates simulation systems for physics, radar observations, and rewards. Source excerpts establish the main Python wiring and some native dependencies; the Python-to-native runtime connection and several unsampled subsystem details are not fully shown, so those links are omitted or marked unverified.
Main entry points: main.py Training loop · vec_env.cpp Vector engine · actor.py MAPPO agent · env_wrapper.py Vector environment
Components 21
Run coordination
- Training loop
main.py - Settings
src/config.py
MAPPO learning
- MAPPO agent
src/agents/actor.py - Actor-critic models
src/agents/mappo_models.py - Rollout buffer
src/agents/rollout.py - MAPPO trainer
src/agents/mappo_trainer.py
Game simulation
- Vector environment
src/env/env_wrapper.py - Snake entities
src/env/entity.py - Python binding
src/engine/pybind_module.cpp - Vector engine
src/engine/vec_env.cpp - Physics system
src/engine/systems/physics.cpp - Radar system
src/engine/systems/radar.cpp - Reward system
src/engine/systems/rewards.cpp
Visualization and records
- Live renderer
src/ui/renderer.py - Game monitor
src/utils/monitor.py - Metrics logger
src/utils/metrics.py - Metrics plotter
src/plotter.py - Checkpoint manager
src/utils/checkpointer.py - Reward visualizer
src/utils/reward_visualizer.py - Session CSV
Other components
- Operator
Connections 25
- Operator → Training loop: starts
- Training loop → Settings: reads settings
main.py - Training loop → Vector environment: creates and steps
main.py - Training loop → MAPPO agent: creates and queries
main.py - Training loop → MAPPO trainer: dispatches training
main.py - Training loop → Live renderer: renders
main.py - Training loop → Game monitor: updates
main.py - Training loop → Metrics logger: logs metrics
main.py - Training loop → Metrics plotter: opens plots
main.py - Training loop → Checkpoint manager: saves and loads
main.py - Vector environment → Snake entities: uses death reasons
src/env/env_wrapper.py - Vector environment → Python binding: uses native extension
- Python binding → Vector engine: exposes
src/engine/pybind_module.cpp - Vector engine → Physics system: dispatches
src/engine/vec_env.cpp - Vector engine → Radar system: dispatches
src/engine/vec_env.cpp - Vector engine → Reward system: dispatches
src/engine/vec_env.cpp - MAPPO agent → Actor-critic models: uses networks
src/agents/actor.py - MAPPO agent → Rollout buffer: creates buffer
src/agents/actor.py - MAPPO trainer → MAPPO agent: updates parameters
src/agents/mappo_trainer.py - Live renderer → Vector environment: draws world
src/ui/renderer.py - Live renderer → Game monitor: reads statistics
src/ui/renderer.py - Metrics logger → Game monitor: accepts monitor state
src/utils/metrics.py - Metrics logger → Session CSV: writes rows
src/utils/metrics.py - Metrics plotter → Session CSV: reads session data
src/plotter.py - Metrics plotter → Settings: reads team colors
src/plotter.py