File size: 1,215 Bytes
b605d24
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import json
from pathlib import Path

import torch

from traffic_rl.env.traffic_env import TrafficEnv
from traffic_rl.training.trainer import TrainingConfig, train_dqn
from traffic_rl.evaluation.evaluator import evaluate_agent

env_config = {
    "max_steps": 120,
    "arrival_mode": "stochastic",
    "lane_bias": (1.6, 0.8, 1.4, 0.6),
    "peak_rates": (3.8, 2.2, 3.4, 1.5),
    "offpeak_rates": (1.4, 0.9, 1.2, 0.7),
    "peak_duration": 35,
    "cycle_duration": 60,
    "service_rate": 2,
    "ambulance_spawn_prob": 0.08,
    "seed": 42,
}

cfg = TrainingConfig(episodes=80, max_steps=120, batch_size=64, target_sync_interval=10, epsilon_decay=0.97)
env = TrafficEnv(config=env_config)
agent, history = train_dqn(env, cfg)

metrics = evaluate_agent(agent=agent, env_config=env_config, episodes=20)

artifacts = Path("artifacts")
artifacts.mkdir(exist_ok=True)
torch.save(agent.q_network.state_dict(), artifacts / "dqn_state_dict.pt")
(artifacts / "model_metrics.json").write_text(json.dumps(metrics, indent=2), encoding="utf-8")
(artifacts / "model_config.json").write_text(json.dumps(env_config, indent=2), encoding="utf-8")
print(json.dumps({"metrics": metrics, "artifact_dir": str(artifacts)}, indent=2))