TrafficSimulator is an advanced Unity-based traffic management system that implements Proximal Policy Optimization (PPO) reinforcement learning algorithms for dynamic traffic signal timing optimization. The project compares ML-driven traffic control against traditional static timing controllers to demonstrate improved traffic flow efficiency.
- ML-Agents Integration: PPO-based reinforcement learning for intelligent traffic signal control
- Static vs Dynamic Comparison: Built-in comparison between traditional fixed-timing and ML-adaptive controllers
- Comprehensive Data Logging: CSV-based logging system for detailed traffic analytics
- Real-time Visualization: Unity-based 3D traffic simulation with visual feedback
- Performance Analysis: Python-based analysis tools with statistical comparisons and visualizations
- Configurable Parameters: Multiple YAML configurations for different training scenarios
TrafficSimulator/
βββ Assets/
β βββ _Scripts/ # Core C# scripts
β β βββ SignalTimingAlgo/ # ML and static signal timing algorithms
β β βββ RuntimeData/ # Data calculation and tracking
β β βββ Managers/ # Game and object pool managers
β β βββ Vehicles/ # Vehicle controller and AI
β β βββ Road/ # Road network and graph generation
β βββ configs/ # ML-Agents training configurations
β βββ Scenes/ # Unity scene files
β βββ Prefabs/ # Reusable game objects
βββ Analysis/ # Python analysis scripts and results
βββ requirements.txt # Python dependencies
βββ README.md
- Unity 2022.3 LTS or later
- ML-Agents Package 2.0+ (included via Package Manager)
- Python 3.8+ (preferred 3.9)
- ML-Agents 0.28 (see
requirements.txt)
pip install -r requirements.txt-
Clone the repository:
git clone https://github.com/CuriosityKilledTheCache/TrafficSimulator.git cd TrafficSimulator -
Open in Unity:
- Launch Unity Hub
- Click "Add" and select the cloned directory
- Open the project (Unity will import packages automatically)
-
Install ML-Agents Package:
- Window β Package Manager
- Add package from git URL:
com.unity.ml-agents
-
Create virtual environment:
python -m venv traffic_env source traffic_env/bin/activate # On Windows: traffic_env\Scripts\activate
-
Install dependencies:
pip install -r requirements.txt
- Open the Main scene:
Assets/Scenes/Main.unity - Configure training: Edit
Assets/configs/ppo-traffic.yamlif needed - Start training:
mlagents-learn Assets/configs/ppo-traffic.yaml --run-id traffic_experiment_1
- Run Unity: Press Play in Unity Editor
- Run with inference mode change Behaviour Parameters of all 4-way-type-1 objects, also drag the trained file in model field
- Monitor real-time performance via Unity's inspector
- CSV logs are automatically generated in
Assets/results/
- PPO-based agent for dynamic signal timing
- Continuous action space for green light duration control
- Multi-metric reward system (throughput, waiting time, fuel consumption)
- Real-time CSV logging for performance analysis
- Traffic flow metrics calculation
- Vehicle tracking across intersection legs
- Wait time and throughput monitoring
- Data interface for ML agent observations
- Lightweight logging system for traffic data
- Episode, interval, and reward logging
- Automatic file management with timestamps
- Python-based comparison framework
- Statistical analysis (ML vs Static performance)
- Visualization generation (charts, dashboards, heatmaps)
- Performance metrics calculation
The project includes several pre-configured training setups:
behaviors:
TrafficSignalAgent:
trainer_type: ppo
hyperparameters:
batch_size: 128
buffer_size: 2048
learning_rate: 3.0e-4
max_steps: 500000
time_horizon: 64- Larger batch sizes for stable training
- Extended training duration (2M steps)
- Fine-tuned hyperparameters for traffic scenarios
fourWay1.yaml was used for training
- Generate training data by running both ML and static controllers
- Execute analysis script:
cd Analysis/ python analyze_stats.py
Based on recent analysis runs:
- ML Agent Total Vehicles: 660.95 (2.58% improvement over static)
- Vehicles Waiting Reduction: 9.07% improvement
- Statistical significance demonstrated across multiple metrics
episode_performance_comparison.png- Episode-level performance chartstraffic_signal_dashboard.png- Comprehensive performance dashboardperformance_comparison_summary.csv- Statistical summaryqueue_length_comparison_*.png- Queue analysis charts
This simulator is designed for:
- Traffic engineering research
- Reinforcement learning algorithm testing
- Urban planning optimization
- Comparative analysis of traffic control strategies
- Academic studies on intelligent transportation systems
- Extend
IntersectionDatastruct inIntersectionDataCalculator.cs - Update CSV headers in
CsvLogger.cs - Modify analysis scripts to include new metrics
- Edit
MLSignalTimingOptimizationSO.cs - Implement new reward calculation logic
- Update observation space if needed
- Create new YAML config in
Assets/configs/ - Adjust network architecture and hyperparameters
- Run training with new configuration
- ML-Agents not found: Ensure Python environment is activated
- Training not starting: Check YAML configuration syntax
- Performance issues: Reduce simulation speed or batch size
- CSV files empty: Verify logging initialization in scripts
- Reduce visual quality during training
- Disable unnecessary UI elements
- Use smaller buffer sizes for faster iteration
- Adjust logging frequency to reduce I/O overhead
- Fork the repository
- Create feature branch:
git checkout -b feature/new-algorithm - Commit changes:
git commit -am 'Add new traffic algorithm' - Push to branch:
git push origin feature/new-algorithm - Submit Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Unity ML-Agents Team for the reinforcement learning framework
- Original repository by ZennoZenith for the foundational traffic simulation
- Unity Technologies for the Universal Render Pipeline and development tools