2026-rff_mp/lukovnikovde/docs/report_lab_2.md

4.8 KiB
Raw Blame History

Отчёт по лабораторной работе: Поиск пути в лабиринте

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