Spaces:
Sleeping
Sleeping
| """ | |
| task1_easy.py | |
| βββββββββββββ | |
| Task 1 β Cognitive Stage Classification (Easy) | |
| """ | |
| from __future__ import annotations | |
| from typing import Callable, Dict, Any, List | |
| from cognitive_env import CogTraceEnv | |
| from patient_simulator import PatientConfig, PatientSimulator | |
| from models import Observation | |
| def _score_prediction(true_stage: int, predicted_stage: int) -> float: | |
| delta = abs(true_stage - predicted_stage) | |
| if delta == 0: | |
| return 0.999 | |
| elif delta == 1: | |
| return 0.50 | |
| elif delta == 2: | |
| return 0.20 | |
| else: | |
| return 0.001 | |
| def grade(results: List[Dict[str, Any]]) -> float: | |
| if not results: | |
| return 0.001 | |
| score = sum(r["score"] for r in results) / len(results) | |
| return max(0.001, min(0.999, score)) | |
| def build_env(seed: int = 0) -> CogTraceEnv: | |
| true_stage = seed % 5 | |
| cfg = PatientConfig( | |
| true_stage=true_stage, | |
| episode_length=1, | |
| decline_rate=0.0, | |
| noise_level=0.5, | |
| anomaly_day=None, | |
| anomaly_duration=0, | |
| seed=seed, | |
| patient_id=f"task1_seed{seed}", | |
| ) | |
| return CogTraceEnv(config=cfg) | |
| def run_episode(env: CogTraceEnv, agent_fn: Callable[[Dict[str, Any]], int]) -> Dict[str, Any]: | |
| obs = env.reset() | |
| obs_dict = obs.model_dump() | |
| true_stage = env._sim.true_stage(0) | |
| predicted = agent_fn(obs_dict) | |
| predicted = max(0, min(4, int(predicted))) | |
| score = _score_prediction(true_stage, predicted) | |
| return { | |
| "true_stage": true_stage, | |
| "predicted_stage": predicted, | |
| "score": score, | |
| "observation": obs_dict, | |
| } |