synapse-x / agents /random_agent.py
Nithin1026's picture
Initial submission Synapse-X
cb330aa
Raw
History Blame Contribute Delete
1.21 kB
"""
Simple random comparison agent.
"""
import random
from typing import Optional, Protocol
from env.models import Action, ActionPayload, Observation, StepResult
ACTION_TYPES = ("execute", "delay", "reallocate")
class SupportsEpisodeEnv(Protocol):
def reset(self) -> Observation:
...
def step(self, action: Action) -> StepResult:
...
def select_random_action(obs: Observation, rng: Optional[random.Random] = None) -> Action:
rng = rng or random.Random()
task_ids = [task.id for task in obs.tasks]
if not task_ids:
return Action(action_type="delay", task_id=0)
return Action(
action_type=rng.choice(ACTION_TYPES),
task_id=rng.choice(task_ids),
)
def run_episode(
env: SupportsEpisodeEnv,
max_steps: int = 30,
rng: Optional[random.Random] = None,
) -> list[ActionPayload]:
rng = rng or random.Random(42)
obs = env.reset()
actions_taken: list[ActionPayload] = []
for _ in range(max_steps):
if obs.episode_done:
break
action = select_random_action(obs, rng=rng)
actions_taken.append(action.model_dump())
obs = env.step(action).observation
return actions_taken