CogTraceEnv_ / task1_easy.py
Hashblue's picture
Upload folder using huggingface_hub
a523ae1 verified
Raw
History Blame Contribute Delete
1.65 kB
"""
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,
}