2026-rff_mp/lukovnikovde/docs/report_lab_2.md

79 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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