4.2 KiB
4.2 KiB
Отчёт по заданию №2
Реализация поиска пути в лабиринте с использованием паттернов проектирования
1. Цель работы
Разработать архитектуру и реализацию системы поиска пути в лабиринте, применив паттерны:
- Builder — построение лабиринта из файла
- Strategy — выбор алгоритма поиска
- Observer — отображение состояния
- Command — управление игроком
Также провести экспериментальное сравнение алгоритмов BFS, DFS и A*.
2. Архитектура проекта
Структура каталогов:
BrychkinKA/
│
├── src/
│ ├── builder/
│ ├── model/
│ ├── solver/
│ ├── strategy/
│ └── ui/
│
├── mazes/
├── experiments/
└── docs/
3. Используемые паттерны
3.1 Builder
Абстрагирует процесс построения лабиринта из текстового файла.
3.2 Strategy
Позволяет переключать алгоритмы поиска пути без изменения остального кода.
3.3 Observer
Используется для отображения состояния лабиринта в консоли.
3.4 Command
Реализует управление игроком и пошаговое перемещение.
4. Диаграмма классов
Диаграмма находится в файле: class_diagram.mmd
5. Эксперименты
Эксперименты проводились на пяти лабиринтах:
- small.txt — простой, проходимый
- medium.txt — средний по сложности
- empty.txt — полностью свободное поле
- no_exit.txt — отсутствует выход
- big.txt — большой лабиринт, путь отсутствует
Алгоритмы:
- BFS
- DFS
- A*
6. Результаты
6.1 Таблица результатов
| Файл | Алгоритм | Посещено | Длина пути |
|---|---|---|---|
| big.txt | BFS | 27 | 0 |
| big.txt | DFS | 27 | 0 |
| big.txt | A* | 27 | 0 |
| empty.txt | BFS | 10 | 10 |
| empty.txt | DFS | 10 | 10 |
| empty.txt | A* | 10 | 10 |
| medium.txt | BFS | 21 | 17 |
| medium.txt | DFS | 19 | 17 |
| medium.txt | A* | 21 | 17 |
| no_exit.txt | BFS | 0 | 0 |
| no_exit.txt | DFS | 0 | 0 |
| no_exit.txt | A* | 0 | 0 |
| small.txt | BFS | 7 | 7 |
| small.txt | DFS | 7 | 7 |
| small.txt | A* | 7 | 7 |
7. Графики
Графики находятся в файле:
experiments/plot_graphs.py
- время работы алгоритмов
- количество посещённых клеток
8. Выводы
- A* показывает лучшие результаты на средних и больших лабиринтах, но имеет небольшой накладной расход.
- DFS посещает меньше клеток, но не гарантирует кратчайший путь.
- BFS всегда находит кратчайший путь, но исследует больше пространства.
- На лабиринтах без выхода все алгоритмы корректно возвращают
path_len = 0. - Архитектура с паттернами позволяет легко расширять проект и добавлять новые алгоритмы.
9. Приложения
- Исходный код
- Лабиринты
- CSV с результатами
- Диаграммы