Spaces:
Sleeping
Sleeping
Update env.py
Browse files
env.py
CHANGED
|
@@ -153,11 +153,11 @@ class TrafficEnv:
|
|
| 153 |
"avg_waiting_time": 0.0,
|
| 154 |
"max_queue_length": 0,
|
| 155 |
"signal_switch_count": 0,
|
| 156 |
-
"congestion_score":
|
| 157 |
"avg_ev_clear_time": 0.0,
|
| 158 |
"total_ev_cleared": 0,
|
| 159 |
"total_ev_penalty": 0.0,
|
| 160 |
-
"fairness_score": 1.0,
|
| 161 |
}
|
| 162 |
|
| 163 |
# Track waiting steps for emergency vehicles and phase stability
|
|
@@ -247,9 +247,10 @@ class TrafficEnv:
|
|
| 247 |
total_wait_sum = sum(self.waiting_times.values())
|
| 248 |
denom = max(1, self.total_cleared)
|
| 249 |
self._metrics["avg_waiting_time"] = total_wait_sum / denom
|
| 250 |
-
self._metrics["congestion_score"] = (
|
| 251 |
-
sum(self.queues.values()) / (self.max_queue * len(LANES))
|
| 252 |
-
|
|
|
|
| 253 |
|
| 254 |
# ── 7. Calculate reward ───────────────────────────────────────
|
| 255 |
post_total_queue = sum(self.queues.values())
|
|
@@ -265,7 +266,12 @@ class TrafficEnv:
|
|
| 265 |
# Simple fairness: (1 - variance of wait times / threshold)
|
| 266 |
wait_vals = list(self.waiting_times.values())
|
| 267 |
if max(wait_vals) > 0:
|
| 268 |
-
self._metrics["fairness_score"] =
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 269 |
|
| 270 |
# ── 9. Termination ────────────────────────────────────────────
|
| 271 |
done = self.step_count >= self.max_steps
|
|
|
|
| 153 |
"avg_waiting_time": 0.0,
|
| 154 |
"max_queue_length": 0,
|
| 155 |
"signal_switch_count": 0,
|
| 156 |
+
"congestion_score": 1e-5,
|
| 157 |
"avg_ev_clear_time": 0.0,
|
| 158 |
"total_ev_cleared": 0,
|
| 159 |
"total_ev_penalty": 0.0,
|
| 160 |
+
"fairness_score": 1.0 - 1e-5,
|
| 161 |
}
|
| 162 |
|
| 163 |
# Track waiting steps for emergency vehicles and phase stability
|
|
|
|
| 247 |
total_wait_sum = sum(self.waiting_times.values())
|
| 248 |
denom = max(1, self.total_cleared)
|
| 249 |
self._metrics["avg_waiting_time"] = total_wait_sum / denom
|
| 250 |
+
self._metrics["congestion_score"] = float(np.clip(
|
| 251 |
+
sum(self.queues.values()) / (self.max_queue * len(LANES)),
|
| 252 |
+
1e-5, 1.0 - 1e-5
|
| 253 |
+
))
|
| 254 |
|
| 255 |
# ── 7. Calculate reward ───────────────────────────────────────
|
| 256 |
post_total_queue = sum(self.queues.values())
|
|
|
|
| 266 |
# Simple fairness: (1 - variance of wait times / threshold)
|
| 267 |
wait_vals = list(self.waiting_times.values())
|
| 268 |
if max(wait_vals) > 0:
|
| 269 |
+
self._metrics["fairness_score"] = float(np.clip(
|
| 270 |
+
1.0 - (np.std(wait_vals) / self.starvation_limit),
|
| 271 |
+
1e-5, 1.0 - 1e-5
|
| 272 |
+
))
|
| 273 |
+
else:
|
| 274 |
+
self._metrics["fairness_score"] = 1.0 - 1e-5
|
| 275 |
|
| 276 |
# ── 9. Termination ────────────────────────────────────────────
|
| 277 |
done = self.step_count >= self.max_steps
|