diff --git a/lukovnikovde/docs/report_lab_2.md b/lukovnikovde/docs/report_lab_2.md new file mode 100644 index 0000000..81c3741 --- /dev/null +++ b/lukovnikovde/docs/report_lab_2.md @@ -0,0 +1,79 @@ +# Отчёт по лабораторной работе: Поиск пути в лабиринте + +## 1. Цель работы + +Разработать программу для загрузки лабиринта из текстового файла, поиска пути от старта до выхода с использованием алгоритмов BFS, DFS, A*, сбора статистики (время, посещённые клетки, длина пути) и проведения экспериментального сравнения. + +## 2. Архитектура и использованные паттерны + +- **Builder** (`TextLabyrinthLoader`) – создание лабиринта из файла. +- **Strategy** (`BFS`, `DFS`, `AStar`) – взаимозаменяемые алгоритмы поиска. +- **Observer** (`ConsoleRenderer`) – визуализация событий. +- **Command** (`MoveAction`) – отмена ходов игрока. + +Программа поддерживает интерактивный режим (движение, автопоиск) и режим экспериментов (`python main.py experiment`). + +## 3. Тестовые лабиринты + +| Имя файла | Описание | +|-----------|----------| +| `maze1.txt` | Простой лабиринт 10×6 | +| `maze10x10.txt` | Лабиринт среднего размера 10×10 | +| `maze20x20.txt` | Большой лабиринт 20×20 | +| `maze_empty.txt` | Пустое поле 15×15 (без стен) | +| `maze_no_exit.txt` | Лабиринт без достижимого выхода | + +## 4. Результаты экспериментов + +Каждый алгоритм запускался 3 раза на каждом лабиринте, приведены средние значения. + +| Лабиринт | Алгоритм | Время (мс) | Посещено клеток | Длина пути | +|---------------|----------|------------|-----------------|------------| +| Small 10x6 | BFS | 0.035 | 11.0 | 8 | +| Small 10x6 | DFS | 0.019 | 9.0 | 8 | +| Small 10x6 | A* | 0.047 | 11.0 | 8 | +| Medium 10x10 | BFS | 0.054 | 28.0 | 16 | +| Medium 10x10 | DFS | 0.039 | 23.0 | 18 | +| Medium 10x10 | A* | 0.079 | 21.0 | 16 | +| Large 20x20 | BFS | 0.364 | 183.0 | 35 | +| Large 20x20 | DFS | 0.267 | 194.0 | 103 | +| Large 20x20 | A* | 0.453 | 104.0 | 35 | +| Empty 15x15 | BFS | 0.028 | 16.0 | 16 | +| Empty 15x15 | DFS | 0.028 | 16.0 | 16 | +| Empty 15x15 | A* | 0.051 | 16.0 | 16 | +| No exit 10x10 | BFS | 0.059 | 12.0 | 0 | +| No exit 10x10 | DFS | 0.050 | 12.0 | 0 | +| No exit 10x10 | A* | 0.095 | 12.0 | 0 | + +## 5. График сравнения + +![Сравнение алгоритмов](performance_comparison.png) + +## 6. Проверка соответствия ТЗ + +| Требование | Выполнение | +|------------|------------| +| Загрузка лабиринта из текстового файла (# стена, S старт, E выход) | ok | +| Реализация BFS | ok | +| Реализация DFS | ok | +| Реализация A* | ok | +| Сбор статистики (время, посещённые клетки, длина пути) | ok | +| Сравнительный эксперимент на лабиринтах разной сложности | ok | +| Визуализация результатов (график) | ok | +| Интерактивный режим с отменой ходов | ok | + +## 7. Выводы + +- **BFS** всегда находит кратчайший путь, но на сложных лабиринтах посещает больше клеток, чем A*. +- **DFS** самый быстрый по времени, однако в запутанных лабиринтах даёт неоптимальный путь. +- **A*** показывает лучший баланс: оптимальный путь и наименьшее число посещённых клеток. +- При отсутствии пути все алгоритмы корректно возвращают длину 0. + +**Рекомендация:** для сложных лабиринтов предпочтительнее A*. + +--- + +*Файлы результатов: `experiment_results.csv`, `performance_comparison.png`.* + + +I USE ARCH SAME WITH ME FRIEND IVAN BTW \ No newline at end of file