Spaces:
Sleeping
Sleeping
| """Random baseline agent for the hospital environment.""" | |
| from __future__ import annotations | |
| from typing import Optional | |
| import numpy as np | |
| from hospital_env import HospitalEnv | |
| class RandomAgent: | |
| """Uniformly samples an action from ``Discrete(num_actions)``. | |
| Intended purely as a baseline — serves as the lower bound against | |
| which the heuristic and PPO agents are compared in the grader. | |
| """ | |
| def __init__( | |
| self, | |
| num_actions: int = HospitalEnv.NUM_ACTIONS, | |
| seed: Optional[int] = None, | |
| ) -> None: | |
| self.num_actions = int(num_actions) | |
| self.rng = np.random.default_rng(seed) | |
| def act(self, obs: dict) -> int: | |
| """Return a uniformly random action in ``[0, num_actions)``.""" | |
| return int(self.rng.integers(0, self.num_actions)) | |
| def __call__(self, obs: dict) -> int: | |
| return self.act(obs) | |
| def reset(self, seed: Optional[int] = None) -> None: | |
| """Re-seed the underlying RNG.""" | |
| self.rng = np.random.default_rng(seed) | |
| def _main() -> None: | |
| """CLI entry point: grade a :class:`RandomAgent` and dump JSON.""" | |
| import json | |
| from grader import Grader | |
| agent = RandomAgent(seed=0) | |
| grader = Grader(n_episodes_per_scenario=3) | |
| scores = grader.grade(agent) | |
| print(json.dumps(scores, indent=2)) | |
| if __name__ == "__main__": | |
| _main() | |