Spaces:
Sleeping
Sleeping
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))
|