diff --git a/SmirnovaVYu/docs/data/experiments.py b/SmirnovaVYu/docs/data/experiments.py deleted file mode 100644 index 018a9a9..0000000 --- a/SmirnovaVYu/docs/data/experiments.py +++ /dev/null @@ -1,94 +0,0 @@ -import csv -import time -from typing import List, Dict -from models import Maze -from builders import TextFileMazeBuilder -from strategies import BFSStrategy, DFSStrategy, AStarStrategy -from solver import MazeSolver - - -def run_experiment(maze: Maze, strategy_name: str, strategy, repeats: int = 5) -> Dict: - times = [] - visited_counts = [] - path_lengths = [] - path_found = True - - for _ in range(repeats): - solver = MazeSolver(maze, strategy) - path, stats = solver.solve() - - times.append(stats.time_ms) - visited_counts.append(stats.visited_cells) - path_lengths.append(stats.path_length) - path_found = stats.path_found - - return { - 'strategy': strategy_name, - 'time_mean': sum(times) / len(times), - 'time_min': min(times), - 'time_max': max(times), - 'visited_mean': sum(visited_counts) / len(visited_counts), - 'path_length_mean': sum(path_lengths) / len(path_lengths) if path_found else 0, - 'path_found': path_found - } - - -def run_all_experiments(maze_files: List[str], repeats: int = 5) -> List[Dict]: - builder = TextFileMazeBuilder() - strategies = [ - ('BFS', BFSStrategy()), - ('DFS', DFSStrategy()), - ('A*', AStarStrategy()) - ] - - results = [] - - for maze_file in maze_files: - try: - maze = builder.build_from_file(maze_file) - except (ValueError, FileNotFoundError) as e: - print(f" Ошибка: {e}") - continue - - print(f" Размер: {maze.width}×{maze.height}") - print(f" Старт: ({maze.start.x}, {maze.start.y})") - print(f" Выход: ({maze.exit.x}, {maze.exit.y})") - - for strategy_name, strategy in strategies: - print(f" Тестирование: {strategy_name}") - result = run_experiment(maze, strategy_name, strategy, repeats) - result['maze_file'] = maze_file.split('/')[-1] - result['maze_size'] = f"{maze.width}×{maze.height}" - results.append(result) - - status = "ok" if result['path_found'] else "ne ok" - print(f" {status} Время: {result['time_mean']:.2f} мс, " - f"Посещено: {result['visited_mean']:.0f}, " - f"Путь: {result['path_length_mean']:.0f}") - - return results - - -def save_results_to_csv(results: List[Dict], filename: str = "experiment_results.csv") -> None: - with open(filename, 'w', newline='', encoding='utf-8') as f: - writer = csv.DictWriter(f, fieldnames=[ - 'maze_file', 'maze_size', 'strategy', - 'time_mean', 'time_min', 'time_max', - 'visited_mean', 'path_length_mean', 'path_found' - ]) - writer.writeheader() - writer.writerows(results) - - - -def print_results_table(results: List[Dict]) -> None: - print("\n" + "=" * 80) - print("РЕЗУЛЬТАТЫ ЭКСПЕРИМЕНТОВ") - print("=" * 80) - - for res in results: - print(f"\nЛабиринт: {res['maze_file']}") - print(f" Стратегия: {res['strategy']}") - print(f" Время (ср): {res['time_mean']:.2f} мс") - print(f" Посещено: {res['visited_mean']:.0f} клеток") - print(f" Длина пути: {res['path_length_mean']:.0f}") \ No newline at end of file