2026-rff_mp/kornevma/docs/2/main.py

48 lines
1.7 KiB
Python

import csv
from maze import *
from maze_generator import *
def run_experiments():
maze_configs = [
("small_random", lambda: random_maze(15, 15, wall_prob=0.3)),
("medium_recursive_div", lambda: recursive_division_maze(31, 31)), #odd хз
("large_empty", lambda: empty_maze(100, 100)),
("large_random", lambda: random_maze(100, 100, wall_prob=0.25)),
("no_path", lambda: no_path_maze(20, 20)),
]
algorithms = [("BFS", BFSPathFinding()),
("DFS", DFSPathFinding()),
("A*", AStarPathFinding())]
results = []
for name, gen_func in maze_configs:
maze = gen_func()
for alg_name, strategy in algorithms:
solver = MazeSolver(maze, strategy)
times, visited, lengths = [], [], []
for _ in range(5):
stats = solver.solve()
times.append(stats.time_ms)
visited.append(stats.visited)
lengths.append(stats.path_length)
avg_t = sum(times) / len(times)
avg_v = sum(visited) / len(visited)
avg_l = sum(lengths) / len(lengths)
results.append([name, alg_name, avg_t, avg_v, avg_l])
print(f"{name:20} {alg_name:5} time={avg_t:8.2f}ms visited={avg_v:8.1f} length={avg_l:5.1f}")
with open("results_maze.csv", "w", newline="") as f:
writer = csv.writer(f)
writer.writerow(["maze", "algorithm", "time_ms", "visited", "path_length"])
writer.writerows(results)
print("saved results_maze.csv")
if __name__ == "__main__":
import sys
DEBUG = True
if (len(sys.argv) > 1 and sys.argv[1] == "exp") or DEBUG:
run_experiments()
else:
#run_interactive()
pass