Dự án này sử dụng Học Tăng Cường (Reinforcement Learning - RL) để tối ưu hóa điều khiển đèn giao thông trong môi trường mô phỏng SUMO. Hệ thống có khả năng tự động sinh ra các kịch bản giao thông thích ứng (adaptive scenarios) với nhiều loại phương tiện khác nhau.
Thư mục làm việc chính: RandomGeneratedVehicles/
sumo_env.py: Môi trường kết nối giữa SUMO và RL Model (theo chuẩn Gymnasium). Chịu trách nhiệm gửi lệnh điều khiển đèn và nhận dữ liệu cảm biến.generate_traffic.py: Script tự động tạo fileroutes.rou.xml. Nó sinh ra ngẫu nhiên các loại xe (xe con, xe buýt, xe tải, xe máy) với tham số thực tế.train.py: Script huấn luyện cơ bản (chạy 1 môi trường). Dùng để test code hoặc debug.train_parallel.py: Script huấn luyện song song (Parallel Training) dùng thuật toán PPO. Tận dụng đa nhân CPU để huấn luyện nhanh gấp nhiều lần.preview_scenario.py: Script để xem trước 1 kịch bản mô phỏng trên giao diện SUMO-GUI mà không cần chạy training.rl_agent.py: Khung sườn (Skeleton) cho agent RL (hiện tạitrain_parallel.pydùng thư việnstable-baselines3nên file này chỉ để tham khảo cho việc custom sau này).
Yêu cầu: Python 3.8+, SUMO 1.18+ đã được cài đặt và biến môi trường SUMO_HOME đã được thiết lập.
Cài đặt các thư viện Python cần thiết:
pip install -r requirements.txtNếu muốn dùng GPU cho PPO (PyTorch):
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121Để kiểm tra xem kịch bản giao thông được sinh ra như thế nào, chạy:
python preview_scenario.py- Cửa sổ SUMO sẽ hiện lên. Bấm nút Play (tam giác xanh) để chạy.
- Script này đã được chỉnh chậm lại (delay 50ms) để mắt thường dễ quan sát xe cộ.
Để tận dụng CPU nhiều nhân (ví dụ 20 core), chạy lệnh sau:
python train_parallel.py --steps 100000 --cpu 16--steps: Tổng số bước huấn luyện (ví dụ 10 triệu thì gõ 10000000).--cpu: Số lượng môi trường chạy song song (nên để nhỏ hơn số luồng CPU của bạn một chút, ví dụ máy 28 thread thì để 20-24).--mode: Chọn chế độ điều khiển:phase_selection: Model chọn pha đèn tiếp theo (Mặc định).time_adjust: Model tăng/giảm thời gian xanh.
Kết quả huấn luyện (Model) sẽ được lưu thành file ppo_traffic_final.zip.
Chỉ dùng để debug lỗi:
python train.py --episodes 5 --gui- Thêm cờ
--guinếu muốn xem giao diện (sẽ rất chậm).
Quy trình chuẩn để phát triển và triển khai Model RL của bạn:
Chạy trên môi trường song song để tiết kiệm thời gian.
# Chạy 20 CPU, 10 triệu bước (mất khoảng 2 tiếng)
cd RandomGeneratedVehicles
python train_parallel.py --steps 10000000 --cpu 20- Output: File
ppo_traffic_final.zip(đây là "bộ não" của AI).
Chạy thử "bộ não" này trên môi trường có giao diện để kiểm tra xem nó có thông minh thật không.
# Chạy xem thử 1000 bước
python evaluate_model.py --model ppo_traffic_final- Quan sát:
- AI có ưu tiên làn đường đông xe không?
- AI có ưu tiên Xe Buýt (như config PCU) không?
- Đèn có bị nhấp nháy quá nhanh không?
Nếu kết quả chưa tốt (ví dụ: vẫn còn tắc đường), bạn cần quay lại sửa:
- Sửa Reward: Vào
sumo_env.pychỉnh trọng số.- Muốn ưu tiên giải tỏa tắc nghẽn -> Tăng hệ số
Queuelên 1.5. - Muốn giảm thời gian chờ -> Tăng hệ số
Waitlên 0.2.
- Muốn ưu tiên giải tỏa tắc nghẽn -> Tăng hệ số
- Sửa Input: Thêm thông tin cho AI (ví dụ: vận tốc xe).
- Lặp lại Giai đoạn 1.
- Thay đổi lưu lượng xe: Mở file
generate_traffic.py, sửa tham sốnum_vehicleshoặc hàmgenerate_route_file. - Thay đổi phần thưởng (Reward): Mở file
sumo_env.py, tìm hàmstep(). Hiện tại phần thưởng là âm của tổng thời gian chờ và độ dài hàng đợi (reward = - (queue + wait)).
Lưu ý: Khi chạy train_parallel.py, không nên bật GUI vì sẽ mở hàng chục cửa sổ SUMO cùng lúc gây treo máy.