4.8 KiB
4.8 KiB
Отчёт по лабораторной работе: Поиск пути в лабиринте
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. График сравнения
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
