Spaces:
Sleeping
Sleeping
| version: "1.0" | |
| name: "TrafficSignalOptimization-v1" | |
| description: > | |
| AI-driven Traffic Signal Optimization for a 4-way urban intersection. | |
| A reinforcement-learning environment that challenges agents to minimise | |
| congestion, reduce average waiting time, respond to emergency vehicles, | |
| and maintain signal stability across three difficulty tiers. | |
| author: "OpenEnv Submission" | |
| tags: | |
| - Reinforcement Learning | |
| - Traffic Control | |
| - Smart Cities | |
| - Safety-Critical | |
| - Emergency Vehicle Priority | |
| licence: MIT | |
| # ───────────────────────────────────────────────────────────────────── | |
| # Environment specification | |
| # ───────────────────────────────────────────────────────────────────── | |
| environment: | |
| class: "env.TrafficEnv" | |
| entry_point: "env:TrafficEnv" | |
| state_space: | |
| type: Dict | |
| keys: | |
| north_cars: | |
| type: Discrete | |
| description: "Queued vehicles in the North lane" | |
| range: [0, max_queue] | |
| south_cars: | |
| type: Discrete | |
| description: "Queued vehicles in the South lane" | |
| range: [0, max_queue] | |
| east_cars: | |
| type: Discrete | |
| description: "Queued vehicles in the East lane" | |
| range: [0, max_queue] | |
| west_cars: | |
| type: Discrete | |
| description: "Queued vehicles in the West lane" | |
| range: [0, max_queue] | |
| waiting_times: | |
| type: "Dict[str, float]" | |
| description: "Cumulative waiting-time pressure per lane (north/south/east/west)" | |
| phase: | |
| type: Discrete | |
| values: [0, 1] | |
| description: "Current green signal: 0 = NS green, 1 = EW green" | |
| emergency_flags: | |
| type: "Dict[str, bool]" | |
| description: "True if an emergency vehicle is present in that lane" | |
| step_count: | |
| type: Discrete | |
| description: "Current step within the episode" | |
| range: [0, max_steps] | |
| action_space: | |
| type: Discrete | |
| n: 2 | |
| actions: | |
| 0: "Keep current signal phase" | |
| 1: "Switch signal phase (NS ↔ EW)" | |
| observation_vector_dim: 14 # flat numpy array for RL frameworks | |
| # Layout: [N, S, E, W queues | N, S, E, W waits | N, S, E, W EV flags | phase, step] | |
| # ───────────────────────────────────────────────────────────────────── | |
| # Reward design (multi-component, clipped to [-1, +1]) | |
| # ───────────────────────────────────────────────────────────────────── | |
| reward: | |
| range: [-1.0, 1.0] | |
| components: | |
| efficiency: | |
| sign: "+" | |
| description: "Vehicles cleared this step (throughput reward)" | |
| congestion: | |
| sign: "-" | |
| description: "Normalised total queue density" | |
| max_queue_penalty: | |
| sign: "-" | |
| description: "Penalty for extreme bottlenecks in any single lane" | |
| switch_penalty: | |
| sign: "-" | |
| description: "Stability constraint to prevent oscillatory signal toggling" | |
| improvement_bonus: | |
| sign: "+" | |
| description: "Bonus for active decongestion progress" | |
| fairness_bonus: | |
| sign: "+" | |
| description: "Reward for maintaining balanced waiting times across all lanes" | |
| starvation_penalty: | |
| sign: "-" | |
| description: "Penalty for phase-duration exceeding starvation limit" | |
| emergency_priority: | |
| sign: "+/-" | |
| description: "Combo of golden-window bonus and delay penalty for EVs" | |
| # ───────────────────────────────────────────────────────────────────── | |
| # Difficulty modes | |
| # ───────────────────────────────────────────────────────────────────── | |
| difficulty_modes: | |
| easy: | |
| arrival_rate: [0, 1] | |
| discharge_rate: [4, 5] | |
| max_queue: 15 | |
| max_steps: 50 | |
| emergency_prob: 0.01 | |
| burst_prob: 0.0 | |
| description: "Stable, balanced traffic. Minimal emergencies. Ideal for learning." | |
| medium: | |
| arrival_rate: [1, 3] | |
| discharge_rate: [3, 5] | |
| max_queue: 25 | |
| max_steps: 100 | |
| emergency_prob: 0.05 | |
| burst_prob: 0.10 | |
| description: "Random traffic bursts, moderate congestion, occasional emergencies." | |
| hard: | |
| arrival_rate: [2, 5] | |
| discharge_rate: [2, 4] | |
| max_queue: 40 | |
| max_steps: 200 | |
| emergency_prob: 0.15 | |
| burst_prob: 0.20 | |
| description: "High-intensity traffic, frequent emergencies, strict fairness constraints." | |
| # ───────────────────────────────────────────────────────────────────── | |
| # Evaluation metrics (returned in info dict on every step) | |
| # ───────────────────────────────────────────────────────────────────── | |
| metrics: | |
| total_cleared: | |
| type: int | |
| description: "Total vehicles discharged from the intersection (episode)" | |
| avg_waiting_time: | |
| type: float | |
| description: "Cumulative wait pressure divided by vehicles cleared" | |
| max_queue_length: | |
| type: int | |
| description: "Peak queue length observed in any lane (episode)" | |
| signal_switch_count: | |
| type: int | |
| description: "Total signal changes (lower = more stable)" | |
| congestion_score: | |
| type: float | |
| range: [0.0, 1.0] | |
| description: "Current normalised total queue depth" | |
| avg_ev_clear_time: | |
| type: float | |
| description: "Average steps taken to clear an emergency vehicle" | |
| fairness_score: | |
| type: float | |
| range: [0.0, 1.0] | |
| description: "Index representing lane-level service balance" | |
| # ───────────────────────────────────────────────────────────────────── | |
| # Baseline agent | |
| # ───────────────────────────────────────────────────────────────────── | |
| baseline: | |
| class: "baseline_agent.RuleBasedAgent" | |
| description: > | |
| Deterministic rule-based agent. Switches based on queue imbalance, | |
| minimum green time, starvation guard, and emergency preemption. | |
| parameters: | |
| min_green_time: 5 | |
| imbalance_threshold: 5 | |
| max_green_time: 15 | |
| emergency_min_green: 2 | |
| # ───────────────────────────────────────────────────────────────────── | |
| # Project files | |
| # ───────────────────────────────────────────────────────────────────── | |
| project_structure: | |
| - env.py: "Core TrafficEnv class" | |
| - tasks.py: "Easy / Medium / Hard configuration dicts" | |
| - baseline_agent.py: "Rule-based baseline agent" | |
| - test_env.py: "Simulation runner and correctness checks" | |
| - openenv.yaml: "This file — environment specification" | |
| - README.md: "Full documentation" | |