[2] FINAL adding report for 2-nd LABA

This commit is contained in:
lukovnikovde 2026-05-24 22:48:24 +00:00
parent e080be3fc1
commit 23556d3900

View File

@ -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