Spaces:
Sleeping
Sleeping
| #!/usr/bin/env python3 | |
| """ | |
| Benchmark SYNAPSE-X agents across all task difficulties. | |
| """ | |
| import json | |
| import random | |
| import sys | |
| from pathlib import Path | |
| PROJECT_ROOT = Path(__file__).resolve().parents[1] | |
| if str(PROJECT_ROOT) not in sys.path: | |
| sys.path.insert(0, str(PROJECT_ROOT)) | |
| from agents.baseline import run_episode as run_baseline_episode | |
| from agents.random_agent import run_episode as run_random_episode | |
| from env.environment import SynapseXEnvironment | |
| from env.grader import TASK_REGISTRY, TASK_SEEDS, grade, grade_with_variance | |
| def evaluate_agent(agent_name: str, runner): | |
| results = {} | |
| variance = {} | |
| for task_name in TASK_REGISTRY: | |
| task_env = SynapseXEnvironment(task_config=TASK_REGISTRY[task_name], seed=TASK_SEEDS[task_name]) | |
| actions = runner(task_env) | |
| results[task_name] = grade(task_name, actions).model_dump() | |
| variance[task_name] = grade_with_variance( | |
| task_name, | |
| lambda _task_name, _obs, env: runner(env), | |
| ).model_dump() | |
| return {"agent": agent_name, "results": results, "variance": variance} | |
| def main(): | |
| baseline = evaluate_agent("baseline", run_baseline_episode) | |
| random_agent = evaluate_agent( | |
| "random", | |
| lambda env: run_random_episode(env, rng=random.Random(42)), | |
| ) | |
| summary = {"baseline": baseline["results"], "random": random_agent["results"]} | |
| variance_summary = {"baseline": baseline["variance"], "random": random_agent["variance"]} | |
| task_names = list(TASK_REGISTRY.keys()) | |
| print("Agent " + " ".join(f"{task_name:>7}" for task_name in task_names)) | |
| print("-" * (11 + 9 * len(task_names))) | |
| print( | |
| "Random " | |
| + " ".join(f"{summary['random'][task_name]['score']:.4f}" for task_name in task_names) | |
| ) | |
| print( | |
| "Baseline " | |
| + " ".join(f"{summary['baseline'][task_name]['score']:.4f}" for task_name in task_names) | |
| ) | |
| print() | |
| print("Variance mean scores") | |
| print( | |
| "Random " | |
| + " ".join(f"{variance_summary['random'][task_name]['score']:.4f}" for task_name in task_names) | |
| ) | |
| print( | |
| "Baseline " | |
| + " ".join(f"{variance_summary['baseline'][task_name]['score']:.4f}" for task_name in task_names) | |
| ) | |
| print() | |
| print(json.dumps({"canonical": summary, "variance_mean": variance_summary}, indent=2)) | |
| with open(PROJECT_ROOT / "benchmark_results.json", "w", encoding="utf-8") as handle: | |
| json.dump({"canonical": summary, "variance_mean": variance_summary}, handle, indent=2) | |
| if __name__ == "__main__": | |
| main() | |