forked from UNN/2026-rff_mp
65 lines
2.0 KiB
Python
65 lines
2.0 KiB
Python
import os
|
||
import sys
|
||
import csv
|
||
from time import perf_counter
|
||
|
||
# Добавляем корневую папку BrychkinKA в sys.path
|
||
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||
|
||
from src.builder.text_file_maze_builder import TextFileMazeBuilder
|
||
from src.strategy.bfs_strategy import BFSStrategy
|
||
from src.strategy.dfs_strategy import DFSStrategy
|
||
from src.strategy.astar_strategy import AStarStrategy
|
||
from src.solver.maze_solver import MazeSolver
|
||
|
||
|
||
def run_experiments():
|
||
builder = TextFileMazeBuilder()
|
||
|
||
strategies = {
|
||
"BFS": BFSStrategy(),
|
||
"DFS": DFSStrategy(),
|
||
"A*": AStarStrategy()
|
||
}
|
||
|
||
# Папка с лабиринтами относительно корня
|
||
root_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||
maze_dir = os.path.join(root_dir, "mazes")
|
||
|
||
files = [f for f in os.listdir(maze_dir) if f.endswith(".txt")]
|
||
|
||
results = []
|
||
|
||
for maze_file in files:
|
||
maze_path = os.path.join(maze_dir, maze_file)
|
||
maze = builder.build_from_file(maze_path)
|
||
|
||
for name, strategy in strategies.items():
|
||
solver = MazeSolver(maze, strategy)
|
||
|
||
t0 = perf_counter()
|
||
stats = solver.solve()
|
||
t1 = perf_counter()
|
||
|
||
results.append([
|
||
maze_file,
|
||
name,
|
||
stats.time_ms,
|
||
stats.visited,
|
||
stats.path_len
|
||
])
|
||
|
||
print(f"{maze_file} | {name} | {stats}")
|
||
|
||
# Сохраняем results.csv в папку experiments
|
||
output_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "results.csv")
|
||
with open(output_path, "w", newline="", encoding="utf-8") as f:
|
||
writer = csv.writer(f)
|
||
writer.writerow(["maze", "algorithm", "time_ms", "visited", "path_len"])
|
||
writer.writerows(results)
|
||
|
||
print(f"\nРезультаты сохранены в {output_path}")
|
||
|
||
|
||
if __name__ == "__main__":
|
||
run_experiments() |