30 lines
1.1 KiB
Python
30 lines
1.1 KiB
Python
import csv
|
|
from statistics import mean
|
|
|
|
def run_experiments(maze_files, strategies, runs=5, out_csv="output/results.csv"):
|
|
rows = []
|
|
for maze_name, maze in maze_files.items():
|
|
for strat_name, strat_cls in strategies.items():
|
|
times = []
|
|
visiteds = []
|
|
lengths = []
|
|
for _ in range(runs):
|
|
solver = maze["solver_factory"](strat_cls())
|
|
stats = solver.solve()
|
|
times.append(stats.timeMs)
|
|
visiteds.append(stats.visitedCells)
|
|
lengths.append(stats.pathLength)
|
|
rows.append({
|
|
"maze": maze_name,
|
|
"strategy": strat_name,
|
|
"time_ms": round(mean(times), 3),
|
|
"visited_cells": round(mean(visiteds), 1),
|
|
"path_length": round(mean(lengths), 1)
|
|
})
|
|
|
|
with open(out_csv, "w", newline="", encoding="utf-8") as f:
|
|
writer = csv.DictWriter(f, fieldnames=["maze", "strategy", "time_ms", "visited_cells", "path_length"])
|
|
writer.writeheader()
|
|
writer.writerows(rows)
|
|
|
|
return rows |