import csv import sys from pathlib import Path # Adjust sys.path to allow imports from src when run directly BASE_DIR = Path(__file__).resolve().parent sys.path.append(str(BASE_DIR.parent)) from src.builder import TextFileMazeBuilder from src.solver import MazeSolver from src.strategies import AStarStrategy, BFSStrategy, DFSStrategy MAZE_DIR = BASE_DIR / "mazes" def run_benchmarks(): builder = TextFileMazeBuilder() strategies = [ ("BFS", BFSStrategy()), ("DFS", DFSStrategy()), ("A*", AStarStrategy()), ] results = [] for maze_path in sorted(MAZE_DIR.glob("*.txt")): maze_name = maze_path.stem try: maze = builder.build_from_file(maze_path) except Exception as e: continue solver = MazeSolver(maze) for strat_name, strat in strategies: solver.set_strategy(strat) times = [] stats = None for _ in range(10): stats = solver.solve() times.append(stats.time_ms) avg_time = sum(times) / len(times) results.append( { "maze": maze_name, "strategy": strat_name, "time_ms": avg_time, "visited_cells": stats.visited_cells, "path_length": stats.path_length, } ) csv_path = BASE_DIR.parent / "results.csv" with open(csv_path, "w", newline="", encoding="utf-8") as f: writer = csv.DictWriter( f, fieldnames=["maze", "strategy", "time_ms", "visited_cells", "path_length"], ) writer.writeheader() writer.writerows(results) print(f"Benchmark results stored in {csv_path}") if __name__ == "__main__": run_benchmarks()