2026-rff_mp/lab2/experiments.py

94 lines
1.9 KiB
Python

import csv
import os
from maze_solver import (
TextFileMazeBuilder,
MazeSolver,
BFSStrategy,
DFSStrategy,
AStarStrategy
)
REPEATS = 5
MAZES = [
"simple.txt",
"dead.txt",
"large.txt",
"empty.txt",
"noexit.txt"
]
STRATEGIES = [
("BFS", BFSStrategy()),
("DFS", DFSStrategy()),
("A*", AStarStrategy())
]
def average(values):
return sum(values) / len(values)
def run():
builder = TextFileMazeBuilder()
results = []
for maze_name in MAZES:
filename = os.path.join("lab2", "mazes", maze_name)
print("Maze:", maze_name)
for strategy_name, strategy in STRATEGIES:
times = []
visited = []
path_lengths = []
for _ in range(REPEATS):
maze = builder.build_from_file(filename)
solver = MazeSolver(maze, strategy)
stats = solver.solve()
times.append(stats.time_ms)
visited.append(stats.visited_count)
path_lengths.append(stats.path_length)
results.append([
maze_name,
strategy_name,
average(times),
average(visited),
average(path_lengths)
])
print(
strategy_name,
"time =", average(times),
"visited =", average(visited),
"path =", average(path_lengths)
)
os.makedirs("lab2/docs/data", exist_ok=True)
with open(
"lab2/docs/data/results.csv",
"w",
newline="",
encoding="utf-8"
) as file:
writer = csv.writer(file)
writer.writerow([
"maze",
"strategy",
"time_ms",
"visited_cells",
"path_length"
])
writer.writerows(results)
print("Results saved to lab2/docs/data/results.csv")
if __name__ == "__main__":
run()