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()
|