From 51cae5d06509e30dc7fd8a3fa72a7c9335672213 Mon Sep 17 00:00:00 2001 From: komissarovgo Date: Sun, 17 May 2026 15:11:11 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=20=D1=8D=D0=BA=D1=81=D0=BF=D0=B5=D1=80=D0=B8=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D1=82=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D0=B5=20=D1=81?= =?UTF-8?q?=D1=80=D0=B0=D0=B2=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B0=D0=BB?= =?UTF-8?q?=D0=B3=D0=BE=D1=80=D0=B8=D1=82=D0=BC=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../docs2/data2/maze_lab/experiments.py | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 komissarovgo/docs2/data2/maze_lab/experiments.py diff --git a/komissarovgo/docs2/data2/maze_lab/experiments.py b/komissarovgo/docs2/data2/maze_lab/experiments.py new file mode 100644 index 0000000..8abcfc8 --- /dev/null +++ b/komissarovgo/docs2/data2/maze_lab/experiments.py @@ -0,0 +1,65 @@ +import csv +from pathlib import Path +from typing import List, Dict, Any + +from builders import TextFileMazeBuilder +from solver import MazeSolver +from strategies import BFSStrategy, DFSStrategy, AStarStrategy + + +class ExperimentRunner: + + def __init__(self): + self.builder = TextFileMazeBuilder() + self.strategies = [ + BFSStrategy(), + DFSStrategy(), + AStarStrategy() + ] + + def run_experiment(self, maze_file: str, runs: int = 5) -> List[Dict[str, Any]]: + maze = self.builder.build_from_file(maze_file) + results = [] + + for strategy in self.strategies: + solver = MazeSolver(maze, strategy) + + times = [] + path_lengths = [] + + for _ in range(runs): + path, stats = solver.solve() + times.append(stats.time_ms) + path_lengths.append(stats.path_length) + + results.append({ + 'maze': Path(maze_file).stem, + 'strategy': strategy.name, + 'avg_time_ms': sum(times) / runs, + 'min_time_ms': min(times), + 'max_time_ms': max(times), + 'path_length': path_lengths[0] if path_lengths else 0 + }) + + return results + + def run_all_experiments(self, maze_files: List[str], runs: int = 5, + output_file: str = "results/experiment_results.csv"): + all_results = [] + + for maze_file in maze_files: + print(f"Запуск на лабиринте: {maze_file}") + results = self.run_experiment(maze_file, runs) + all_results.extend(results) + + for r in results: + print(f" {r['strategy']}: {r['avg_time_ms']:.3f} мс, путь: {r['path_length']}") + + Path("results").mkdir(exist_ok=True) + with open(output_file, 'w', newline='', encoding='utf-8') as f: + writer = csv.DictWriter(f, fieldnames=all_results[0].keys()) + writer.writeheader() + writer.writerows(all_results) + + print(f"\nРезультаты сохранены в {output_file}") + return all_results \ No newline at end of file