Upload folder using huggingface_hub
Browse files- app/environment/core.py +30 -27
- app/models/reward.py +73 -35
- app/models/state.py +2 -2
- data/learning_archive.json +889 -0
- data/learning_memory.json +28 -28
- data/trajectory_history.jsonl +29 -0
- openenv.yaml +1 -1
- pyproject.toml +3 -0
app/environment/core.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
| 1 |
import json
|
| 2 |
from pathlib import Path
|
| 3 |
-
from typing import Any
|
| 4 |
|
| 5 |
from app.environment.graders import grade_task
|
| 6 |
from app.environment.scenarios.accident import generate_accident_case
|
|
@@ -84,9 +84,9 @@ class EmergencyEnv:
|
|
| 84 |
seed=seed,
|
| 85 |
task_id=resolved_task_id,
|
| 86 |
task_objective=TASKS[resolved_task_id]["objective"],
|
| 87 |
-
scenario_type=scenario_type,
|
| 88 |
scenario_name=scenario["scenario_name"],
|
| 89 |
-
scenario_difficulty=difficulty,
|
| 90 |
patient_condition=scenario["patient_condition"],
|
| 91 |
required_specialization=scenario["required_specialization"],
|
| 92 |
initial_critical_time_limit_minutes=scenario["critical_time_limit_minutes"],
|
|
@@ -121,7 +121,7 @@ class EmergencyEnv:
|
|
| 121 |
|
| 122 |
self.last_info = StepInfo(
|
| 123 |
task_id=resolved_task_id,
|
| 124 |
-
difficulty=difficulty,
|
| 125 |
objective=TASKS[resolved_task_id]["objective"],
|
| 126 |
progress_score=MIN_REWARD,
|
| 127 |
reward_model=RewardModel(
|
|
@@ -174,7 +174,7 @@ class EmergencyEnv:
|
|
| 174 |
was_failed_before = selected.hospital_id in self.state_data.failed_hospitals
|
| 175 |
|
| 176 |
original_traffic = selected.traffic
|
| 177 |
-
selected.traffic = self._traffic_shift(selected.traffic, self.state_data.scenario_difficulty)
|
| 178 |
|
| 179 |
speed = compute_speed_kmh(self.base_speed_kmh, selected.traffic)
|
| 180 |
travel_time = compute_travel_time_minutes(selected.distance_km, speed)
|
|
@@ -288,9 +288,11 @@ class EmergencyEnv:
|
|
| 288 |
)
|
| 289 |
|
| 290 |
info = self.last_info.model_dump() if self.last_info else {}
|
|
|
|
|
|
|
| 291 |
return {
|
| 292 |
"observation": self._build_observation(),
|
| 293 |
-
"reward":
|
| 294 |
"done": self.state_data.done,
|
| 295 |
"info": info,
|
| 296 |
}
|
|
@@ -303,12 +305,11 @@ class EmergencyEnv:
|
|
| 303 |
return Action(step=self.state_data.step, hospital_id=action, rationale="policy selection")
|
| 304 |
if isinstance(action, dict):
|
| 305 |
assert self.state_data is not None
|
| 306 |
-
|
| 307 |
-
|
| 308 |
-
|
| 309 |
-
|
| 310 |
-
|
| 311 |
-
return Action(**payload)
|
| 312 |
raise ValueError("Action must be Action, hospital_id string, or action dict.")
|
| 313 |
|
| 314 |
def _build_hospital_states(self, scenario: dict[str, Any]) -> list[HospitalState]:
|
|
@@ -388,8 +389,8 @@ class EmergencyEnv:
|
|
| 388 |
distance_km=distance,
|
| 389 |
icu_display=icu_display,
|
| 390 |
icu_actual=icu_actual,
|
| 391 |
-
specialization=specialization,
|
| 392 |
-
traffic=traffic,
|
| 393 |
)
|
| 394 |
)
|
| 395 |
extra_count += 1
|
|
@@ -444,18 +445,18 @@ class EmergencyEnv:
|
|
| 444 |
)
|
| 445 |
reward = max(MIN_REWARD, min(MAX_REWARD, reward))
|
| 446 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 447 |
breakdown = RewardBreakdown(
|
| 448 |
survival_component=max(MIN_REWARD, min(MAX_REWARD, (status_reward + 0.5) / 1.5)),
|
| 449 |
time_efficiency_component=max(MIN_REWARD, min(MAX_REWARD, 1.0 - (travel_time / 25.0))),
|
| 450 |
-
specialization_component=(MAX_REWARD if self._specialization_match(selected) else 0.4),
|
| 451 |
-
delay_penalty=min(
|
| 452 |
-
MAX_REWARD,
|
| 453 |
-
unknown_critical_penalty
|
| 454 |
-
+ repeat_penalty
|
| 455 |
-
+ failed_repeat_penalty
|
| 456 |
-
+ traffic_penalty
|
| 457 |
-
+ hidden_case_penalty,
|
| 458 |
-
),
|
| 459 |
)
|
| 460 |
|
| 461 |
return reward, breakdown
|
|
@@ -1019,7 +1020,7 @@ class EmergencyEnv:
|
|
| 1019 |
assert self.state_data is not None
|
| 1020 |
for hospital in self.state_data.hospitals:
|
| 1021 |
if self._rng.random() < 0.40:
|
| 1022 |
-
hospital.traffic = self._traffic_shift(hospital.traffic, self.state_data.scenario_difficulty)
|
| 1023 |
|
| 1024 |
if self._rng.random() < DifficultyModifier.get_icu_mismatch_probability(self.state_data.scenario_difficulty):
|
| 1025 |
hospital.icu_actual = not hospital.icu_actual
|
|
@@ -1082,7 +1083,9 @@ class EmergencyEnv:
|
|
| 1082 |
|
| 1083 |
def _update_learning_memory(self, hospital_id: str, success: bool, reward: float) -> None:
|
| 1084 |
memory = self._load_memory()
|
| 1085 |
-
entry = memory.get(hospital_id
|
|
|
|
|
|
|
| 1086 |
|
| 1087 |
if success:
|
| 1088 |
entry.success += 1
|
|
@@ -1113,7 +1116,7 @@ class EmergencyEnv:
|
|
| 1113 |
progress_component = self._progress_score()
|
| 1114 |
reward_component = max(MIN_REWARD, min(MAX_REWARD, self.state_data.reward))
|
| 1115 |
score = 0.15 + (0.35 * reward_component) + (0.25 * progress_component)
|
| 1116 |
-
return max(0.1, min(0.85, score))
|
| 1117 |
|
| 1118 |
def _success_score(self) -> float:
|
| 1119 |
assert self.state_data is not None
|
|
@@ -1123,7 +1126,7 @@ class EmergencyEnv:
|
|
| 1123 |
rejected_steps = sum(1 for item in self.trajectory if item.get("outcome_status") == "rejected")
|
| 1124 |
route_quality = max(0.0, 1.0 - (rejected_steps / total_steps))
|
| 1125 |
score = (0.45 * reward_component) + (0.40 * progress_component) + (0.15 * route_quality)
|
| 1126 |
-
return max(0.25, min(0.99, score))
|
| 1127 |
|
| 1128 |
|
| 1129 |
ACDEEnvironment = EmergencyEnv
|
|
|
|
| 1 |
import json
|
| 2 |
from pathlib import Path
|
| 3 |
+
from typing import Any, Literal, cast
|
| 4 |
|
| 5 |
from app.environment.graders import grade_task
|
| 6 |
from app.environment.scenarios.accident import generate_accident_case
|
|
|
|
| 84 |
seed=seed,
|
| 85 |
task_id=resolved_task_id,
|
| 86 |
task_objective=TASKS[resolved_task_id]["objective"],
|
| 87 |
+
scenario_type=cast(Literal["medical", "accident", "fire"], scenario_type),
|
| 88 |
scenario_name=scenario["scenario_name"],
|
| 89 |
+
scenario_difficulty=cast(Literal["easy", "medium", "hard"], difficulty),
|
| 90 |
patient_condition=scenario["patient_condition"],
|
| 91 |
required_specialization=scenario["required_specialization"],
|
| 92 |
initial_critical_time_limit_minutes=scenario["critical_time_limit_minutes"],
|
|
|
|
| 121 |
|
| 122 |
self.last_info = StepInfo(
|
| 123 |
task_id=resolved_task_id,
|
| 124 |
+
difficulty=cast(Literal["easy", "medium", "hard"], difficulty),
|
| 125 |
objective=TASKS[resolved_task_id]["objective"],
|
| 126 |
progress_score=MIN_REWARD,
|
| 127 |
reward_model=RewardModel(
|
|
|
|
| 174 |
was_failed_before = selected.hospital_id in self.state_data.failed_hospitals
|
| 175 |
|
| 176 |
original_traffic = selected.traffic
|
| 177 |
+
selected.traffic = cast(Literal["low", "medium", "high"], self._traffic_shift(selected.traffic, self.state_data.scenario_difficulty))
|
| 178 |
|
| 179 |
speed = compute_speed_kmh(self.base_speed_kmh, selected.traffic)
|
| 180 |
travel_time = compute_travel_time_minutes(selected.distance_km, speed)
|
|
|
|
| 288 |
)
|
| 289 |
|
| 290 |
info = self.last_info.model_dump() if self.last_info else {}
|
| 291 |
+
# Clamp reward into the strict open interval (0, 1) for the external validator.
|
| 292 |
+
clamped_reward = max(MIN_REWARD, min(MAX_REWARD, reward))
|
| 293 |
return {
|
| 294 |
"observation": self._build_observation(),
|
| 295 |
+
"reward": clamped_reward,
|
| 296 |
"done": self.state_data.done,
|
| 297 |
"info": info,
|
| 298 |
}
|
|
|
|
| 305 |
return Action(step=self.state_data.step, hospital_id=action, rationale="policy selection")
|
| 306 |
if isinstance(action, dict):
|
| 307 |
assert self.state_data is not None
|
| 308 |
+
return Action(
|
| 309 |
+
step=action.get("step", self.state_data.step),
|
| 310 |
+
hospital_id=str(action.get("hospital_id", "")),
|
| 311 |
+
rationale=action.get("rationale"),
|
| 312 |
+
)
|
|
|
|
| 313 |
raise ValueError("Action must be Action, hospital_id string, or action dict.")
|
| 314 |
|
| 315 |
def _build_hospital_states(self, scenario: dict[str, Any]) -> list[HospitalState]:
|
|
|
|
| 389 |
distance_km=distance,
|
| 390 |
icu_display=icu_display,
|
| 391 |
icu_actual=icu_actual,
|
| 392 |
+
specialization=cast(Literal["cardiac", "trauma", "general"], specialization),
|
| 393 |
+
traffic=cast(Literal["low", "medium", "high"], traffic),
|
| 394 |
)
|
| 395 |
)
|
| 396 |
extra_count += 1
|
|
|
|
| 445 |
)
|
| 446 |
reward = max(MIN_REWARD, min(MAX_REWARD, reward))
|
| 447 |
|
| 448 |
+
raw_delay = (
|
| 449 |
+
unknown_critical_penalty
|
| 450 |
+
+ repeat_penalty
|
| 451 |
+
+ failed_repeat_penalty
|
| 452 |
+
+ traffic_penalty
|
| 453 |
+
+ hidden_case_penalty
|
| 454 |
+
)
|
| 455 |
breakdown = RewardBreakdown(
|
| 456 |
survival_component=max(MIN_REWARD, min(MAX_REWARD, (status_reward + 0.5) / 1.5)),
|
| 457 |
time_efficiency_component=max(MIN_REWARD, min(MAX_REWARD, 1.0 - (travel_time / 25.0))),
|
| 458 |
+
specialization_component=max(MIN_REWARD, min(MAX_REWARD, MAX_REWARD if self._specialization_match(selected) else 0.4)),
|
| 459 |
+
delay_penalty=max(MIN_REWARD, min(MAX_REWARD, raw_delay)),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 460 |
)
|
| 461 |
|
| 462 |
return reward, breakdown
|
|
|
|
| 1020 |
assert self.state_data is not None
|
| 1021 |
for hospital in self.state_data.hospitals:
|
| 1022 |
if self._rng.random() < 0.40:
|
| 1023 |
+
hospital.traffic = cast(Literal["low", "medium", "high"], self._traffic_shift(hospital.traffic, self.state_data.scenario_difficulty))
|
| 1024 |
|
| 1025 |
if self._rng.random() < DifficultyModifier.get_icu_mismatch_probability(self.state_data.scenario_difficulty):
|
| 1026 |
hospital.icu_actual = not hospital.icu_actual
|
|
|
|
| 1083 |
|
| 1084 |
def _update_learning_memory(self, hospital_id: str, success: bool, reward: float) -> None:
|
| 1085 |
memory = self._load_memory()
|
| 1086 |
+
entry = memory.get(hospital_id)
|
| 1087 |
+
if entry is None:
|
| 1088 |
+
entry = LearningEntry()
|
| 1089 |
|
| 1090 |
if success:
|
| 1091 |
entry.success += 1
|
|
|
|
| 1116 |
progress_component = self._progress_score()
|
| 1117 |
reward_component = max(MIN_REWARD, min(MAX_REWARD, self.state_data.reward))
|
| 1118 |
score = 0.15 + (0.35 * reward_component) + (0.25 * progress_component)
|
| 1119 |
+
return max(MIN_REWARD, min(MAX_REWARD, max(0.1, min(0.85, score))))
|
| 1120 |
|
| 1121 |
def _success_score(self) -> float:
|
| 1122 |
assert self.state_data is not None
|
|
|
|
| 1126 |
rejected_steps = sum(1 for item in self.trajectory if item.get("outcome_status") == "rejected")
|
| 1127 |
route_quality = max(0.0, 1.0 - (rejected_steps / total_steps))
|
| 1128 |
score = (0.45 * reward_component) + (0.40 * progress_component) + (0.15 * route_quality)
|
| 1129 |
+
return max(MIN_REWARD, min(MAX_REWARD, max(0.25, min(0.99, score))))
|
| 1130 |
|
| 1131 |
|
| 1132 |
ACDEEnvironment = EmergencyEnv
|
app/models/reward.py
CHANGED
|
@@ -1,35 +1,73 @@
|
|
| 1 |
-
from typing import Literal
|
| 2 |
-
|
| 3 |
-
from pydantic import BaseModel, Field
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
class
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
|
| 24 |
-
|
| 25 |
-
|
| 26 |
-
|
| 27 |
-
|
| 28 |
-
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
|
| 34 |
-
|
| 35 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from typing import Literal
|
| 2 |
+
|
| 3 |
+
from pydantic import BaseModel, Field, field_validator
|
| 4 |
+
|
| 5 |
+
|
| 6 |
+
# Strict boundaries for all score-like fields.
|
| 7 |
+
# The external validator requires scores strictly between 0 and 1
|
| 8 |
+
# (not 0.0 and not 1.0), so we clamp all values to [0.001, 0.999].
|
| 9 |
+
_FLOOR = 0.001
|
| 10 |
+
_CEIL = 0.999
|
| 11 |
+
|
| 12 |
+
|
| 13 |
+
def _clamp(v: float) -> float:
|
| 14 |
+
"""Clamp a score to the open interval (0, 1)."""
|
| 15 |
+
return max(_FLOOR, min(_CEIL, v))
|
| 16 |
+
|
| 17 |
+
|
| 18 |
+
class RewardBreakdown(BaseModel):
|
| 19 |
+
survival_component: float = Field(ge=_FLOOR, le=_CEIL)
|
| 20 |
+
time_efficiency_component: float = Field(ge=_FLOOR, le=_CEIL)
|
| 21 |
+
specialization_component: float = Field(ge=_FLOOR, le=_CEIL)
|
| 22 |
+
delay_penalty: float = Field(ge=_FLOOR, le=_CEIL)
|
| 23 |
+
|
| 24 |
+
@field_validator(
|
| 25 |
+
"survival_component",
|
| 26 |
+
"time_efficiency_component",
|
| 27 |
+
"specialization_component",
|
| 28 |
+
"delay_penalty",
|
| 29 |
+
mode="before",
|
| 30 |
+
)
|
| 31 |
+
@classmethod
|
| 32 |
+
def clamp_score(cls, v: float) -> float:
|
| 33 |
+
return _clamp(v)
|
| 34 |
+
|
| 35 |
+
|
| 36 |
+
class RewardModel(BaseModel):
|
| 37 |
+
value: float = Field(ge=_FLOOR, le=_CEIL)
|
| 38 |
+
breakdown: RewardBreakdown
|
| 39 |
+
|
| 40 |
+
@field_validator("value", mode="before")
|
| 41 |
+
@classmethod
|
| 42 |
+
def clamp_value(cls, v: float) -> float:
|
| 43 |
+
return _clamp(v)
|
| 44 |
+
|
| 45 |
+
|
| 46 |
+
class GraderResult(BaseModel):
|
| 47 |
+
task_id: Literal["acde_easy", "acde_medium", "acde_hard"]
|
| 48 |
+
difficulty: Literal["easy", "medium", "hard"]
|
| 49 |
+
objective: str
|
| 50 |
+
score: float = Field(ge=_FLOOR, le=_CEIL)
|
| 51 |
+
passed: bool
|
| 52 |
+
criteria: dict[str, float] = Field(default_factory=dict)
|
| 53 |
+
|
| 54 |
+
@field_validator("score", mode="before")
|
| 55 |
+
@classmethod
|
| 56 |
+
def clamp_score(cls, v: float) -> float:
|
| 57 |
+
return _clamp(v)
|
| 58 |
+
|
| 59 |
+
|
| 60 |
+
class StepInfo(BaseModel):
|
| 61 |
+
last_action_error: str | None = None
|
| 62 |
+
task_id: Literal["acde_easy", "acde_medium", "acde_hard"]
|
| 63 |
+
difficulty: Literal["easy", "medium", "hard"]
|
| 64 |
+
objective: str
|
| 65 |
+
progress_score: float = Field(ge=_FLOOR, le=_CEIL)
|
| 66 |
+
reward_model: RewardModel
|
| 67 |
+
grader: GraderResult | None = None
|
| 68 |
+
outcome: dict[str, str] | None = None
|
| 69 |
+
|
| 70 |
+
@field_validator("progress_score", mode="before")
|
| 71 |
+
@classmethod
|
| 72 |
+
def clamp_progress(cls, v: float) -> float:
|
| 73 |
+
return _clamp(v)
|
app/models/state.py
CHANGED
|
@@ -56,8 +56,8 @@ class EnvState(BaseModel):
|
|
| 56 |
selected_hospital_id: str | None = None
|
| 57 |
done: bool = False
|
| 58 |
final_outcome: Literal["SUCCESS", "FAILURE"] | None = None
|
| 59 |
-
final_score: float = Field(default=0.
|
| 60 |
-
reward: float = Field(default=0.
|
| 61 |
ambulance_status: Literal["en_route", "in_transit", "arrived", "admitted", "rerouting"] = "en_route"
|
| 62 |
current_location_context: str = "incident_site"
|
| 63 |
visited_hospitals: list[str] = Field(default_factory=list)
|
|
|
|
| 56 |
selected_hospital_id: str | None = None
|
| 57 |
done: bool = False
|
| 58 |
final_outcome: Literal["SUCCESS", "FAILURE"] | None = None
|
| 59 |
+
final_score: float = Field(default=0.001, ge=0.001, le=0.999)
|
| 60 |
+
reward: float = Field(default=0.001, ge=0.001, le=0.999)
|
| 61 |
ambulance_status: Literal["en_route", "in_transit", "arrived", "admitted", "rerouting"] = "en_route"
|
| 62 |
current_location_context: str = "incident_site"
|
| 63 |
visited_hospitals: list[str] = Field(default_factory=list)
|
data/learning_archive.json
CHANGED
|
@@ -7370,6 +7370,722 @@
|
|
| 7370 |
"best_scenario_name": "Bridge Crash (Infrastructure Blocked)",
|
| 7371 |
"best_difficulty": "hard",
|
| 7372 |
"best_required_specialization": "trauma"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 7373 |
}
|
| 7374 |
},
|
| 7375 |
"episodes": [
|
|
@@ -9248,6 +9964,179 @@
|
|
| 9248 |
"H5"
|
| 9249 |
],
|
| 9250 |
"timestamp": "2026-04-09T04:57:26.758443+00:00"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9251 |
}
|
| 9252 |
]
|
| 9253 |
}
|
|
|
|
| 7370 |
"best_scenario_name": "Bridge Crash (Infrastructure Blocked)",
|
| 7371 |
"best_difficulty": "hard",
|
| 7372 |
"best_required_specialization": "trauma"
|
| 7373 |
+
},
|
| 7374 |
+
"865967163|acde_easy": {
|
| 7375 |
+
"attempts": 1,
|
| 7376 |
+
"best_score": 0.7872000000000001,
|
| 7377 |
+
"best_actions": [
|
| 7378 |
+
"H4",
|
| 7379 |
+
"H1"
|
| 7380 |
+
],
|
| 7381 |
+
"best_steps": 2,
|
| 7382 |
+
"step_stats": {
|
| 7383 |
+
"1": {
|
| 7384 |
+
"H4": {
|
| 7385 |
+
"count": 1,
|
| 7386 |
+
"success": 0,
|
| 7387 |
+
"accepted": 0,
|
| 7388 |
+
"partial": 1,
|
| 7389 |
+
"rejected": 0,
|
| 7390 |
+
"total_reward": 0.274,
|
| 7391 |
+
"avg_reward": 0.274,
|
| 7392 |
+
"last_status": "PARTIAL",
|
| 7393 |
+
"last_reason": "Critical deterioration managed temporarily; reroute still needed",
|
| 7394 |
+
"success_rate": 0.0
|
| 7395 |
+
}
|
| 7396 |
+
},
|
| 7397 |
+
"2": {
|
| 7398 |
+
"H1": {
|
| 7399 |
+
"count": 1,
|
| 7400 |
+
"success": 1,
|
| 7401 |
+
"accepted": 1,
|
| 7402 |
+
"partial": 0,
|
| 7403 |
+
"rejected": 0,
|
| 7404 |
+
"total_reward": 0.8960000000000001,
|
| 7405 |
+
"avg_reward": 0.8960000000000001,
|
| 7406 |
+
"last_status": "ACCEPTED",
|
| 7407 |
+
"last_reason": "Patient stabilized after delayed admission",
|
| 7408 |
+
"success_rate": 1.0
|
| 7409 |
+
}
|
| 7410 |
+
}
|
| 7411 |
+
},
|
| 7412 |
+
"last_score": 0.7872000000000001,
|
| 7413 |
+
"last_success": true,
|
| 7414 |
+
"last_run_at": "2026-04-09T05:14:40.441962+00:00",
|
| 7415 |
+
"last_actions": [
|
| 7416 |
+
"H4",
|
| 7417 |
+
"H1"
|
| 7418 |
+
],
|
| 7419 |
+
"last_required_specialization": "trauma",
|
| 7420 |
+
"last_scenario_type": "accident",
|
| 7421 |
+
"last_scenario_name": "Highway Collision (Severe)",
|
| 7422 |
+
"best_success": true,
|
| 7423 |
+
"best_scenario_name": "Highway Collision (Severe)",
|
| 7424 |
+
"best_difficulty": "easy",
|
| 7425 |
+
"best_required_specialization": "trauma"
|
| 7426 |
+
},
|
| 7427 |
+
"865967164|acde_medium": {
|
| 7428 |
+
"attempts": 1,
|
| 7429 |
+
"best_score": 0.48340000000000005,
|
| 7430 |
+
"best_actions": [
|
| 7431 |
+
"H3",
|
| 7432 |
+
"H2",
|
| 7433 |
+
"H3"
|
| 7434 |
+
],
|
| 7435 |
+
"best_steps": 3,
|
| 7436 |
+
"step_stats": {
|
| 7437 |
+
"1": {
|
| 7438 |
+
"H3": {
|
| 7439 |
+
"count": 1,
|
| 7440 |
+
"success": 0,
|
| 7441 |
+
"accepted": 0,
|
| 7442 |
+
"partial": 1,
|
| 7443 |
+
"rejected": 0,
|
| 7444 |
+
"total_reward": 0.4690000000000001,
|
| 7445 |
+
"avg_reward": 0.4690000000000001,
|
| 7446 |
+
"last_status": "PARTIAL",
|
| 7447 |
+
"last_reason": "Admitted with delays: doctor delayed",
|
| 7448 |
+
"success_rate": 0.0
|
| 7449 |
+
}
|
| 7450 |
+
},
|
| 7451 |
+
"2": {
|
| 7452 |
+
"H2": {
|
| 7453 |
+
"count": 1,
|
| 7454 |
+
"success": 0,
|
| 7455 |
+
"accepted": 0,
|
| 7456 |
+
"partial": 0,
|
| 7457 |
+
"rejected": 1,
|
| 7458 |
+
"total_reward": 0.079,
|
| 7459 |
+
"avg_reward": 0.079,
|
| 7460 |
+
"last_status": "REJECTED",
|
| 7461 |
+
"last_reason": "Hospital cannot admit: ICU unavailable",
|
| 7462 |
+
"success_rate": 0.0
|
| 7463 |
+
}
|
| 7464 |
+
},
|
| 7465 |
+
"3": {
|
| 7466 |
+
"H3": {
|
| 7467 |
+
"count": 1,
|
| 7468 |
+
"success": 1,
|
| 7469 |
+
"accepted": 1,
|
| 7470 |
+
"partial": 0,
|
| 7471 |
+
"rejected": 0,
|
| 7472 |
+
"total_reward": 0.532,
|
| 7473 |
+
"avg_reward": 0.532,
|
| 7474 |
+
"last_status": "ACCEPTED",
|
| 7475 |
+
"last_reason": "Condition stabilized after progressive treatment",
|
| 7476 |
+
"success_rate": 1.0
|
| 7477 |
+
}
|
| 7478 |
+
}
|
| 7479 |
+
},
|
| 7480 |
+
"last_score": 0.48340000000000005,
|
| 7481 |
+
"last_success": true,
|
| 7482 |
+
"last_run_at": "2026-04-09T05:14:41.433914+00:00",
|
| 7483 |
+
"last_actions": [
|
| 7484 |
+
"H3",
|
| 7485 |
+
"H2",
|
| 7486 |
+
"H3"
|
| 7487 |
+
],
|
| 7488 |
+
"last_required_specialization": "trauma",
|
| 7489 |
+
"last_scenario_type": "accident",
|
| 7490 |
+
"last_scenario_name": "Urban Pile-up (Rush Hour)",
|
| 7491 |
+
"best_success": true,
|
| 7492 |
+
"best_scenario_name": "Urban Pile-up (Rush Hour)",
|
| 7493 |
+
"best_difficulty": "medium",
|
| 7494 |
+
"best_required_specialization": "trauma"
|
| 7495 |
+
},
|
| 7496 |
+
"865967165|acde_hard": {
|
| 7497 |
+
"attempts": 1,
|
| 7498 |
+
"best_score": 0.15059999999999998,
|
| 7499 |
+
"best_actions": [
|
| 7500 |
+
"H6",
|
| 7501 |
+
"H2",
|
| 7502 |
+
"H6",
|
| 7503 |
+
"H3"
|
| 7504 |
+
],
|
| 7505 |
+
"best_steps": 4,
|
| 7506 |
+
"step_stats": {
|
| 7507 |
+
"1": {
|
| 7508 |
+
"H6": {
|
| 7509 |
+
"count": 1,
|
| 7510 |
+
"success": 0,
|
| 7511 |
+
"accepted": 0,
|
| 7512 |
+
"partial": 0,
|
| 7513 |
+
"rejected": 1,
|
| 7514 |
+
"total_reward": 0.001,
|
| 7515 |
+
"avg_reward": 0.001,
|
| 7516 |
+
"last_status": "REJECTED",
|
| 7517 |
+
"last_reason": "Hospital cannot admit: ICU unavailable",
|
| 7518 |
+
"success_rate": 0.0
|
| 7519 |
+
}
|
| 7520 |
+
},
|
| 7521 |
+
"2": {
|
| 7522 |
+
"H2": {
|
| 7523 |
+
"count": 1,
|
| 7524 |
+
"success": 0,
|
| 7525 |
+
"accepted": 0,
|
| 7526 |
+
"partial": 0,
|
| 7527 |
+
"rejected": 1,
|
| 7528 |
+
"total_reward": 0.001,
|
| 7529 |
+
"avg_reward": 0.001,
|
| 7530 |
+
"last_status": "REJECTED",
|
| 7531 |
+
"last_reason": "Hospital cannot admit: No specialist available",
|
| 7532 |
+
"success_rate": 0.0
|
| 7533 |
+
}
|
| 7534 |
+
},
|
| 7535 |
+
"3": {
|
| 7536 |
+
"H6": {
|
| 7537 |
+
"count": 1,
|
| 7538 |
+
"success": 0,
|
| 7539 |
+
"accepted": 0,
|
| 7540 |
+
"partial": 0,
|
| 7541 |
+
"rejected": 1,
|
| 7542 |
+
"total_reward": 0.001,
|
| 7543 |
+
"avg_reward": 0.001,
|
| 7544 |
+
"last_status": "REJECTED",
|
| 7545 |
+
"last_reason": "Hidden mismatch at arrival (wrong risky guess). Rerouting required.",
|
| 7546 |
+
"success_rate": 0.0
|
| 7547 |
+
}
|
| 7548 |
+
},
|
| 7549 |
+
"4": {
|
| 7550 |
+
"H3": {
|
| 7551 |
+
"count": 1,
|
| 7552 |
+
"success": 0,
|
| 7553 |
+
"accepted": 0,
|
| 7554 |
+
"partial": 0,
|
| 7555 |
+
"rejected": 1,
|
| 7556 |
+
"total_reward": 0.001,
|
| 7557 |
+
"avg_reward": 0.001,
|
| 7558 |
+
"last_status": "REJECTED",
|
| 7559 |
+
"last_reason": "Hidden mismatch at arrival (wrong risky guess). Rerouting required.",
|
| 7560 |
+
"success_rate": 0.0
|
| 7561 |
+
}
|
| 7562 |
+
}
|
| 7563 |
+
},
|
| 7564 |
+
"last_score": 0.15059999999999998,
|
| 7565 |
+
"last_success": false,
|
| 7566 |
+
"last_run_at": "2026-04-09T05:14:43.050718+00:00",
|
| 7567 |
+
"last_actions": [
|
| 7568 |
+
"H6",
|
| 7569 |
+
"H2",
|
| 7570 |
+
"H6",
|
| 7571 |
+
"H3"
|
| 7572 |
+
],
|
| 7573 |
+
"last_required_specialization": "trauma",
|
| 7574 |
+
"last_scenario_type": "accident",
|
| 7575 |
+
"last_scenario_name": "Bridge Crash (Infrastructure Blocked)",
|
| 7576 |
+
"best_success": false,
|
| 7577 |
+
"best_scenario_name": "Bridge Crash (Infrastructure Blocked)",
|
| 7578 |
+
"best_difficulty": "hard",
|
| 7579 |
+
"best_required_specialization": "trauma"
|
| 7580 |
+
},
|
| 7581 |
+
"562874771|acde_easy": {
|
| 7582 |
+
"attempts": 1,
|
| 7583 |
+
"best_score": 0.4838,
|
| 7584 |
+
"best_actions": [
|
| 7585 |
+
"H4",
|
| 7586 |
+
"H1",
|
| 7587 |
+
"H4"
|
| 7588 |
+
],
|
| 7589 |
+
"best_steps": 3,
|
| 7590 |
+
"step_stats": {
|
| 7591 |
+
"1": {
|
| 7592 |
+
"H4": {
|
| 7593 |
+
"count": 1,
|
| 7594 |
+
"success": 0,
|
| 7595 |
+
"accepted": 0,
|
| 7596 |
+
"partial": 1,
|
| 7597 |
+
"rejected": 0,
|
| 7598 |
+
"total_reward": 0.234,
|
| 7599 |
+
"avg_reward": 0.234,
|
| 7600 |
+
"last_status": "PARTIAL",
|
| 7601 |
+
"last_reason": "Critical deterioration managed temporarily; reroute still needed",
|
| 7602 |
+
"success_rate": 0.0
|
| 7603 |
+
}
|
| 7604 |
+
},
|
| 7605 |
+
"2": {
|
| 7606 |
+
"H1": {
|
| 7607 |
+
"count": 1,
|
| 7608 |
+
"success": 0,
|
| 7609 |
+
"accepted": 0,
|
| 7610 |
+
"partial": 0,
|
| 7611 |
+
"rejected": 1,
|
| 7612 |
+
"total_reward": 0.008999999999999996,
|
| 7613 |
+
"avg_reward": 0.008999999999999996,
|
| 7614 |
+
"last_status": "REJECTED",
|
| 7615 |
+
"last_reason": "Condition became irreversible after delays",
|
| 7616 |
+
"success_rate": 0.0
|
| 7617 |
+
}
|
| 7618 |
+
},
|
| 7619 |
+
"3": {
|
| 7620 |
+
"H4": {
|
| 7621 |
+
"count": 1,
|
| 7622 |
+
"success": 1,
|
| 7623 |
+
"accepted": 1,
|
| 7624 |
+
"partial": 0,
|
| 7625 |
+
"rejected": 0,
|
| 7626 |
+
"total_reward": 0.6023999999999999,
|
| 7627 |
+
"avg_reward": 0.6023999999999999,
|
| 7628 |
+
"last_status": "ACCEPTED",
|
| 7629 |
+
"last_reason": "Emergency stabilization at last attempt",
|
| 7630 |
+
"success_rate": 1.0
|
| 7631 |
+
}
|
| 7632 |
+
}
|
| 7633 |
+
},
|
| 7634 |
+
"last_score": 0.4838,
|
| 7635 |
+
"last_success": true,
|
| 7636 |
+
"last_run_at": "2026-04-09T05:18:04.053307+00:00",
|
| 7637 |
+
"last_actions": [
|
| 7638 |
+
"H4",
|
| 7639 |
+
"H1",
|
| 7640 |
+
"H4"
|
| 7641 |
+
],
|
| 7642 |
+
"last_required_specialization": "cardiac",
|
| 7643 |
+
"last_scenario_type": "medical",
|
| 7644 |
+
"last_scenario_name": "Heart Attack (Critical)",
|
| 7645 |
+
"best_success": true,
|
| 7646 |
+
"best_scenario_name": "Heart Attack (Critical)",
|
| 7647 |
+
"best_difficulty": "easy",
|
| 7648 |
+
"best_required_specialization": "cardiac"
|
| 7649 |
+
},
|
| 7650 |
+
"562874772|acde_medium": {
|
| 7651 |
+
"attempts": 1,
|
| 7652 |
+
"best_score": 0.9226500000000001,
|
| 7653 |
+
"best_actions": [
|
| 7654 |
+
"H5"
|
| 7655 |
+
],
|
| 7656 |
+
"best_steps": 1,
|
| 7657 |
+
"step_stats": {
|
| 7658 |
+
"1": {
|
| 7659 |
+
"H5": {
|
| 7660 |
+
"count": 1,
|
| 7661 |
+
"success": 1,
|
| 7662 |
+
"accepted": 1,
|
| 7663 |
+
"partial": 0,
|
| 7664 |
+
"rejected": 0,
|
| 7665 |
+
"total_reward": 0.909,
|
| 7666 |
+
"avg_reward": 0.909,
|
| 7667 |
+
"last_status": "ACCEPTED",
|
| 7668 |
+
"last_reason": "Patient admitted and treatment began",
|
| 7669 |
+
"success_rate": 1.0
|
| 7670 |
+
}
|
| 7671 |
+
}
|
| 7672 |
+
},
|
| 7673 |
+
"last_score": 0.9226500000000001,
|
| 7674 |
+
"last_success": true,
|
| 7675 |
+
"last_run_at": "2026-04-09T05:18:04.467741+00:00",
|
| 7676 |
+
"last_actions": [
|
| 7677 |
+
"H5"
|
| 7678 |
+
],
|
| 7679 |
+
"last_required_specialization": "cardiac",
|
| 7680 |
+
"last_scenario_type": "medical",
|
| 7681 |
+
"last_scenario_name": "Heart Attack (Unstable)",
|
| 7682 |
+
"best_success": true,
|
| 7683 |
+
"best_scenario_name": "Heart Attack (Unstable)",
|
| 7684 |
+
"best_difficulty": "medium",
|
| 7685 |
+
"best_required_specialization": "cardiac"
|
| 7686 |
+
},
|
| 7687 |
+
"562874773|acde_hard": {
|
| 7688 |
+
"attempts": 1,
|
| 7689 |
+
"best_score": 0.17603749999999999,
|
| 7690 |
+
"best_actions": [
|
| 7691 |
+
"H6",
|
| 7692 |
+
"H1",
|
| 7693 |
+
"H4",
|
| 7694 |
+
"H3"
|
| 7695 |
+
],
|
| 7696 |
+
"best_steps": 4,
|
| 7697 |
+
"step_stats": {
|
| 7698 |
+
"1": {
|
| 7699 |
+
"H6": {
|
| 7700 |
+
"count": 1,
|
| 7701 |
+
"success": 0,
|
| 7702 |
+
"accepted": 0,
|
| 7703 |
+
"partial": 0,
|
| 7704 |
+
"rejected": 1,
|
| 7705 |
+
"total_reward": 0.001,
|
| 7706 |
+
"avg_reward": 0.001,
|
| 7707 |
+
"last_status": "REJECTED",
|
| 7708 |
+
"last_reason": "Hospital cannot admit: Hospital overloaded",
|
| 7709 |
+
"success_rate": 0.0
|
| 7710 |
+
}
|
| 7711 |
+
},
|
| 7712 |
+
"2": {
|
| 7713 |
+
"H1": {
|
| 7714 |
+
"count": 1,
|
| 7715 |
+
"success": 0,
|
| 7716 |
+
"accepted": 0,
|
| 7717 |
+
"partial": 1,
|
| 7718 |
+
"rejected": 0,
|
| 7719 |
+
"total_reward": 0.40800000000000014,
|
| 7720 |
+
"avg_reward": 0.40800000000000014,
|
| 7721 |
+
"last_status": "PARTIAL",
|
| 7722 |
+
"last_reason": "Admitted with delays: prolonged transfer strain",
|
| 7723 |
+
"success_rate": 0.0
|
| 7724 |
+
}
|
| 7725 |
+
},
|
| 7726 |
+
"3": {
|
| 7727 |
+
"H4": {
|
| 7728 |
+
"count": 1,
|
| 7729 |
+
"success": 0,
|
| 7730 |
+
"accepted": 0,
|
| 7731 |
+
"partial": 0,
|
| 7732 |
+
"rejected": 1,
|
| 7733 |
+
"total_reward": 0.001,
|
| 7734 |
+
"avg_reward": 0.001,
|
| 7735 |
+
"last_status": "REJECTED",
|
| 7736 |
+
"last_reason": "Hospital cannot admit: ICU unavailable, No specialist available",
|
| 7737 |
+
"success_rate": 0.0
|
| 7738 |
+
}
|
| 7739 |
+
},
|
| 7740 |
+
"4": {
|
| 7741 |
+
"H3": {
|
| 7742 |
+
"count": 1,
|
| 7743 |
+
"success": 0,
|
| 7744 |
+
"accepted": 0,
|
| 7745 |
+
"partial": 0,
|
| 7746 |
+
"rejected": 1,
|
| 7747 |
+
"total_reward": 0.001,
|
| 7748 |
+
"avg_reward": 0.001,
|
| 7749 |
+
"last_status": "REJECTED",
|
| 7750 |
+
"last_reason": "Hospital cannot admit: No specialist available",
|
| 7751 |
+
"success_rate": 0.0
|
| 7752 |
+
}
|
| 7753 |
+
}
|
| 7754 |
+
},
|
| 7755 |
+
"last_score": 0.17603749999999999,
|
| 7756 |
+
"last_success": false,
|
| 7757 |
+
"last_run_at": "2026-04-09T05:18:06.091131+00:00",
|
| 7758 |
+
"last_actions": [
|
| 7759 |
+
"H6",
|
| 7760 |
+
"H1",
|
| 7761 |
+
"H4",
|
| 7762 |
+
"H3"
|
| 7763 |
+
],
|
| 7764 |
+
"last_required_specialization": "general",
|
| 7765 |
+
"last_scenario_type": "fire",
|
| 7766 |
+
"last_scenario_name": "Wildfire Front (Evacuation Gridlock)",
|
| 7767 |
+
"best_success": false,
|
| 7768 |
+
"best_scenario_name": "Wildfire Front (Evacuation Gridlock)",
|
| 7769 |
+
"best_difficulty": "hard",
|
| 7770 |
+
"best_required_specialization": "general"
|
| 7771 |
+
},
|
| 7772 |
+
"850880720|acde_easy": {
|
| 7773 |
+
"attempts": 1,
|
| 7774 |
+
"best_score": 0.99,
|
| 7775 |
+
"best_actions": [
|
| 7776 |
+
"H3"
|
| 7777 |
+
],
|
| 7778 |
+
"best_steps": 1,
|
| 7779 |
+
"step_stats": {
|
| 7780 |
+
"1": {
|
| 7781 |
+
"H3": {
|
| 7782 |
+
"count": 1,
|
| 7783 |
+
"success": 1,
|
| 7784 |
+
"accepted": 1,
|
| 7785 |
+
"partial": 0,
|
| 7786 |
+
"rejected": 0,
|
| 7787 |
+
"total_reward": 0.999,
|
| 7788 |
+
"avg_reward": 0.999,
|
| 7789 |
+
"last_status": "ACCEPTED",
|
| 7790 |
+
"last_reason": "Patient admitted and treatment began",
|
| 7791 |
+
"success_rate": 1.0
|
| 7792 |
+
}
|
| 7793 |
+
}
|
| 7794 |
+
},
|
| 7795 |
+
"last_score": 0.99,
|
| 7796 |
+
"last_success": true,
|
| 7797 |
+
"last_run_at": "2026-04-09T05:18:37.126090+00:00",
|
| 7798 |
+
"last_actions": [
|
| 7799 |
+
"H3"
|
| 7800 |
+
],
|
| 7801 |
+
"last_required_specialization": "general",
|
| 7802 |
+
"last_scenario_type": "fire",
|
| 7803 |
+
"last_scenario_name": "Apartment Fire (Smoke Inhalation)",
|
| 7804 |
+
"best_success": true,
|
| 7805 |
+
"best_scenario_name": "Apartment Fire (Smoke Inhalation)",
|
| 7806 |
+
"best_difficulty": "easy",
|
| 7807 |
+
"best_required_specialization": "general"
|
| 7808 |
+
},
|
| 7809 |
+
"850880721|acde_medium": {
|
| 7810 |
+
"attempts": 1,
|
| 7811 |
+
"best_score": 0.16988124999999998,
|
| 7812 |
+
"best_actions": [
|
| 7813 |
+
"H2",
|
| 7814 |
+
"H3",
|
| 7815 |
+
"H5",
|
| 7816 |
+
"H3"
|
| 7817 |
+
],
|
| 7818 |
+
"best_steps": 4,
|
| 7819 |
+
"step_stats": {
|
| 7820 |
+
"1": {
|
| 7821 |
+
"H2": {
|
| 7822 |
+
"count": 1,
|
| 7823 |
+
"success": 0,
|
| 7824 |
+
"accepted": 0,
|
| 7825 |
+
"partial": 1,
|
| 7826 |
+
"rejected": 0,
|
| 7827 |
+
"total_reward": 0.13650000000000004,
|
| 7828 |
+
"avg_reward": 0.13650000000000004,
|
| 7829 |
+
"last_status": "PARTIAL",
|
| 7830 |
+
"last_reason": "Admitted with delays: prolonged transfer strain, hospital busy but manageable",
|
| 7831 |
+
"success_rate": 0.0
|
| 7832 |
+
}
|
| 7833 |
+
},
|
| 7834 |
+
"2": {
|
| 7835 |
+
"H3": {
|
| 7836 |
+
"count": 1,
|
| 7837 |
+
"success": 0,
|
| 7838 |
+
"accepted": 0,
|
| 7839 |
+
"partial": 1,
|
| 7840 |
+
"rejected": 0,
|
| 7841 |
+
"total_reward": 0.17400000000000002,
|
| 7842 |
+
"avg_reward": 0.17400000000000002,
|
| 7843 |
+
"last_status": "PARTIAL",
|
| 7844 |
+
"last_reason": "Condition worsened but remains temporarily transferable",
|
| 7845 |
+
"success_rate": 0.0
|
| 7846 |
+
}
|
| 7847 |
+
},
|
| 7848 |
+
"3": {
|
| 7849 |
+
"H5": {
|
| 7850 |
+
"count": 1,
|
| 7851 |
+
"success": 0,
|
| 7852 |
+
"accepted": 0,
|
| 7853 |
+
"partial": 0,
|
| 7854 |
+
"rejected": 1,
|
| 7855 |
+
"total_reward": 0.001,
|
| 7856 |
+
"avg_reward": 0.001,
|
| 7857 |
+
"last_status": "REJECTED",
|
| 7858 |
+
"last_reason": "Doctor was reassigned to another emergency at arrival",
|
| 7859 |
+
"success_rate": 0.0
|
| 7860 |
+
}
|
| 7861 |
+
},
|
| 7862 |
+
"4": {
|
| 7863 |
+
"H3": {
|
| 7864 |
+
"count": 1,
|
| 7865 |
+
"success": 0,
|
| 7866 |
+
"accepted": 0,
|
| 7867 |
+
"partial": 0,
|
| 7868 |
+
"rejected": 1,
|
| 7869 |
+
"total_reward": 0.001,
|
| 7870 |
+
"avg_reward": 0.001,
|
| 7871 |
+
"last_status": "REJECTED",
|
| 7872 |
+
"last_reason": "Condition became non-transferable during delay; immediate critical care failed",
|
| 7873 |
+
"success_rate": 0.0
|
| 7874 |
+
}
|
| 7875 |
+
}
|
| 7876 |
+
},
|
| 7877 |
+
"last_score": 0.16988124999999998,
|
| 7878 |
+
"last_success": false,
|
| 7879 |
+
"last_run_at": "2026-04-09T05:18:38.648867+00:00",
|
| 7880 |
+
"last_actions": [
|
| 7881 |
+
"H2",
|
| 7882 |
+
"H3",
|
| 7883 |
+
"H5",
|
| 7884 |
+
"H3"
|
| 7885 |
+
],
|
| 7886 |
+
"last_required_specialization": "cardiac",
|
| 7887 |
+
"last_scenario_type": "medical",
|
| 7888 |
+
"last_scenario_name": "Heart Attack (Unstable)",
|
| 7889 |
+
"best_success": false,
|
| 7890 |
+
"best_scenario_name": "Heart Attack (Unstable)",
|
| 7891 |
+
"best_difficulty": "medium",
|
| 7892 |
+
"best_required_specialization": "cardiac"
|
| 7893 |
+
},
|
| 7894 |
+
"850880722|acde_hard": {
|
| 7895 |
+
"attempts": 1,
|
| 7896 |
+
"best_score": 0.45350000000000007,
|
| 7897 |
+
"best_actions": [
|
| 7898 |
+
"H3",
|
| 7899 |
+
"H5"
|
| 7900 |
+
],
|
| 7901 |
+
"best_steps": 2,
|
| 7902 |
+
"step_stats": {
|
| 7903 |
+
"1": {
|
| 7904 |
+
"H3": {
|
| 7905 |
+
"count": 1,
|
| 7906 |
+
"success": 0,
|
| 7907 |
+
"accepted": 0,
|
| 7908 |
+
"partial": 0,
|
| 7909 |
+
"rejected": 1,
|
| 7910 |
+
"total_reward": 0.001,
|
| 7911 |
+
"avg_reward": 0.001,
|
| 7912 |
+
"last_status": "REJECTED",
|
| 7913 |
+
"last_reason": "Hospital cannot admit: ICU unavailable",
|
| 7914 |
+
"success_rate": 0.0
|
| 7915 |
+
}
|
| 7916 |
+
},
|
| 7917 |
+
"2": {
|
| 7918 |
+
"H5": {
|
| 7919 |
+
"count": 1,
|
| 7920 |
+
"success": 1,
|
| 7921 |
+
"accepted": 1,
|
| 7922 |
+
"partial": 0,
|
| 7923 |
+
"rejected": 0,
|
| 7924 |
+
"total_reward": 0.5820000000000001,
|
| 7925 |
+
"avg_reward": 0.5820000000000001,
|
| 7926 |
+
"last_status": "ACCEPTED",
|
| 7927 |
+
"last_reason": "Condition stabilized after progressive treatment",
|
| 7928 |
+
"success_rate": 1.0
|
| 7929 |
+
}
|
| 7930 |
+
}
|
| 7931 |
+
},
|
| 7932 |
+
"last_score": 0.45350000000000007,
|
| 7933 |
+
"last_success": true,
|
| 7934 |
+
"last_run_at": "2026-04-09T05:18:39.464469+00:00",
|
| 7935 |
+
"last_actions": [
|
| 7936 |
+
"H3",
|
| 7937 |
+
"H5"
|
| 7938 |
+
],
|
| 7939 |
+
"last_required_specialization": "cardiac",
|
| 7940 |
+
"last_scenario_type": "medical",
|
| 7941 |
+
"last_scenario_name": "Mass Cardiac Event (Overload)",
|
| 7942 |
+
"best_success": true,
|
| 7943 |
+
"best_scenario_name": "Mass Cardiac Event (Overload)",
|
| 7944 |
+
"best_difficulty": "hard",
|
| 7945 |
+
"best_required_specialization": "cardiac"
|
| 7946 |
+
},
|
| 7947 |
+
"600335717|acde_easy": {
|
| 7948 |
+
"attempts": 1,
|
| 7949 |
+
"best_score": 0.2334,
|
| 7950 |
+
"best_actions": [
|
| 7951 |
+
"H1"
|
| 7952 |
+
],
|
| 7953 |
+
"best_steps": 1,
|
| 7954 |
+
"step_stats": {
|
| 7955 |
+
"1": {
|
| 7956 |
+
"H1": {
|
| 7957 |
+
"count": 1,
|
| 7958 |
+
"success": 0,
|
| 7959 |
+
"accepted": 0,
|
| 7960 |
+
"partial": 0,
|
| 7961 |
+
"rejected": 1,
|
| 7962 |
+
"total_reward": 0.139,
|
| 7963 |
+
"avg_reward": 0.139,
|
| 7964 |
+
"last_status": "REJECTED",
|
| 7965 |
+
"last_reason": "Condition became non-transferable during delay; immediate critical care failed",
|
| 7966 |
+
"success_rate": 0.0
|
| 7967 |
+
}
|
| 7968 |
+
}
|
| 7969 |
+
},
|
| 7970 |
+
"last_score": 0.2334,
|
| 7971 |
+
"last_success": false,
|
| 7972 |
+
"last_run_at": "2026-04-09T05:19:11.834510+00:00",
|
| 7973 |
+
"last_actions": [
|
| 7974 |
+
"H1"
|
| 7975 |
+
],
|
| 7976 |
+
"last_required_specialization": "cardiac",
|
| 7977 |
+
"last_scenario_type": "medical",
|
| 7978 |
+
"last_scenario_name": "Heart Attack (Critical)",
|
| 7979 |
+
"best_success": false,
|
| 7980 |
+
"best_scenario_name": "Heart Attack (Critical)",
|
| 7981 |
+
"best_difficulty": "easy",
|
| 7982 |
+
"best_required_specialization": "cardiac"
|
| 7983 |
+
},
|
| 7984 |
+
"600335718|acde_medium": {
|
| 7985 |
+
"attempts": 1,
|
| 7986 |
+
"best_score": 0.43220000000000003,
|
| 7987 |
+
"best_actions": [
|
| 7988 |
+
"H2",
|
| 7989 |
+
"H4"
|
| 7990 |
+
],
|
| 7991 |
+
"best_steps": 2,
|
| 7992 |
+
"step_stats": {
|
| 7993 |
+
"1": {
|
| 7994 |
+
"H2": {
|
| 7995 |
+
"count": 1,
|
| 7996 |
+
"success": 0,
|
| 7997 |
+
"accepted": 0,
|
| 7998 |
+
"partial": 0,
|
| 7999 |
+
"rejected": 1,
|
| 8000 |
+
"total_reward": 0.109,
|
| 8001 |
+
"avg_reward": 0.109,
|
| 8002 |
+
"last_status": "REJECTED",
|
| 8003 |
+
"last_reason": "Hospital cannot admit: ICU unavailable",
|
| 8004 |
+
"success_rate": 0.0
|
| 8005 |
+
}
|
| 8006 |
+
},
|
| 8007 |
+
"2": {
|
| 8008 |
+
"H4": {
|
| 8009 |
+
"count": 1,
|
| 8010 |
+
"success": 1,
|
| 8011 |
+
"accepted": 1,
|
| 8012 |
+
"partial": 0,
|
| 8013 |
+
"rejected": 0,
|
| 8014 |
+
"total_reward": 0.516,
|
| 8015 |
+
"avg_reward": 0.516,
|
| 8016 |
+
"last_status": "ACCEPTED",
|
| 8017 |
+
"last_reason": "Patient stabilized after delayed admission",
|
| 8018 |
+
"success_rate": 1.0
|
| 8019 |
+
}
|
| 8020 |
+
}
|
| 8021 |
+
},
|
| 8022 |
+
"last_score": 0.43220000000000003,
|
| 8023 |
+
"last_success": true,
|
| 8024 |
+
"last_run_at": "2026-04-09T05:19:12.461036+00:00",
|
| 8025 |
+
"last_actions": [
|
| 8026 |
+
"H2",
|
| 8027 |
+
"H4"
|
| 8028 |
+
],
|
| 8029 |
+
"last_required_specialization": "trauma",
|
| 8030 |
+
"last_scenario_type": "accident",
|
| 8031 |
+
"last_scenario_name": "Urban Pile-up (Rush Hour)",
|
| 8032 |
+
"best_success": true,
|
| 8033 |
+
"best_scenario_name": "Urban Pile-up (Rush Hour)",
|
| 8034 |
+
"best_difficulty": "medium",
|
| 8035 |
+
"best_required_specialization": "trauma"
|
| 8036 |
+
},
|
| 8037 |
+
"600335719|acde_hard": {
|
| 8038 |
+
"attempts": 1,
|
| 8039 |
+
"best_score": 0.15059999999999998,
|
| 8040 |
+
"best_actions": [
|
| 8041 |
+
"H6",
|
| 8042 |
+
"H5"
|
| 8043 |
+
],
|
| 8044 |
+
"best_steps": 2,
|
| 8045 |
+
"step_stats": {
|
| 8046 |
+
"1": {
|
| 8047 |
+
"H6": {
|
| 8048 |
+
"count": 1,
|
| 8049 |
+
"success": 0,
|
| 8050 |
+
"accepted": 0,
|
| 8051 |
+
"partial": 0,
|
| 8052 |
+
"rejected": 1,
|
| 8053 |
+
"total_reward": 0.001,
|
| 8054 |
+
"avg_reward": 0.001,
|
| 8055 |
+
"last_status": "REJECTED",
|
| 8056 |
+
"last_reason": "Hidden mismatch at arrival (wrong risky guess). Rerouting required.",
|
| 8057 |
+
"success_rate": 0.0
|
| 8058 |
+
}
|
| 8059 |
+
},
|
| 8060 |
+
"2": {
|
| 8061 |
+
"H5": {
|
| 8062 |
+
"count": 1,
|
| 8063 |
+
"success": 0,
|
| 8064 |
+
"accepted": 0,
|
| 8065 |
+
"partial": 0,
|
| 8066 |
+
"rejected": 1,
|
| 8067 |
+
"total_reward": 0.001,
|
| 8068 |
+
"avg_reward": 0.001,
|
| 8069 |
+
"last_status": "REJECTED",
|
| 8070 |
+
"last_reason": "Condition became non-transferable during delay; immediate critical care failed",
|
| 8071 |
+
"success_rate": 0.0
|
| 8072 |
+
}
|
| 8073 |
+
}
|
| 8074 |
+
},
|
| 8075 |
+
"last_score": 0.15059999999999998,
|
| 8076 |
+
"last_success": false,
|
| 8077 |
+
"last_run_at": "2026-04-09T05:19:13.261267+00:00",
|
| 8078 |
+
"last_actions": [
|
| 8079 |
+
"H6",
|
| 8080 |
+
"H5"
|
| 8081 |
+
],
|
| 8082 |
+
"last_required_specialization": "general",
|
| 8083 |
+
"last_scenario_type": "fire",
|
| 8084 |
+
"last_scenario_name": "Wildfire Front (Evacuation Gridlock)",
|
| 8085 |
+
"best_success": false,
|
| 8086 |
+
"best_scenario_name": "Wildfire Front (Evacuation Gridlock)",
|
| 8087 |
+
"best_difficulty": "hard",
|
| 8088 |
+
"best_required_specialization": "general"
|
| 8089 |
}
|
| 8090 |
},
|
| 8091 |
"episodes": [
|
|
|
|
| 9964 |
"H5"
|
| 9965 |
],
|
| 9966 |
"timestamp": "2026-04-09T04:57:26.758443+00:00"
|
| 9967 |
+
},
|
| 9968 |
+
{
|
| 9969 |
+
"seed": 865967163,
|
| 9970 |
+
"task_id": "acde_easy",
|
| 9971 |
+
"difficulty": "easy",
|
| 9972 |
+
"required_specialization": "trauma",
|
| 9973 |
+
"scenario_name": "Highway Collision (Severe)",
|
| 9974 |
+
"score": 0.7872000000000001,
|
| 9975 |
+
"success": true,
|
| 9976 |
+
"actions": [
|
| 9977 |
+
"H4",
|
| 9978 |
+
"H1"
|
| 9979 |
+
],
|
| 9980 |
+
"timestamp": "2026-04-09T05:14:40.441962+00:00"
|
| 9981 |
+
},
|
| 9982 |
+
{
|
| 9983 |
+
"seed": 865967164,
|
| 9984 |
+
"task_id": "acde_medium",
|
| 9985 |
+
"difficulty": "medium",
|
| 9986 |
+
"required_specialization": "trauma",
|
| 9987 |
+
"scenario_name": "Urban Pile-up (Rush Hour)",
|
| 9988 |
+
"score": 0.48340000000000005,
|
| 9989 |
+
"success": true,
|
| 9990 |
+
"actions": [
|
| 9991 |
+
"H3",
|
| 9992 |
+
"H2",
|
| 9993 |
+
"H3"
|
| 9994 |
+
],
|
| 9995 |
+
"timestamp": "2026-04-09T05:14:41.433914+00:00"
|
| 9996 |
+
},
|
| 9997 |
+
{
|
| 9998 |
+
"seed": 865967165,
|
| 9999 |
+
"task_id": "acde_hard",
|
| 10000 |
+
"difficulty": "hard",
|
| 10001 |
+
"required_specialization": "trauma",
|
| 10002 |
+
"scenario_name": "Bridge Crash (Infrastructure Blocked)",
|
| 10003 |
+
"score": 0.15059999999999998,
|
| 10004 |
+
"success": false,
|
| 10005 |
+
"actions": [
|
| 10006 |
+
"H6",
|
| 10007 |
+
"H2",
|
| 10008 |
+
"H6",
|
| 10009 |
+
"H3"
|
| 10010 |
+
],
|
| 10011 |
+
"timestamp": "2026-04-09T05:14:43.050718+00:00"
|
| 10012 |
+
},
|
| 10013 |
+
{
|
| 10014 |
+
"seed": 562874771,
|
| 10015 |
+
"task_id": "acde_easy",
|
| 10016 |
+
"difficulty": "easy",
|
| 10017 |
+
"required_specialization": "cardiac",
|
| 10018 |
+
"scenario_name": "Heart Attack (Critical)",
|
| 10019 |
+
"score": 0.4838,
|
| 10020 |
+
"success": true,
|
| 10021 |
+
"actions": [
|
| 10022 |
+
"H4",
|
| 10023 |
+
"H1",
|
| 10024 |
+
"H4"
|
| 10025 |
+
],
|
| 10026 |
+
"timestamp": "2026-04-09T05:18:04.053307+00:00"
|
| 10027 |
+
},
|
| 10028 |
+
{
|
| 10029 |
+
"seed": 562874772,
|
| 10030 |
+
"task_id": "acde_medium",
|
| 10031 |
+
"difficulty": "medium",
|
| 10032 |
+
"required_specialization": "cardiac",
|
| 10033 |
+
"scenario_name": "Heart Attack (Unstable)",
|
| 10034 |
+
"score": 0.9226500000000001,
|
| 10035 |
+
"success": true,
|
| 10036 |
+
"actions": [
|
| 10037 |
+
"H5"
|
| 10038 |
+
],
|
| 10039 |
+
"timestamp": "2026-04-09T05:18:04.467741+00:00"
|
| 10040 |
+
},
|
| 10041 |
+
{
|
| 10042 |
+
"seed": 562874773,
|
| 10043 |
+
"task_id": "acde_hard",
|
| 10044 |
+
"difficulty": "hard",
|
| 10045 |
+
"required_specialization": "general",
|
| 10046 |
+
"scenario_name": "Wildfire Front (Evacuation Gridlock)",
|
| 10047 |
+
"score": 0.17603749999999999,
|
| 10048 |
+
"success": false,
|
| 10049 |
+
"actions": [
|
| 10050 |
+
"H6",
|
| 10051 |
+
"H1",
|
| 10052 |
+
"H4",
|
| 10053 |
+
"H3"
|
| 10054 |
+
],
|
| 10055 |
+
"timestamp": "2026-04-09T05:18:06.091131+00:00"
|
| 10056 |
+
},
|
| 10057 |
+
{
|
| 10058 |
+
"seed": 850880720,
|
| 10059 |
+
"task_id": "acde_easy",
|
| 10060 |
+
"difficulty": "easy",
|
| 10061 |
+
"required_specialization": "general",
|
| 10062 |
+
"scenario_name": "Apartment Fire (Smoke Inhalation)",
|
| 10063 |
+
"score": 0.99,
|
| 10064 |
+
"success": true,
|
| 10065 |
+
"actions": [
|
| 10066 |
+
"H3"
|
| 10067 |
+
],
|
| 10068 |
+
"timestamp": "2026-04-09T05:18:37.126090+00:00"
|
| 10069 |
+
},
|
| 10070 |
+
{
|
| 10071 |
+
"seed": 850880721,
|
| 10072 |
+
"task_id": "acde_medium",
|
| 10073 |
+
"difficulty": "medium",
|
| 10074 |
+
"required_specialization": "cardiac",
|
| 10075 |
+
"scenario_name": "Heart Attack (Unstable)",
|
| 10076 |
+
"score": 0.16988124999999998,
|
| 10077 |
+
"success": false,
|
| 10078 |
+
"actions": [
|
| 10079 |
+
"H2",
|
| 10080 |
+
"H3",
|
| 10081 |
+
"H5",
|
| 10082 |
+
"H3"
|
| 10083 |
+
],
|
| 10084 |
+
"timestamp": "2026-04-09T05:18:38.648867+00:00"
|
| 10085 |
+
},
|
| 10086 |
+
{
|
| 10087 |
+
"seed": 850880722,
|
| 10088 |
+
"task_id": "acde_hard",
|
| 10089 |
+
"difficulty": "hard",
|
| 10090 |
+
"required_specialization": "cardiac",
|
| 10091 |
+
"scenario_name": "Mass Cardiac Event (Overload)",
|
| 10092 |
+
"score": 0.45350000000000007,
|
| 10093 |
+
"success": true,
|
| 10094 |
+
"actions": [
|
| 10095 |
+
"H3",
|
| 10096 |
+
"H5"
|
| 10097 |
+
],
|
| 10098 |
+
"timestamp": "2026-04-09T05:18:39.464469+00:00"
|
| 10099 |
+
},
|
| 10100 |
+
{
|
| 10101 |
+
"seed": 600335717,
|
| 10102 |
+
"task_id": "acde_easy",
|
| 10103 |
+
"difficulty": "easy",
|
| 10104 |
+
"required_specialization": "cardiac",
|
| 10105 |
+
"scenario_name": "Heart Attack (Critical)",
|
| 10106 |
+
"score": 0.2334,
|
| 10107 |
+
"success": false,
|
| 10108 |
+
"actions": [
|
| 10109 |
+
"H1"
|
| 10110 |
+
],
|
| 10111 |
+
"timestamp": "2026-04-09T05:19:11.834510+00:00"
|
| 10112 |
+
},
|
| 10113 |
+
{
|
| 10114 |
+
"seed": 600335718,
|
| 10115 |
+
"task_id": "acde_medium",
|
| 10116 |
+
"difficulty": "medium",
|
| 10117 |
+
"required_specialization": "trauma",
|
| 10118 |
+
"scenario_name": "Urban Pile-up (Rush Hour)",
|
| 10119 |
+
"score": 0.43220000000000003,
|
| 10120 |
+
"success": true,
|
| 10121 |
+
"actions": [
|
| 10122 |
+
"H2",
|
| 10123 |
+
"H4"
|
| 10124 |
+
],
|
| 10125 |
+
"timestamp": "2026-04-09T05:19:12.461036+00:00"
|
| 10126 |
+
},
|
| 10127 |
+
{
|
| 10128 |
+
"seed": 600335719,
|
| 10129 |
+
"task_id": "acde_hard",
|
| 10130 |
+
"difficulty": "hard",
|
| 10131 |
+
"required_specialization": "general",
|
| 10132 |
+
"scenario_name": "Wildfire Front (Evacuation Gridlock)",
|
| 10133 |
+
"score": 0.15059999999999998,
|
| 10134 |
+
"success": false,
|
| 10135 |
+
"actions": [
|
| 10136 |
+
"H6",
|
| 10137 |
+
"H5"
|
| 10138 |
+
],
|
| 10139 |
+
"timestamp": "2026-04-09T05:19:13.261267+00:00"
|
| 10140 |
}
|
| 10141 |
]
|
| 10142 |
}
|
data/learning_memory.json
CHANGED
|
@@ -1,44 +1,44 @@
|
|
| 1 |
{
|
| 2 |
"H2": {
|
| 3 |
-
"success":
|
| 4 |
-
"fail":
|
| 5 |
-
"avg": 0.
|
| 6 |
-
"accepted":
|
| 7 |
-
"rejected":
|
| 8 |
},
|
| 9 |
"H6": {
|
| 10 |
"success": 50,
|
| 11 |
-
"fail":
|
| 12 |
-
"avg": 0.
|
| 13 |
"accepted": 50,
|
| 14 |
-
"rejected":
|
| 15 |
},
|
| 16 |
"H5": {
|
| 17 |
-
"success":
|
| 18 |
-
"fail":
|
| 19 |
-
"avg": 0.
|
| 20 |
-
"accepted":
|
| 21 |
-
"rejected":
|
| 22 |
},
|
| 23 |
"H1": {
|
| 24 |
-
"success":
|
| 25 |
-
"fail":
|
| 26 |
-
"avg": 0.
|
| 27 |
-
"accepted":
|
| 28 |
-
"rejected":
|
| 29 |
},
|
| 30 |
"H3": {
|
| 31 |
-
"success":
|
| 32 |
-
"fail":
|
| 33 |
-
"avg": 0.
|
| 34 |
-
"accepted":
|
| 35 |
-
"rejected":
|
| 36 |
},
|
| 37 |
"H4": {
|
| 38 |
-
"success":
|
| 39 |
-
"fail":
|
| 40 |
-
"avg": 0.
|
| 41 |
-
"accepted":
|
| 42 |
-
"rejected":
|
| 43 |
}
|
| 44 |
}
|
|
|
|
| 1 |
{
|
| 2 |
"H2": {
|
| 3 |
+
"success": 110,
|
| 4 |
+
"fail": 212,
|
| 5 |
+
"avg": 0.337900621118013,
|
| 6 |
+
"accepted": 110,
|
| 7 |
+
"rejected": 212
|
| 8 |
},
|
| 9 |
"H6": {
|
| 10 |
"success": 50,
|
| 11 |
+
"fail": 143,
|
| 12 |
+
"avg": 0.2940440414507777,
|
| 13 |
"accepted": 50,
|
| 14 |
+
"rejected": 143
|
| 15 |
},
|
| 16 |
"H5": {
|
| 17 |
+
"success": 114,
|
| 18 |
+
"fail": 178,
|
| 19 |
+
"avg": 0.38379143835616414,
|
| 20 |
+
"accepted": 114,
|
| 21 |
+
"rejected": 178
|
| 22 |
},
|
| 23 |
"H1": {
|
| 24 |
+
"success": 111,
|
| 25 |
+
"fail": 110,
|
| 26 |
+
"avg": 0.41240090497737525,
|
| 27 |
+
"accepted": 111,
|
| 28 |
+
"rejected": 110
|
| 29 |
},
|
| 30 |
"H3": {
|
| 31 |
+
"success": 102,
|
| 32 |
+
"fail": 156,
|
| 33 |
+
"avg": 0.3559833333333331,
|
| 34 |
+
"accepted": 102,
|
| 35 |
+
"rejected": 156
|
| 36 |
},
|
| 37 |
"H4": {
|
| 38 |
+
"success": 41,
|
| 39 |
+
"fail": 105,
|
| 40 |
+
"avg": 0.34951301369862975,
|
| 41 |
+
"accepted": 41,
|
| 42 |
+
"rejected": 105
|
| 43 |
}
|
| 44 |
}
|
data/trajectory_history.jsonl
CHANGED
|
@@ -326,3 +326,32 @@
|
|
| 326 |
{"seed": 44, "task": "acde_hard", "difficulty": "hard", "step": 1, "state": {"patient_condition": "critical", "remaining_time_minutes": 13.0, "failed_hospitals": [], "visited_hospitals": [], "ambulance_status": "en_route"}, "action": {"hospital_id": "H5", "policy_score": 0.4862574941416685, "strategy": "safe policy + critical triage"}, "outcome": {"status": "REJECTED", "reason": "Hospital cannot admit: ICU unavailable"}, "reward": 0.001}
|
| 327 |
{"seed": 44, "task": "acde_hard", "difficulty": "hard", "step": 2, "state": {"patient_condition": "critical", "remaining_time_minutes": 13.0, "failed_hospitals": ["H2"], "visited_hospitals": ["H2"], "ambulance_status": "rerouting"}, "action": {"hospital_id": "H2", "policy_score": 0.07027740357273131, "strategy": "risk-aware policy + immediate-retry override"}, "outcome": {"status": "REJECTED", "reason": "Hidden mismatch at arrival (wrong risky guess). Rerouting required."}, "reward": 0.001}
|
| 328 |
{"seed": 44, "task": "acde_hard", "difficulty": "hard", "step": 3, "state": {"patient_condition": "critical", "remaining_time_minutes": 13.0, "failed_hospitals": ["H2"], "visited_hospitals": ["H2"], "ambulance_status": "rerouting"}, "action": {"hospital_id": "H5", "policy_score": 0.47341627825998767, "strategy": "risk-aware policy"}, "outcome": {"status": "REJECTED", "reason": "Condition became non-transferable during delay; immediate critical care failed"}, "reward": 0.001}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 326 |
{"seed": 44, "task": "acde_hard", "difficulty": "hard", "step": 1, "state": {"patient_condition": "critical", "remaining_time_minutes": 13.0, "failed_hospitals": [], "visited_hospitals": [], "ambulance_status": "en_route"}, "action": {"hospital_id": "H5", "policy_score": 0.4862574941416685, "strategy": "safe policy + critical triage"}, "outcome": {"status": "REJECTED", "reason": "Hospital cannot admit: ICU unavailable"}, "reward": 0.001}
|
| 327 |
{"seed": 44, "task": "acde_hard", "difficulty": "hard", "step": 2, "state": {"patient_condition": "critical", "remaining_time_minutes": 13.0, "failed_hospitals": ["H2"], "visited_hospitals": ["H2"], "ambulance_status": "rerouting"}, "action": {"hospital_id": "H2", "policy_score": 0.07027740357273131, "strategy": "risk-aware policy + immediate-retry override"}, "outcome": {"status": "REJECTED", "reason": "Hidden mismatch at arrival (wrong risky guess). Rerouting required."}, "reward": 0.001}
|
| 328 |
{"seed": 44, "task": "acde_hard", "difficulty": "hard", "step": 3, "state": {"patient_condition": "critical", "remaining_time_minutes": 13.0, "failed_hospitals": ["H2"], "visited_hospitals": ["H2"], "ambulance_status": "rerouting"}, "action": {"hospital_id": "H5", "policy_score": 0.47341627825998767, "strategy": "risk-aware policy"}, "outcome": {"status": "REJECTED", "reason": "Condition became non-transferable during delay; immediate critical care failed"}, "reward": 0.001}
|
| 329 |
+
{"seed": 865967163, "task": "acde_easy", "difficulty": "easy", "step": 1, "state": {"patient_condition": "serious", "remaining_time_minutes": 20.0, "failed_hospitals": [], "visited_hospitals": [], "ambulance_status": "en_route"}, "action": {"hospital_id": "H4", "policy_score": 0.28522225923842554, "strategy": "safe policy"}, "outcome": {"status": "PARTIAL", "reason": "Critical deterioration managed temporarily; reroute still needed"}, "reward": 0.274}
|
| 330 |
+
{"seed": 865967163, "task": "acde_easy", "difficulty": "easy", "step": 2, "state": {"patient_condition": "stable", "remaining_time_minutes": 20.0, "failed_hospitals": [], "visited_hospitals": ["H4"], "ambulance_status": "in_transit"}, "action": {"hospital_id": "H1", "policy_score": 0.430398797272352, "strategy": "balanced policy"}, "outcome": {"status": "ACCEPTED", "reason": "Patient stabilized after delayed admission"}, "reward": 0.8960000000000001}
|
| 331 |
+
{"seed": 865967164, "task": "acde_medium", "difficulty": "medium", "step": 1, "state": {"patient_condition": "serious", "remaining_time_minutes": 17.0, "failed_hospitals": [], "visited_hospitals": [], "ambulance_status": "en_route"}, "action": {"hospital_id": "H3", "policy_score": 0.3470070739535391, "strategy": "safe policy + anti-stupidity guard"}, "outcome": {"status": "PARTIAL", "reason": "Admitted with delays: doctor delayed"}, "reward": 0.4690000000000001}
|
| 332 |
+
{"seed": 865967164, "task": "acde_medium", "difficulty": "medium", "step": 2, "state": {"patient_condition": "serious", "remaining_time_minutes": 17.0, "failed_hospitals": [], "visited_hospitals": ["H3"], "ambulance_status": "in_transit"}, "action": {"hospital_id": "H2", "policy_score": 0.3155267186726896, "strategy": "balanced policy + anti-stupidity guard"}, "outcome": {"status": "REJECTED", "reason": "Hospital cannot admit: ICU unavailable"}, "reward": 0.079}
|
| 333 |
+
{"seed": 865967164, "task": "acde_medium", "difficulty": "medium", "step": 3, "state": {"patient_condition": "serious", "remaining_time_minutes": 17.0, "failed_hospitals": ["H2"], "visited_hospitals": ["H3", "H2"], "ambulance_status": "rerouting"}, "action": {"hospital_id": "H3", "policy_score": 0.4258905882454945, "strategy": "risk-aware policy + anti-stupidity guard"}, "outcome": {"status": "ACCEPTED", "reason": "Condition stabilized after progressive treatment"}, "reward": 0.532}
|
| 334 |
+
{"seed": 865967165, "task": "acde_hard", "difficulty": "hard", "step": 1, "state": {"patient_condition": "critical", "remaining_time_minutes": 13.0, "failed_hospitals": [], "visited_hospitals": [], "ambulance_status": "en_route"}, "action": {"hospital_id": "H6", "policy_score": 0.3076474962108312, "strategy": "safe policy + critical triage"}, "outcome": {"status": "REJECTED", "reason": "Hospital cannot admit: ICU unavailable"}, "reward": 0.001}
|
| 335 |
+
{"seed": 865967165, "task": "acde_hard", "difficulty": "hard", "step": 2, "state": {"patient_condition": "critical", "remaining_time_minutes": 13.0, "failed_hospitals": ["H6"], "visited_hospitals": ["H6"], "ambulance_status": "rerouting"}, "action": {"hospital_id": "H2", "policy_score": 0.3035629436259161, "strategy": "risk-aware policy + guided-exploration"}, "outcome": {"status": "REJECTED", "reason": "Hospital cannot admit: No specialist available"}, "reward": 0.001}
|
| 336 |
+
{"seed": 865967165, "task": "acde_hard", "difficulty": "hard", "step": 3, "state": {"patient_condition": "critical", "remaining_time_minutes": 13.0, "failed_hospitals": ["H6", "H4"], "visited_hospitals": ["H6", "H4"], "ambulance_status": "rerouting"}, "action": {"hospital_id": "H6", "policy_score": 0.11129517908464792, "strategy": "risk-aware policy + immediate-retry override"}, "outcome": {"status": "REJECTED", "reason": "Hidden mismatch at arrival (wrong risky guess). Rerouting required."}, "reward": 0.001}
|
| 337 |
+
{"seed": 865967165, "task": "acde_hard", "difficulty": "hard", "step": 4, "state": {"patient_condition": "critical", "remaining_time_minutes": 13.0, "failed_hospitals": ["H6", "H4"], "visited_hospitals": ["H6", "H4"], "ambulance_status": "rerouting"}, "action": {"hospital_id": "H3", "policy_score": 0.29586549899480935, "strategy": "risk-aware policy + anti-stupidity guard"}, "outcome": {"status": "REJECTED", "reason": "Hidden mismatch at arrival (wrong risky guess). Rerouting required."}, "reward": 0.001}
|
| 338 |
+
{"seed": 562874771, "task": "acde_easy", "difficulty": "easy", "step": 1, "state": {"patient_condition": "critical", "remaining_time_minutes": 16.0, "failed_hospitals": [], "visited_hospitals": [], "ambulance_status": "en_route"}, "action": {"hospital_id": "H4", "policy_score": 0.2712048097577652, "strategy": "safe policy + critical triage"}, "outcome": {"status": "PARTIAL", "reason": "Critical deterioration managed temporarily; reroute still needed"}, "reward": 0.234}
|
| 339 |
+
{"seed": 562874771, "task": "acde_easy", "difficulty": "easy", "step": 2, "state": {"patient_condition": "critical", "remaining_time_minutes": 16.0, "failed_hospitals": [], "visited_hospitals": ["H4"], "ambulance_status": "in_transit"}, "action": {"hospital_id": "H1", "policy_score": 0.35970778218903066, "strategy": "balanced policy + critical triage"}, "outcome": {"status": "REJECTED", "reason": "Condition became irreversible after delays"}, "reward": 0.008999999999999996}
|
| 340 |
+
{"seed": 562874771, "task": "acde_easy", "difficulty": "easy", "step": 3, "state": {"patient_condition": "critical", "remaining_time_minutes": 16.0, "failed_hospitals": ["H1"], "visited_hospitals": ["H4", "H1"], "ambulance_status": "rerouting"}, "action": {"hospital_id": "H4", "policy_score": 0.4523870351936169, "strategy": "risk-aware policy + anti-stupidity guard"}, "outcome": {"status": "ACCEPTED", "reason": "Emergency stabilization at last attempt"}, "reward": 0.6023999999999999}
|
| 341 |
+
{"seed": 562874772, "task": "acde_medium", "difficulty": "medium", "step": 1, "state": {"patient_condition": "critical", "remaining_time_minutes": 14.0, "failed_hospitals": [], "visited_hospitals": [], "ambulance_status": "en_route"}, "action": {"hospital_id": "H5", "policy_score": 0.330475874967317, "strategy": "safe policy + critical triage"}, "outcome": {"status": "ACCEPTED", "reason": "Patient admitted and treatment began"}, "reward": 0.909}
|
| 342 |
+
{"seed": 562874773, "task": "acde_hard", "difficulty": "hard", "step": 1, "state": {"patient_condition": "critical", "remaining_time_minutes": 11.0, "failed_hospitals": [], "visited_hospitals": [], "ambulance_status": "en_route"}, "action": {"hospital_id": "H6", "policy_score": 0.16730626096306447, "strategy": "safe policy"}, "outcome": {"status": "REJECTED", "reason": "Hospital cannot admit: Hospital overloaded"}, "reward": 0.001}
|
| 343 |
+
{"seed": 562874773, "task": "acde_hard", "difficulty": "hard", "step": 2, "state": {"patient_condition": "critical", "remaining_time_minutes": 11.0, "failed_hospitals": ["H5"], "visited_hospitals": ["H5"], "ambulance_status": "rerouting"}, "action": {"hospital_id": "H1", "policy_score": 0.38920337366242297, "strategy": "risk-aware policy + anti-stupidity guard"}, "outcome": {"status": "PARTIAL", "reason": "Admitted with delays: prolonged transfer strain"}, "reward": 0.40800000000000014}
|
| 344 |
+
{"seed": 562874773, "task": "acde_hard", "difficulty": "hard", "step": 3, "state": {"patient_condition": "critical", "remaining_time_minutes": 11.0, "failed_hospitals": ["H5"], "visited_hospitals": ["H5", "H1"], "ambulance_status": "in_transit"}, "action": {"hospital_id": "H4", "policy_score": 0.09872350410300806, "strategy": "balanced policy + critical triage"}, "outcome": {"status": "REJECTED", "reason": "Hospital cannot admit: ICU unavailable, No specialist available"}, "reward": 0.001}
|
| 345 |
+
{"seed": 562874773, "task": "acde_hard", "difficulty": "hard", "step": 4, "state": {"patient_condition": "critical", "remaining_time_minutes": 11.0, "failed_hospitals": ["H5", "H4"], "visited_hospitals": ["H5", "H1", "H4"], "ambulance_status": "rerouting"}, "action": {"hospital_id": "H3", "policy_score": 0.23065044082853245, "strategy": "risk-aware policy"}, "outcome": {"status": "REJECTED", "reason": "Hospital cannot admit: No specialist available"}, "reward": 0.001}
|
| 346 |
+
{"seed": 850880720, "task": "acde_easy", "difficulty": "easy", "step": 1, "state": {"patient_condition": "serious", "remaining_time_minutes": 18.0, "failed_hospitals": [], "visited_hospitals": [], "ambulance_status": "en_route"}, "action": {"hospital_id": "H3", "policy_score": 0.29399842964915673, "strategy": "safe policy"}, "outcome": {"status": "ACCEPTED", "reason": "Patient admitted and treatment began"}, "reward": 0.999}
|
| 347 |
+
{"seed": 850880721, "task": "acde_medium", "difficulty": "medium", "step": 1, "state": {"patient_condition": "critical", "remaining_time_minutes": 14.0, "failed_hospitals": [], "visited_hospitals": [], "ambulance_status": "en_route"}, "action": {"hospital_id": "H2", "policy_score": 0.4445027887294011, "strategy": "safe policy + anti-stupidity guard"}, "outcome": {"status": "PARTIAL", "reason": "Admitted with delays: prolonged transfer strain, hospital busy but manageable"}, "reward": 0.13650000000000004}
|
| 348 |
+
{"seed": 850880721, "task": "acde_medium", "difficulty": "medium", "step": 2, "state": {"patient_condition": "critical", "remaining_time_minutes": 14.0, "failed_hospitals": [], "visited_hospitals": ["H2"], "ambulance_status": "in_transit"}, "action": {"hospital_id": "H3", "policy_score": 0.4530366133689682, "strategy": "balanced policy + critical triage"}, "outcome": {"status": "PARTIAL", "reason": "Condition worsened but remains temporarily transferable"}, "reward": 0.17400000000000002}
|
| 349 |
+
{"seed": 850880721, "task": "acde_medium", "difficulty": "medium", "step": 3, "state": {"patient_condition": "critical", "remaining_time_minutes": 14.0, "failed_hospitals": [], "visited_hospitals": ["H2", "H3"], "ambulance_status": "in_transit"}, "action": {"hospital_id": "H5", "policy_score": 0.36233580012122824, "strategy": "balanced policy + critical triage"}, "outcome": {"status": "REJECTED", "reason": "Doctor was reassigned to another emergency at arrival"}, "reward": 0.001}
|
| 350 |
+
{"seed": 850880721, "task": "acde_medium", "difficulty": "medium", "step": 4, "state": {"patient_condition": "critical", "remaining_time_minutes": 14.0, "failed_hospitals": ["H1"], "visited_hospitals": ["H2", "H3", "H1"], "ambulance_status": "rerouting"}, "action": {"hospital_id": "H3", "policy_score": 0.2867098759261258, "strategy": "risk-aware policy + immediate-retry override"}, "outcome": {"status": "REJECTED", "reason": "Condition became non-transferable during delay; immediate critical care failed"}, "reward": 0.001}
|
| 351 |
+
{"seed": 850880722, "task": "acde_hard", "difficulty": "hard", "step": 1, "state": {"patient_condition": "critical", "remaining_time_minutes": 12.0, "failed_hospitals": [], "visited_hospitals": [], "ambulance_status": "en_route"}, "action": {"hospital_id": "H3", "policy_score": 0.4706955388080195, "strategy": "safe policy + critical triage"}, "outcome": {"status": "REJECTED", "reason": "Hospital cannot admit: ICU unavailable"}, "reward": 0.001}
|
| 352 |
+
{"seed": 850880722, "task": "acde_hard", "difficulty": "hard", "step": 2, "state": {"patient_condition": "critical", "remaining_time_minutes": 12.0, "failed_hospitals": ["H3"], "visited_hospitals": ["H3"], "ambulance_status": "rerouting"}, "action": {"hospital_id": "H5", "policy_score": 0.46941242001424005, "strategy": "risk-aware policy"}, "outcome": {"status": "ACCEPTED", "reason": "Condition stabilized after progressive treatment"}, "reward": 0.5820000000000001}
|
| 353 |
+
{"seed": 600335717, "task": "acde_easy", "difficulty": "easy", "step": 1, "state": {"patient_condition": "critical", "remaining_time_minutes": 16.0, "failed_hospitals": [], "visited_hospitals": [], "ambulance_status": "en_route"}, "action": {"hospital_id": "H1", "policy_score": 0.3186401093335327, "strategy": "safe policy + critical triage + guided-exploration"}, "outcome": {"status": "REJECTED", "reason": "Condition became non-transferable during delay; immediate critical care failed"}, "reward": 0.139}
|
| 354 |
+
{"seed": 600335718, "task": "acde_medium", "difficulty": "medium", "step": 1, "state": {"patient_condition": "serious", "remaining_time_minutes": 17.0, "failed_hospitals": [], "visited_hospitals": [], "ambulance_status": "en_route"}, "action": {"hospital_id": "H2", "policy_score": 0.4037159167006607, "strategy": "safe policy"}, "outcome": {"status": "REJECTED", "reason": "Hospital cannot admit: ICU unavailable"}, "reward": 0.109}
|
| 355 |
+
{"seed": 600335718, "task": "acde_medium", "difficulty": "medium", "step": 2, "state": {"patient_condition": "serious", "remaining_time_minutes": 17.0, "failed_hospitals": ["H4"], "visited_hospitals": ["H4"], "ambulance_status": "rerouting"}, "action": {"hospital_id": "H4", "policy_score": 0.07313118251968914, "strategy": "risk-aware policy + anti-stupidity guard + immediate-retry override"}, "outcome": {"status": "ACCEPTED", "reason": "Patient stabilized after delayed admission"}, "reward": 0.516}
|
| 356 |
+
{"seed": 600335719, "task": "acde_hard", "difficulty": "hard", "step": 1, "state": {"patient_condition": "critical", "remaining_time_minutes": 11.0, "failed_hospitals": [], "visited_hospitals": [], "ambulance_status": "en_route"}, "action": {"hospital_id": "H6", "policy_score": 0.3244976864117649, "strategy": "safe policy + critical triage + anti-stupidity guard"}, "outcome": {"status": "REJECTED", "reason": "Hidden mismatch at arrival (wrong risky guess). Rerouting required."}, "reward": 0.001}
|
| 357 |
+
{"seed": 600335719, "task": "acde_hard", "difficulty": "hard", "step": 2, "state": {"patient_condition": "critical", "remaining_time_minutes": 11.0, "failed_hospitals": ["H6"], "visited_hospitals": ["H6"], "ambulance_status": "rerouting"}, "action": {"hospital_id": "H5", "policy_score": 0.2976383394515107, "strategy": "risk-aware policy"}, "outcome": {"status": "REJECTED", "reason": "Condition became non-transferable during delay; immediate critical care failed"}, "reward": 0.001}
|
openenv.yaml
CHANGED
|
@@ -24,5 +24,5 @@ contracts:
|
|
| 24 |
reward: app.models.reward.RewardModel
|
| 25 |
info: app.models.reward.StepInfo
|
| 26 |
state: app.models.state.EnvState
|
| 27 |
-
reward_range: [0.
|
| 28 |
done_type: boolean
|
|
|
|
| 24 |
reward: app.models.reward.RewardModel
|
| 25 |
info: app.models.reward.StepInfo
|
| 26 |
state: app.models.state.EnvState
|
| 27 |
+
reward_range: [0.001, 0.999]
|
| 28 |
done_type: boolean
|
pyproject.toml
CHANGED
|
@@ -23,3 +23,6 @@ build-backend = "setuptools.build_meta"
|
|
| 23 |
[tool.setuptools.packages.find]
|
| 24 |
include = ["app*", "server*"]
|
| 25 |
exclude = ["data*"]
|
|
|
|
|
|
|
|
|
|
|
|
| 23 |
[tool.setuptools.packages.find]
|
| 24 |
include = ["app*", "server*"]
|
| 25 |
exclude = ["data*"]
|
| 26 |
+
|
| 27 |
+
[tool.pyrefly]
|
| 28 |
+
search_path = ["."]
|