Spaces:
Running
Running
| """ | |
| Random agent baseline - picks links uniformly at random. | |
| """ | |
| from __future__ import annotations | |
| import random | |
| from src.agents.base import Agent, AgentContext | |
| class RandomAgent(Agent): | |
| """ | |
| Baseline agent that picks a random link on each step. | |
| Used to establish a lower bound on performance. | |
| Can optionally exclude links already in the path to avoid loops. | |
| """ | |
| def __init__(self, avoid_revisits: bool = True, seed: int | None = None) -> None: | |
| """ | |
| Initialize the random agent. | |
| Args: | |
| avoid_revisits: If True, don't revisit pages already in path | |
| seed: Random seed for reproducibility | |
| """ | |
| self._avoid_revisits = avoid_revisits | |
| self._rng = random.Random(seed) | |
| def name(self) -> str: | |
| suffix = "-noloop" if self._avoid_revisits else "" | |
| return f"random{suffix}" | |
| def description(self) -> str: | |
| if self._avoid_revisits: | |
| return "Random selection, avoiding revisits" | |
| return "Uniformly random link selection" | |
| def choose_link(self, context: AgentContext) -> str: | |
| """Pick a random link from available options.""" | |
| candidates = context.available_links | |
| # Optionally filter out visited pages | |
| if self._avoid_revisits: | |
| visited = set(context.path_so_far) | |
| unvisited = [link for link in candidates if link not in visited] | |
| if unvisited: | |
| candidates = unvisited | |
| # Always prefer target if directly available | |
| if context.target_title in candidates: | |
| return context.target_title | |
| return self._rng.choice(candidates) | |