forked from UNN/2026-rff_mp
[2] FINAL adding report for 2-nd LABA
This commit is contained in:
parent
e080be3fc1
commit
23556d3900
79
lukovnikovde/docs/report_lab_2.md
Normal file
79
lukovnikovde/docs/report_lab_2.md
Normal 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. График сравнения
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## 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
|
||||||
Loading…
Reference in New Issue
Block a user