From ae812457fb41a6239f62aadd3c3b802ed27dab85 Mon Sep 17 00:00:00 2001 From: SobolevNS Date: Fri, 22 May 2026 13:42:42 +0300 Subject: [PATCH 1/7] add maze_solver --- .../data/task2_maze/maze_solver/__init__.py | 18 ++ .../data/task2_maze/maze_solver/builder.py | 92 +++++++++ .../data/task2_maze/maze_solver/command.py | 87 +++++++++ .../docs/data/task2_maze/maze_solver/model.py | 92 +++++++++ .../data/task2_maze/maze_solver/solver.py | 102 ++++++++++ .../data/task2_maze/maze_solver/strategies.py | 179 ++++++++++++++++++ 6 files changed, 570 insertions(+) create mode 100644 SobolevNS/docs/data/task2_maze/maze_solver/__init__.py create mode 100644 SobolevNS/docs/data/task2_maze/maze_solver/builder.py create mode 100644 SobolevNS/docs/data/task2_maze/maze_solver/command.py create mode 100644 SobolevNS/docs/data/task2_maze/maze_solver/model.py create mode 100644 SobolevNS/docs/data/task2_maze/maze_solver/solver.py create mode 100644 SobolevNS/docs/data/task2_maze/maze_solver/strategies.py diff --git a/SobolevNS/docs/data/task2_maze/maze_solver/__init__.py b/SobolevNS/docs/data/task2_maze/maze_solver/__init__.py new file mode 100644 index 0000000..b97570a --- /dev/null +++ b/SobolevNS/docs/data/task2_maze/maze_solver/__init__.py @@ -0,0 +1,18 @@ +"""Пакет maze_solver.""" +from .model import Cell, Maze +from .builder import MazeBuilder, TextFileMazeBuilder +from .strategies import ( + PathFindingStrategy, BFSStrategy, DFSStrategy, + AStarStrategy, DijkstraStrategy, STRATEGIES, +) +from .solver import MazeSolver, Observer, ConsoleView, SearchStats +from .command import Player, Command, MoveCommand, CommandHistory + +__all__ = [ + "Cell", "Maze", + "MazeBuilder", "TextFileMazeBuilder", + "PathFindingStrategy", "BFSStrategy", "DFSStrategy", + "AStarStrategy", "DijkstraStrategy", "STRATEGIES", + "MazeSolver", "Observer", "ConsoleView", "SearchStats", + "Player", "Command", "MoveCommand", "CommandHistory", +] diff --git a/SobolevNS/docs/data/task2_maze/maze_solver/builder.py b/SobolevNS/docs/data/task2_maze/maze_solver/builder.py new file mode 100644 index 0000000..f8f0dc8 --- /dev/null +++ b/SobolevNS/docs/data/task2_maze/maze_solver/builder.py @@ -0,0 +1,92 @@ +""" +maze_solver/builder.py - паттерн Builder для создания лабиринтов. + +Зачем Builder: процесс построения лабиринта сложный (чтение файла, парсинг, +валидация символов, простановка флагов, поиск старта и выхода). Builder +изолирует эти подробности от клиента; для нового формата (JSON, бинарный) +достаточно реализовать ещё один builder с тем же интерфейсом. +""" + +from abc import ABC, abstractmethod +from .model import Cell, Maze + + +class MazeBuilder(ABC): + """Абстрактный билдер лабиринта.""" + + @abstractmethod + def build_from_file(self, filename) -> Maze: + """Возвращает готовый Maze.""" + + +class TextFileMazeBuilder(MazeBuilder): + """Билдер из текстового формата. + + Символы: + '#' - стена + ' ' - проход (вес 1) + 'S' - старт (проходим) + 'E' - выход (проходим) + '.' - асфальт (вес 1) - то же, что пробел + ',' - песок (вес 2) + '~' - болото (вес 3) + + Лишние пробельные символы в начале/конце файла игнорируются, + но внутри строки пробелы значимы (это проходы). + """ + + WEIGHT_MAP = {'.': 1, ',': 2, '~': 3} + + def build_from_file(self, filename) -> Maze: + with open(filename, encoding="utf-8") as f: + raw = f.read().splitlines() + + # отбрасываем пустые строки в конце - частая мелочь + while raw and raw[-1] == "": + raw.pop() + if not raw: + raise ValueError(f"Файл лабиринта {filename!r} пуст.") + + height = len(raw) + width = max(len(line) for line in raw) + + # выравниваем строки по ширине пробелами (если строки разной длины) + lines = [line.ljust(width, '#') for line in raw] + + maze = Maze(width, height) + start_count = 0 + exit_count = 0 + + for y, line in enumerate(lines): + for x, ch in enumerate(line): + cell = self._parse_char(x, y, ch) + maze.grid[y][x] = cell + if cell.is_start: + maze.start = cell + start_count += 1 + if cell.is_exit: + maze.exit_ = cell + exit_count += 1 + + # валидация + if start_count != 1: + raise ValueError( + f"В лабиринте {filename!r} ожидался ровно 1 'S', нашли {start_count}.") + if exit_count != 1: + raise ValueError( + f"В лабиринте {filename!r} ожидался ровно 1 'E', нашли {exit_count}.") + + return maze + + def _parse_char(self, x, y, ch): + if ch == '#': + return Cell(x, y, is_wall=True) + if ch == 'S': + return Cell(x, y, is_start=True, weight=1) + if ch == 'E': + return Cell(x, y, is_exit=True, weight=1) + if ch in self.WEIGHT_MAP: + return Cell(x, y, weight=self.WEIGHT_MAP[ch]) + if ch == ' ': + return Cell(x, y, weight=1) + raise ValueError(f"Неизвестный символ {ch!r} в позиции ({x},{y}).") diff --git a/SobolevNS/docs/data/task2_maze/maze_solver/command.py b/SobolevNS/docs/data/task2_maze/maze_solver/command.py new file mode 100644 index 0000000..e5e99dd --- /dev/null +++ b/SobolevNS/docs/data/task2_maze/maze_solver/command.py @@ -0,0 +1,87 @@ +""" +maze_solver/command.py - паттерн Command. + +Player хранит текущую клетку. MoveCommand двигает игрока в выбранном +направлении и помнит предыдущую позицию для undo. Менеджер CommandHistory +держит стек выполненных команд. +""" + +from abc import ABC, abstractmethod + + +class Player: + """Игрок в лабиринте.""" + + def __init__(self, cell): + self.cell = cell + + @property + def x(self): return self.cell.x + + @property + def y(self): return self.cell.y + + +class Command(ABC): + @abstractmethod + def execute(self): ... + @abstractmethod + def undo(self): ... + + +class MoveCommand(Command): + """Команда перемещения игрока на одну клетку. + + direction: одна из 'W','A','S','D' (вверх, влево, вниз, вправо). + """ + + DELTAS = { + 'W': (0, -1), + 'S': (0, 1), + 'A': (-1, 0), + 'D': (1, 0), + } + + def __init__(self, maze, player, direction): + self.maze = maze + self.player = player + self.direction = direction.upper() + self._prev_cell = None + self._executed = False + + def execute(self): + if self.direction not in self.DELTAS: + return False + dx, dy = self.DELTAS[self.direction] + target = self.maze.get_cell(self.player.x + dx, self.player.y + dy) + if target is None or not target.is_passable(): + return False + self._prev_cell = self.player.cell + self.player.cell = target + self._executed = True + return True + + def undo(self): + if not self._executed: + return False + self.player.cell = self._prev_cell + self._executed = False + return True + + +class CommandHistory: + """Стек выполненных команд (для общего undo).""" + + def __init__(self): + self._stack = [] + + def do(self, cmd): + if cmd.execute(): + self._stack.append(cmd) + return True + return False + + def undo(self): + if not self._stack: + return False + return self._stack.pop().undo() diff --git a/SobolevNS/docs/data/task2_maze/maze_solver/model.py b/SobolevNS/docs/data/task2_maze/maze_solver/model.py new file mode 100644 index 0000000..75de9cf --- /dev/null +++ b/SobolevNS/docs/data/task2_maze/maze_solver/model.py @@ -0,0 +1,92 @@ +""" +maze_solver/model.py - модель лабиринта (этап 1, без паттернов). +""" + +class Cell: + """Клетка лабиринта. + + Атрибуты: + x, y - координаты + is_wall - стена ли + is_start - стартовая клетка + is_exit - клетка выхода + weight - стоимость прохода (по умолчанию 1, для взвешенного режима >1) + """ + __slots__ = ("x", "y", "is_wall", "is_start", "is_exit", "weight") + + def __init__(self, x, y, is_wall=False, is_start=False, is_exit=False, weight=1): + self.x = x + self.y = y + self.is_wall = is_wall + self.is_start = is_start + self.is_exit = is_exit + self.weight = weight + + def is_passable(self): + return not self.is_wall + + def __repr__(self): + return f"Cell({self.x},{self.y},wall={self.is_wall})" + + +class Maze: + """Лабиринт как двумерный массив клеток. + + Атрибуты: + width, height - размеры + grid - список списков клеток [y][x] + start, exit_ - ссылки на клетки старта и выхода (могут быть None при ошибке) + """ + + def __init__(self, width, height): + self.width = width + self.height = height + self.grid = [[Cell(x, y, is_wall=True) for x in range(width)] + for y in range(height)] + self.start = None + self.exit_ = None + + def get_cell(self, x, y): + if 0 <= x < self.width and 0 <= y < self.height: + return self.grid[y][x] + return None + + def get_neighbors(self, cell): + """Соседи (вверх, вниз, влево, вправо), только проходимые и в пределах поля.""" + out = [] + for dx, dy in ((0, -1), (0, 1), (-1, 0), (1, 0)): + nb = self.get_cell(cell.x + dx, cell.y + dy) + if nb is not None and nb.is_passable(): + out.append(nb) + return out + + def render_text(self, path=None, player=None): + """Возвращает текстовое представление лабиринта. + + '#' стена, ' ' проход, 'S' старт, 'E' выход, + '.' клетка пути, '@' игрок. + """ + path_set = set() + if path: + for c in path: + path_set.add((c.x, c.y)) + + lines = [] + for y in range(self.height): + row = [] + for x in range(self.width): + cell = self.grid[y][x] + ch = ' ' + if cell.is_wall: + ch = '#' + elif cell.is_start: + ch = 'S' + elif cell.is_exit: + ch = 'E' + elif (x, y) in path_set: + ch = '.' + if player is not None and player.x == x and player.y == y: + ch = '@' + row.append(ch) + lines.append("".join(row)) + return "\n".join(lines) diff --git a/SobolevNS/docs/data/task2_maze/maze_solver/solver.py b/SobolevNS/docs/data/task2_maze/maze_solver/solver.py new file mode 100644 index 0000000..c3af08d --- /dev/null +++ b/SobolevNS/docs/data/task2_maze/maze_solver/solver.py @@ -0,0 +1,102 @@ +""" +maze_solver/solver.py - оркестратор MazeSolver + паттерн Observer. + +MazeSolver знает лабиринт и текущую стратегию (Strategy). Перед поиском +он уведомляет наблюдателей (Observer) о старте, после поиска - о результате. +""" + +import time +from abc import ABC, abstractmethod + + +# ---------- Observer ---------- + +class Observer(ABC): + """Интерфейс наблюдателя.""" + + @abstractmethod + def update(self, event): + """event - dict с ключом 'type' и сопровождающими данными.""" + + +class ConsoleView(Observer): + """Простой текстовый наблюдатель.""" + + def __init__(self, verbose=True): + self.verbose = verbose + + def update(self, event): + if not self.verbose: + return + t = event["type"] + if t == "maze_loaded": + m = event["maze"] + print(f"[ConsoleView] лабиринт {m.width}x{m.height} загружен") + elif t == "search_start": + print(f"[ConsoleView] старт поиска: {event['strategy']}") + elif t == "search_end": + stats = event["stats"] + print(f"[ConsoleView] поиск окончен: путь={stats['path_length']}, " + f"посещено={stats['visited']}, время={stats['elapsed_ms']:.3f} мс") + elif t == "move": + print(f"[ConsoleView] игрок -> ({event['x']},{event['y']})") + elif t == "path_found": + print("[ConsoleView] путь найден") + elif t == "no_path": + print("[ConsoleView] пути нет") + + +# ---------- MazeSolver ---------- + +class SearchStats(dict): + """Простой dict-подобный контейнер статистики поиска.""" + pass + + +class MazeSolver: + def __init__(self, maze, strategy=None): + self.maze = maze + self.strategy = strategy + self._observers = [] + + def set_strategy(self, strategy): + self.strategy = strategy + + def attach(self, observer): + self._observers.append(observer) + + def detach(self, observer): + self._observers.remove(observer) + + def _notify(self, event): + for obs in self._observers: + obs.update(event) + + def solve(self): + if self.strategy is None: + raise RuntimeError("Стратегия не задана") + if self.maze.start is None or self.maze.exit_ is None: + raise RuntimeError("В лабиринте нет старта или выхода") + + self._notify({"type": "search_start", "strategy": self.strategy.name}) + + t0 = time.perf_counter() + result = self.strategy.find_path(self.maze, + self.maze.start, + self.maze.exit_) + elapsed = (time.perf_counter() - t0) * 1000.0 + + path = result["path"] + stats = SearchStats( + strategy=self.strategy.name, + elapsed_ms=elapsed, + visited=result["visited"], + path_length=len(path), + path=path, + ) + self._notify({"type": "search_end", "stats": stats}) + if path: + self._notify({"type": "path_found"}) + else: + self._notify({"type": "no_path"}) + return stats diff --git a/SobolevNS/docs/data/task2_maze/maze_solver/strategies.py b/SobolevNS/docs/data/task2_maze/maze_solver/strategies.py new file mode 100644 index 0000000..c170bb9 --- /dev/null +++ b/SobolevNS/docs/data/task2_maze/maze_solver/strategies.py @@ -0,0 +1,179 @@ +""" +maze_solver/strategies.py - паттерн Strategy. + +Каждая стратегия реализует один и тот же интерфейс PathFindingStrategy +с методом find_path(maze, start, exit_), возвращающим: + {'path': [Cell, ...], 'visited': int} + +Стратегии не модифицируют сам лабиринт. +""" + +from abc import ABC, abstractmethod +from collections import deque +import heapq + + +# ---------- интерфейс стратегии ---------- + +class PathFindingStrategy(ABC): + name = "Strategy" + + @abstractmethod + def find_path(self, maze, start, exit_): + """Возвращает dict с ключами 'path' (list[Cell]) и 'visited' (int). + Если пути нет - path = [].""" + + +# ---------- общая утилита: восстановление пути ---------- + +def _reconstruct(parents, start, end): + """Восстанавливает путь по словарю предшественников {(x,y): Cell|None}.""" + path = [] + cur = end + while cur is not None: + path.append(cur) + cur = parents.get((cur.x, cur.y)) + path.reverse() + if path and path[0] is start: + return path + return [] + + +# ---------- BFS ---------- + +class BFSStrategy(PathFindingStrategy): + """Поиск в ширину. Гарантирует кратчайший путь по числу шагов + (когда веса всех клеток равны).""" + name = "BFS" + + def find_path(self, maze, start, exit_): + queue = deque([start]) + parents = {(start.x, start.y): None} + visited = 1 + + while queue: + cell = queue.popleft() + if cell is exit_: + return {"path": _reconstruct(parents, start, exit_), + "visited": visited} + for nb in maze.get_neighbors(cell): + key = (nb.x, nb.y) + if key not in parents: + parents[key] = cell + visited += 1 + queue.append(nb) + return {"path": [], "visited": visited} + + +# ---------- DFS ---------- + +class DFSStrategy(PathFindingStrategy): + """Поиск в глубину. Не гарантирует кратчайший путь, но прост и быстр.""" + name = "DFS" + + def find_path(self, maze, start, exit_): + stack = [start] + parents = {(start.x, start.y): None} + visited = 1 + + while stack: + cell = stack.pop() + if cell is exit_: + return {"path": _reconstruct(parents, start, exit_), + "visited": visited} + for nb in maze.get_neighbors(cell): + key = (nb.x, nb.y) + if key not in parents: + parents[key] = cell + visited += 1 + stack.append(nb) + return {"path": [], "visited": visited} + + +# ---------- A* ---------- + +def _manhattan(a, b): + return abs(a.x - b.x) + abs(a.y - b.y) + + +class AStarStrategy(PathFindingStrategy): + """A*-поиск с манхэттенской эвристикой. Учитывает вес клеток (weight).""" + name = "A*" + + def find_path(self, maze, start, exit_): + # f = g + h; в куче храним (f, tie, cell) + g_score = {(start.x, start.y): 0} + parents = {(start.x, start.y): None} + tie = 0 + heap = [(_manhattan(start, exit_), tie, start)] + visited = 0 + closed = set() + + while heap: + f, _, cell = heapq.heappop(heap) + key = (cell.x, cell.y) + if key in closed: + continue + closed.add(key) + visited += 1 + + if cell is exit_: + return {"path": _reconstruct(parents, start, exit_), + "visited": visited} + + for nb in maze.get_neighbors(cell): + nb_key = (nb.x, nb.y) + tentative_g = g_score[key] + nb.weight + if tentative_g < g_score.get(nb_key, float("inf")): + g_score[nb_key] = tentative_g + parents[nb_key] = cell + tie += 1 + heapq.heappush(heap, + (tentative_g + _manhattan(nb, exit_), tie, nb)) + return {"path": [], "visited": visited} + + +# ---------- Дейкстра ---------- + +class DijkstraStrategy(PathFindingStrategy): + """Дейкстра - оптимальный путь с учётом веса клеток. + На немодифицированном лабиринте (все веса = 1) совпадает с BFS.""" + name = "Dijkstra" + + def find_path(self, maze, start, exit_): + dist = {(start.x, start.y): 0} + parents = {(start.x, start.y): None} + tie = 0 + heap = [(0, tie, start)] + visited = 0 + closed = set() + + while heap: + d, _, cell = heapq.heappop(heap) + key = (cell.x, cell.y) + if key in closed: + continue + closed.add(key) + visited += 1 + + if cell is exit_: + return {"path": _reconstruct(parents, start, exit_), + "visited": visited} + + for nb in maze.get_neighbors(cell): + nb_key = (nb.x, nb.y) + nd = d + nb.weight + if nd < dist.get(nb_key, float("inf")): + dist[nb_key] = nd + parents[nb_key] = cell + tie += 1 + heapq.heappush(heap, (nd, tie, nb)) + return {"path": [], "visited": visited} + + +STRATEGIES = { + "BFS": BFSStrategy, + "DFS": DFSStrategy, + "A*": AStarStrategy, + "Dijkstra": DijkstraStrategy, +} From 2f980aaa77f1d5ea30d362ab2a3840d5401dc3a0 Mon Sep 17 00:00:00 2001 From: SobolevNS Date: Fri, 22 May 2026 13:43:23 +0300 Subject: [PATCH 2/7] add mazes --- .../data/task2_maze/mazes/empty_30x30.txt | 30 ++++++ .../data/task2_maze/mazes/large_101x101.txt | 101 ++++++++++++++++++ .../data/task2_maze/mazes/medium_51x51.txt | 51 +++++++++ .../data/task2_maze/mazes/nopath_15x15.txt | 15 +++ .../data/task2_maze/mazes/small_10x10.txt | 10 ++ .../data/task2_maze/mazes/weighted_31x31.txt | 31 ++++++ .../data/task2_maze/mazes/weighted_choice.txt | 13 +++ 7 files changed, 251 insertions(+) create mode 100644 SobolevNS/docs/data/task2_maze/mazes/empty_30x30.txt create mode 100644 SobolevNS/docs/data/task2_maze/mazes/large_101x101.txt create mode 100644 SobolevNS/docs/data/task2_maze/mazes/medium_51x51.txt create mode 100644 SobolevNS/docs/data/task2_maze/mazes/nopath_15x15.txt create mode 100644 SobolevNS/docs/data/task2_maze/mazes/small_10x10.txt create mode 100644 SobolevNS/docs/data/task2_maze/mazes/weighted_31x31.txt create mode 100644 SobolevNS/docs/data/task2_maze/mazes/weighted_choice.txt diff --git a/SobolevNS/docs/data/task2_maze/mazes/empty_30x30.txt b/SobolevNS/docs/data/task2_maze/mazes/empty_30x30.txt new file mode 100644 index 0000000..386c2e4 --- /dev/null +++ b/SobolevNS/docs/data/task2_maze/mazes/empty_30x30.txt @@ -0,0 +1,30 @@ +############################## +#S # +# # +# # +# # +# # +# # +# # +# # +# # +# # +# # +# # +# # +# # +# # +# # +# # +# # +# # +# # +# # +# # +# # +# # +# # +# # +# # +# E# +############################## diff --git a/SobolevNS/docs/data/task2_maze/mazes/large_101x101.txt b/SobolevNS/docs/data/task2_maze/mazes/large_101x101.txt new file mode 100644 index 0000000..e1bd983 --- /dev/null +++ b/SobolevNS/docs/data/task2_maze/mazes/large_101x101.txt @@ -0,0 +1,101 @@ +##################################################################################################### +#S# # # # # # # # # # # # # # # +# ### # ### ### # # # ##### # ####### # ### # # ### # # ######### ### # # # ### ### # # # # ### ##### +# # # # # # # # # # # # # # # # # # # # # # # # # # # # +####### # # # ### # # ### ##### ### ##### # ####### # ######### # # ### ######### # ##### ### # ### # +# # # # # # # # # # # # # # # # # # # # # # # # # +# ##### # ### ### # ##################### ### # # # ####### # ####### ####### # ### # # ### # # # # # +# # # # # # # # # # # # # # # # # # # # # # # # # # # # +# # ########### ########### # # # # ####### ### # ##### # ####### ##### ##### # # # # # # # ### # ### +# # # # # # # # # # # # # # # # # # # # # # # # +# # # # # ####### # ##### ### ##### # ##### # ### # # ### # ######### ### ##### # ##### # ######### # +# # # # # # # # # # # # # # # # # # # # # # # +# ### ### # ### # ### # ########### ##### ### # ### # ### # ### ### # # # ### ##### ################# +# # # # # # # # # # # # # # # # # # # # # # # # # # +# # ### ##### # # ### ########### ### # ### ### # ##### # ####### ##### ### ######### ### # ####### # +# # # # # # # # # # # # # # # # # # # # # # # # # # # +# ### ####### # # # ### # ### ##### # ####### ##### # ####### # # # ##### ######### # # # # ### # ### +# # # # # # # # # # # # # # # # # # # # # # # # # # +### ####### ### # # # ##### # # ### ### # # # ##### # # ### # ##### # ##### ### # # # # ####### ### # +# # # # # # # # # # # # # # # # # # # # # # # # # # # +# ### ### ### ######### # ####### ### # ### ####### ##### ########### # # ### ### ##### # # ### # # # +# # # # # # # # # # # # # # # # # # # # # # # # # # +# # ### # ##### # # # # ### # # # # ########### ####### # # ### # ### # ##### # ### ##### ### ### # # +# # # # # # # # # # # # # # # # # # # # # # # # # # # # +# ### ##### ##### ### # # ####### ########### # # ### # ##### # ### ####### # ### ### # ### ### ### # +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # +### # # # ### # ### # # # # # # ##### ### ### ##### ##### ####### # ### ### # # ####### ######### # # +# # # # # # # # # # # # # # # # # # # # # # # # # +# ### ##### ##### ##### # ##### # # ### ### ##### # ####### # ##### # # # # ### ##### ####### # ##### +# # # # # # # # # # # # # # # # # # # # # # # # # # # +# # ##### ### # ### # # ### # ####### ### # # # # ##### # # # # # # ##### ############# ### ### ### # +# # # # # # # # # # # # # # # # # # # # # # # # # # # +# ### # ### ##### # # # # ### # ### ####### # # ### # ### ##### ##### # ### # ########### ### ### ### +# # # # # # # # # # # # # # # # # # # # # # # # # # +### # ### ### # ##################### # # ### ### ##### # # # ### # ####### # # # ##### # # ### ### # +# # # # # # # # # # # # # # # # # # # # # # # # # # # +# # ####### ############# # # # ### ####### ### ##### ### # # ####### # ####### ### # ### # # ### # # +# # # # # # # # # # # # # # # # # # # # # # # # # # +# ### ### # # # # ########### # # # # ####### # ### ### ### ####### # ####### # ### ### # # ### ### # +# # # # # # # # # # # # # # # # # # # # # # # # # # # # +####### ### # # ######### # ##### ##### ### ### # ### # # ##### # ### # ### ### # ### ####### ### # # +# # # # # # # # # # # # # # # # # # # # # # # # +# # ### ### # ### ##### # ### ### ### ### ### ### # ####### # ##### # ### ######### # # ### ####### # +# # # # # # # # # # # # # # # # # # # # # # # # # # # +# # # ### ### ##### ##### ##### ##### # ##### # ### # ### # ##### # ######### # ### ### # ### ### # # +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # +# # ### # ####### # # # ### # ##### ### # # ### # ##### # ### ######### # # # ### ####### ####### # # +# # # # # # # # # # # # # # # # # # # # # # # # # +# ####### # ### ### # ######### # # # ### ### ### # ######### # # ### ##### ####### ### ##### # # # # +# # # # # # # # # # # # # # # # # # # # # # # # # +# # # ####### ### ####### # ######### ### # ### ########### ### ### ##### ### ### # # # # ######### # +# # # # # # # # # # # # # # # # # # # # # # # # # # +# ### # ####### ##### # ### # ##### ### # # ############# ### ### ##### ### ### ##### # ### # # # ### +# # # # # # # # # # # # # # # # # # # # # # # # # # +### # # ### ####### # # # ##### # ### ### ##### # # ####### # # # # # ####### ### ### # # ### ##### # +# # # # # # # # # # # # # # # # # # # # # # # # # # # # +# ####### ### # # ### ### ######### # ##### # # ### # ### # # # # # ### ######### # # ##### # # # # # +# # # # # # # # # # # # # # # # # # # # # # # # # # # # +# # ### ### ### ####### ##### ####### # ##### # # ##### # ########### ######### ### ##### # ##### # # +# # # # # # # # # # # # # # # # # # # # # # # # +##### ### # # ### ### ##### # ##### ##### ### # ######### # # # # # # ##### ##### ##### # ### # ### # +# # # # # # # # # # # # # # # # # # # # # # # # # # +# ##### # # # ### # ##### # ####### ### # ##### # # # ##### # ##### ### # ### ##### ####### # ##### # +# # # # # # # # # # # # # # # # # # # # # # # # # # +##### ##### ### ### # ########### ### # ##### ### ##### # # # ### ######### # # # # # ### ### ### ### +# # # # # # # # # # # # # # # # # # # # # # # # # # # # +# ### # # # ############# # ####### ####### # # ### # ######### ##### # # ####### # # # # # ### ### # +# # # # # # # # # # # # # # # # # # # # # # # # # +### ##### ### # # # # # ##### ##### ### # # ##### # ##### # ##### # ### ##### # ##### # ##### # ### # +# # # # # # # # # # # # # # # # # # # # # # # # # # # +# ### # # # ### # ######### ### # ### # ############### # ### # # ######### ##### # ### ### # # # # # +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +# # # ####### # # # # # ##### ####### # # ####### # # ##### # # # # # ### # ### # # # ### ### # # # # +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # +### ############# ############### # ### # ####### # # # ####### # ### # ##### ### # ########### # ### +# # # # # # # # # # # # # # # # # # +# ####### ####### # ####### # # ##### ### ##### ### ##### # ##### # ### ##### # ### # ############# # +# # # # # # # # # # # # # # # # # # # # # # # # +# ##### ### ### # # ### # ######### # ##### ##### # # # ##### ### ### # # # ########### ### ### ### # +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # +# # ######### ### ######### # ### # # # ##### # # # # ### ### # ### # ##### ### # ### ### # # # ##### +# # # # # # # # # # # # # # # # # # # # # # # # # +# # ### # # # ### # ### ### # # ### ####### # ######### ####### # ##### ####### ### ########### ### # +# # # # # # # # # # # # # # # # # # # # # # # # # # # +# ### ##### ### ### ### # ### ### # ##### ##### # # # ##### # ##### ####### # ### ########### ### # # +# # # # # # # # # # # # # # # # # # # # # # # # # # +# # ##### ### # # ### ### # ### # ##### ####### ####### ### # ####### ##### # # ### # # ### ### ##### +# # # # # # # # # # # # # # # # # # # # # # # # # # # +# # # # # # ####### ### # ####### # ##### ### ######### # ##### ##### # # # # # # # # ### ### # ### # +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # +# # # ##### # ### # # ########### ##### # # ### # # # ##### # ### ### # # # # ####### # ##### # # # # +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +# ### # # # ### ### ##### # # ### # ####### # # # ##### # # ### # # # # ##### # # # # ######### # # # +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +# ### # # # # # ##### # # # ### # ### ##### # ##### # ##### # ##### ##### # ### # ##### # ### ##### # +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # +### # # # ### # # ######### # # ### # # ##### ### ####### ### ### # # ##### # ####### ### # # # ### # +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # +# # ### ####### ##### # # ### # ##### # # # ######### # # ##### ### ##### ##### ### ### ### # ### # # +# # # # # # # # # # # # #E# +##################################################################################################### diff --git a/SobolevNS/docs/data/task2_maze/mazes/medium_51x51.txt b/SobolevNS/docs/data/task2_maze/mazes/medium_51x51.txt new file mode 100644 index 0000000..dd74392 --- /dev/null +++ b/SobolevNS/docs/data/task2_maze/mazes/medium_51x51.txt @@ -0,0 +1,51 @@ +################################################### +#S# # # # # # # # +# # # ### # ######### # ### # # # # ####### ### ### +# # # # # # # # # # # # # +# # ### # ############### # ######### # ##### # # # +# # # # # # # # # # # # # +##### ### # ##### # ####### # ##### # ### ### ### # +# # # # # # # # # # # # # # # +# # # # ##### # ####### # # ### # # ####### ### # # +# # # # # # # # # # # # # +# ####### # ##### # ######### ### # # ########### # +# # # # # # # # # # # # +# ########### # ### ### ####### # ##### # ### # ### +# # # # # # # # # # # +# # ### ### ##### ### # ##### ############# ##### # +# # # # # # # # # # # # # +##### ### # ### # # # ### # ######### ##### # # # # +# # # # # # # # # # # # +# ##### ################# ####### # # # # ##### # # +# # # # # # # # # # # # +### # ### ############# ##### # # # ### ##### ### # +# # # # # # # # # # # # # # # +# # # # ##### # ### # ######### ### # ### # # # # # +# # # # # # # # # # # # # # +# ### ##### # ######### # ### ### # ######### # ### +# # # # # # # # # # # # # +### ### ##### ### # ##### # ##### # # # # # ####### +# # # # # # # # # # # # # # # +# ##### # # ### ### # # ##### # ### # ####### ### # +# # # # # # # # # # # # # # # +# # # ####### # # ####### # ##### ##### # ##### # # +# # # # # # # # # # # # # # +####### ### ##### # # # # # # # # # ########### # # +# # # # # # # # # # # # # # # # +# ### # # ### ### # # # # # # # # ####### ##### # # +# # # # # # # # # # # # # # # # # +# # ##### # # # ##### # # # # # ####### ### ##### # +# # # # # # # # # # # # # # # +# # # # ############### # # ####### ##### ### # # # +# # # # # # # # # # # # +# # # ##### # ####### # # ################# # ##### +# # # # # # # # # # # # # # +# # ### # ##### # # ### # ### # # ####### # ##### # +# # # # # # # # # # # # # # # # +# # # # ### # # # ################# # # # # # ##### +# # # # # # # # # # # # +# # ### # ####### # ### ### ################# # # # +# # # # # # # # # # # # # +# ### ############# # ### ####### ##### # # ##### # +# # # # E# +################################################### diff --git a/SobolevNS/docs/data/task2_maze/mazes/nopath_15x15.txt b/SobolevNS/docs/data/task2_maze/mazes/nopath_15x15.txt new file mode 100644 index 0000000..569b8ab --- /dev/null +++ b/SobolevNS/docs/data/task2_maze/mazes/nopath_15x15.txt @@ -0,0 +1,15 @@ +############### +#S # +# # +# # +# # +# # +# # +# # +# # +# # +# # +# # +# ### +# #E# +############### diff --git a/SobolevNS/docs/data/task2_maze/mazes/small_10x10.txt b/SobolevNS/docs/data/task2_maze/mazes/small_10x10.txt new file mode 100644 index 0000000..354bac9 --- /dev/null +++ b/SobolevNS/docs/data/task2_maze/mazes/small_10x10.txt @@ -0,0 +1,10 @@ +########## +#S # +# ###### # +# # # +###### # # +# # # # +# ## # # # +# # # # +# ##### E +########## diff --git a/SobolevNS/docs/data/task2_maze/mazes/weighted_31x31.txt b/SobolevNS/docs/data/task2_maze/mazes/weighted_31x31.txt new file mode 100644 index 0000000..97155cf --- /dev/null +++ b/SobolevNS/docs/data/task2_maze/mazes/weighted_31x31.txt @@ -0,0 +1,31 @@ +############################### +#S # ~ ,, # ~#, ,,# +### #####~### ###,#,#####,#,# # +# # # ~~#, ,# #,# #~# #,# +#~#,# # ### #,###,##### ### # # +# # ,#, # # # , # ,#,~ #~# # +# ####### #,#~# ### #~###,# #~# +# ~,,# # # #~# #~ , # # +# ##### #,####### # # ####### # +#, # ,# ,, ,~#, # ~ ~~# #,# +### ########### # ####### # # # +# ~ #, , ~# # # #, #,, # #,# +#,###,###,# # # # ### # ### #,# +#, , , # #, ,#,#, ,~# # ,#~# +# ####### ###,# ####### # ### # +#, #, ~ #~, # ~ , # ~~# +###~#~# ################# ##### +#~ ,# # #,, ,,, ~, ,# , #,#,~,# +# ###,###,##### ###,### # # ### +# , # #~ # , # ,# # , # +### ####### # ###,#####~# #~# # +# # ,, #,# # ~, # # #,# # +# ###########,# ##### ### # #~# +#, ,#~, ,# # ,# , #~# # +# ### ### ##### # ##### ##### # +#~#,# # , ~# #~ # , , # +# # ### ##### #,###########,#,# +# # # ,, #~ ,# ,, # # #~# +# ### #,#######,# ###,# # #,# # +#~, , # , ,~, # ,#~ ,#E# +############################### diff --git a/SobolevNS/docs/data/task2_maze/mazes/weighted_choice.txt b/SobolevNS/docs/data/task2_maze/mazes/weighted_choice.txt new file mode 100644 index 0000000..439cab9 --- /dev/null +++ b/SobolevNS/docs/data/task2_maze/mazes/weighted_choice.txt @@ -0,0 +1,13 @@ +##################### +# # +# # +# # +# ~~~~~ # +# ~~~~~ # +#S ~~~~~ E# +# ~~~~~ # +# ~~~~~ # +# # +# # +# # +##################### From 313fe75c36fbcc752ccb66eb84e6bbd6c1b0d6eb Mon Sep 17 00:00:00 2001 From: SobolevNS Date: Fri, 22 May 2026 13:45:29 +0300 Subject: [PATCH 3/7] generate mazes --- .../docs/data/task2_maze/generate_mazes.py | 146 ++++++++++++++++++ .../task2_maze/generate_weighted_choice.py | 19 +++ 2 files changed, 165 insertions(+) create mode 100644 SobolevNS/docs/data/task2_maze/generate_mazes.py create mode 100644 SobolevNS/docs/data/task2_maze/generate_weighted_choice.py diff --git a/SobolevNS/docs/data/task2_maze/generate_mazes.py b/SobolevNS/docs/data/task2_maze/generate_mazes.py new file mode 100644 index 0000000..0860cb3 --- /dev/null +++ b/SobolevNS/docs/data/task2_maze/generate_mazes.py @@ -0,0 +1,146 @@ +""" +generate_mazes.py - генерирует тестовые лабиринты в mazes/. + +Состав: + small_10x10.txt - маленький с простым путём + medium_50x50.txt - средний с тупиками (DFS-генератор) + large_100x100.txt - большой запутанный (DFS-генератор) + empty_30x30.txt - без стен внутри (только периметр) + nopath_15x15.txt - без пути от S до E (выход замурован) + weighted_30x30.txt - со взвешенными клетками (асфальт/песок/болото) +""" + +import os +import random + +random.seed(2024) + +MAZES_DIR = "mazes" +os.makedirs(MAZES_DIR, exist_ok=True) + + +def write(name, lines): + path = os.path.join(MAZES_DIR, name) + with open(path, "w", encoding="utf-8") as f: + f.write("\n".join(lines) + "\n") + print("written:", path, f"({len(lines)} строк, ширина {len(lines[0])})") + + +def make_small(): + """Маленький лабиринт 10x10, ручной.""" + raw = [ + "##########", + "#S #", + "# ###### #", + "# # #", + "###### # #", + "# # # #", + "# ## # # #", + "# # # #", + "# ##### E", + "##########", + ] + write("small_10x10.txt", raw) + + +def _carve_perfect_maze(w, h, rng): + """Генератор «идеального» лабиринта DFS (recursive backtracker), + итеративный - чтобы не упасть в RecursionError на больших размерах.""" + grid = [['#'] * w for _ in range(h)] + grid[1][1] = ' ' + stack = [(1, 1)] + while stack: + x, y = stack[-1] + dirs = [(0, -2), (0, 2), (-2, 0), (2, 0)] + rng.shuffle(dirs) + carved = False + for dx, dy in dirs: + nx, ny = x + dx, y + dy + if 0 < nx < w - 1 and 0 < ny < h - 1 and grid[ny][nx] == '#': + grid[y + dy // 2][x + dx // 2] = ' ' + grid[ny][nx] = ' ' + stack.append((nx, ny)) + carved = True + break + if not carved: + stack.pop() + return grid + + +def make_with_generator(name, w, h): + """Создаёт перфектный лабиринт и расставляет S/E в противоположных углах.""" + rng = random.Random(hash(name) & 0xFFFF) + grid = _carve_perfect_maze(w, h, rng) + grid[1][1] = 'S' + grid[h - 2][w - 2] = 'E' + lines = ["".join(row) for row in grid] + write(name, lines) + + +def make_empty(name, w, h): + """Пустая комната - только периметр.""" + lines = [] + for y in range(h): + if y == 0 or y == h - 1: + lines.append('#' * w) + else: + lines.append('#' + ' ' * (w - 2) + '#') + # старт в левом верхнем углу, выход в правом нижнем + row = list(lines[1]); row[1] = 'S'; lines[1] = "".join(row) + row = list(lines[h - 2]); row[w - 2] = 'E'; lines[h - 2] = "".join(row) + write(name, lines) + + +def make_nopath(name, w=15, h=15): + """Лабиринт, в котором выход замурован - пути нет.""" + lines = ['#' * w] + for y in range(1, h - 1): + lines.append('#' + ' ' * (w - 2) + '#') + lines.append('#' * w) + # S слева сверху + row = list(lines[1]); row[1] = 'S'; lines[1] = "".join(row) + # E в правой нижней клетке, но обнесён стенами с двух сторон + # делаем «коробочку» 3x3 вокруг E с одним зазором, который мы тут же закроем + ex, ey = w - 2, h - 2 + # сначала откроем коробочку из стен 1 клетка по периметру вокруг E + # построим коробочку: на (ex-1, ey-1)..(ex+1, ey+1) поставим '#' кроме E + for yy in range(ey - 1, ey + 2): + for xx in range(ex - 1, ex + 2): + if 0 <= xx < w and 0 <= yy < h and not (xx == ex and yy == ey): + row = list(lines[yy]); row[xx] = '#'; lines[yy] = "".join(row) + row = list(lines[ey]); row[ex] = 'E'; lines[ey] = "".join(row) + write(name, lines) + + +def make_weighted(name, w=30, h=30): + """Перфектный лабиринт + случайные взвешенные клетки на проходимых местах.""" + rng = random.Random(7) + grid = _carve_perfect_maze(w | 1, h | 1, rng) + # Перекрасим часть проходов в '.', ',' и '~' + for y, row in enumerate(grid): + for x, ch in enumerate(row): + if ch == ' ': + r = rng.random() + if r < 0.65: + grid[y][x] = ' ' # асфальт (1) + elif r < 0.90: + grid[y][x] = ',' # песок (2) + else: + grid[y][x] = '~' # болото (3) + grid[1][1] = 'S' + grid[len(grid) - 2][len(grid[0]) - 2] = 'E' + lines = ["".join(row) for row in grid] + write(name, lines) + + +def main(): + make_small() + make_with_generator("medium_51x51.txt", 51, 51) + make_with_generator("large_101x101.txt", 101, 101) + make_empty("empty_30x30.txt", 30, 30) + make_nopath("nopath_15x15.txt", 15, 15) + make_weighted("weighted_31x31.txt", 31, 31) + + +if __name__ == "__main__": + main() diff --git a/SobolevNS/docs/data/task2_maze/generate_weighted_choice.py b/SobolevNS/docs/data/task2_maze/generate_weighted_choice.py new file mode 100644 index 0000000..a85aa42 --- /dev/null +++ b/SobolevNS/docs/data/task2_maze/generate_weighted_choice.py @@ -0,0 +1,19 @@ +"""generate_weighted_choice.py - создаёт лабиринт, где Dijkstra/A* реально +обходят 'болото' и находят более дешёвый путь, чем BFS.""" +W, H = 21, 13 +grid = [[' '] * W for _ in range(H)] +# периметр +for x in range(W): + grid[0][x] = '#'; grid[H-1][x] = '#' +for y in range(H): + grid[y][0] = '#'; grid[y][W-1] = '#' +# центральное болото 5х5 (вес 3) +for y in range(4, 9): + for x in range(8, 13): + grid[y][x] = '~' +# старт слева в центре, выход справа в центре +grid[H//2][1] = 'S' +grid[H//2][W-2] = 'E' +with open('mazes/weighted_choice.txt','w') as f: + f.write('\n'.join(''.join(row) for row in grid) + '\n') +print(open('mazes/weighted_choice.txt').read()) From 0f03b4edd4096286ff41466284f569f4f1501323 Mon Sep 17 00:00:00 2001 From: SobolevNS Date: Fri, 22 May 2026 13:46:32 +0300 Subject: [PATCH 4/7] add experiment --- .../docs/data/plots/path_compare.png | Bin 0 -> 71183 bytes .../docs/data/plots/time_compare.png | Bin 0 -> 80796 bytes .../docs/data/plots/visited_compare.png | Bin 0 -> 71204 bytes .../data/plots/weighted_choice_compare.png | Bin 0 -> 52098 bytes .../data/task2_maze/docs/data/results.csv | 228 ++++++++++++++++++ SobolevNS/docs/data/task2_maze/experiment.py | 82 +++++++ .../docs/data/task2_maze/plot_results.py | 99 ++++++++ 7 files changed, 409 insertions(+) create mode 100644 SobolevNS/docs/data/task2_maze/docs/data/plots/path_compare.png create mode 100644 SobolevNS/docs/data/task2_maze/docs/data/plots/time_compare.png create mode 100644 SobolevNS/docs/data/task2_maze/docs/data/plots/visited_compare.png create mode 100644 SobolevNS/docs/data/task2_maze/docs/data/plots/weighted_choice_compare.png create mode 100644 SobolevNS/docs/data/task2_maze/docs/data/results.csv create mode 100644 SobolevNS/docs/data/task2_maze/experiment.py create mode 100644 SobolevNS/docs/data/task2_maze/plot_results.py diff --git a/SobolevNS/docs/data/task2_maze/docs/data/plots/path_compare.png b/SobolevNS/docs/data/task2_maze/docs/data/plots/path_compare.png new file mode 100644 index 0000000000000000000000000000000000000000..74f75200e4b5265da1ce8e3ae05e2c02a78ff910 GIT binary patch literal 71183 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�bI0)TFz%_C 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�VPar*6#z7;yv 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 literal 0 HcmV?d00001 diff --git a/SobolevNS/docs/data/task2_maze/docs/data/plots/time_compare.png b/SobolevNS/docs/data/task2_maze/docs/data/plots/time_compare.png new file mode 100644 index 0000000000000000000000000000000000000000..475729b7cbaaf3f9c003bfae6fdbd0245e9b8add GIT binary patch literal 80796 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

iOHjhYoFpv>&Y`m$dt! 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 A#sB~S literal 0 HcmV?d00001 diff --git a/SobolevNS/docs/data/task2_maze/docs/data/plots/visited_compare.png b/SobolevNS/docs/data/task2_maze/docs/data/plots/visited_compare.png new file mode 100644 index 0000000000000000000000000000000000000000..10b33d778edcd701d54915bee20ee832a1881e8d GIT binary patch literal 71204 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%0A}_1!ym7$%Ar2(ed} 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 aTFy?t^7CSp-Bbntn463D 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 literal 0 HcmV?d00001 diff --git a/SobolevNS/docs/data/task2_maze/docs/data/results.csv b/SobolevNS/docs/data/task2_maze/docs/data/results.csv new file mode 100644 index 0000000..264f0b4 --- /dev/null +++ b/SobolevNS/docs/data/task2_maze/docs/data/results.csv @@ -0,0 +1,228 @@ +лабиринт,стратегия,trial,время_мс,посещено_клеток,длина_пути,стоимость_пути +small_10x10,BFS,1,0.0454,34,16,16 +small_10x10,BFS,2,0.0314,34,16,16 +small_10x10,BFS,3,0.0286,34,16,16 +small_10x10,BFS,4,0.0275,34,16,16 +small_10x10,BFS,5,0.0270,34,16,16 +small_10x10,BFS,6,0.0264,34,16,16 +small_10x10,BFS,7,0.0279,34,16,16 +small_10x10,DFS,1,0.0167,18,16,16 +small_10x10,DFS,2,0.0146,18,16,16 +small_10x10,DFS,3,0.0138,18,16,16 +small_10x10,DFS,4,0.0132,18,16,16 +small_10x10,DFS,5,0.0138,18,16,16 +small_10x10,DFS,6,0.0133,18,16,16 +small_10x10,DFS,7,0.0138,18,16,16 +small_10x10,A*,1,0.0585,27,16,16 +small_10x10,A*,2,0.0514,27,16,16 +small_10x10,A*,3,0.0386,27,16,16 +small_10x10,A*,4,0.0366,27,16,16 +small_10x10,A*,5,0.0367,27,16,16 +small_10x10,A*,6,0.0367,27,16,16 +small_10x10,A*,7,0.0356,27,16,16 +small_10x10,Dijkstra,1,0.0467,33,16,16 +small_10x10,Dijkstra,2,0.0409,33,16,16 +small_10x10,Dijkstra,3,0.0395,33,16,16 +small_10x10,Dijkstra,4,0.0396,33,16,16 +small_10x10,Dijkstra,5,0.0642,33,16,16 +small_10x10,Dijkstra,6,0.0404,33,16,16 +small_10x10,Dijkstra,7,0.0392,33,16,16 +medium_51x51,BFS,1,0.5159,524,353,353 +medium_51x51,BFS,2,0.5299,524,353,353 +medium_51x51,BFS,3,0.5232,524,353,353 +medium_51x51,BFS,4,0.4525,524,353,353 +medium_51x51,BFS,5,0.4667,524,353,353 +medium_51x51,BFS,6,0.4594,524,353,353 +medium_51x51,BFS,7,0.4886,524,353,353 +medium_51x51,DFS,1,0.3356,379,353,353 +medium_51x51,DFS,2,0.3270,379,353,353 +medium_51x51,DFS,3,0.3471,379,353,353 +medium_51x51,DFS,4,0.3235,379,353,353 +medium_51x51,DFS,5,0.3309,379,353,353 +medium_51x51,DFS,6,0.3856,379,353,353 +medium_51x51,DFS,7,0.3248,379,353,353 +medium_51x51,A*,1,0.8707,421,353,353 +medium_51x51,A*,2,0.6813,421,353,353 +medium_51x51,A*,3,0.6357,421,353,353 +medium_51x51,A*,4,0.6464,421,353,353 +medium_51x51,A*,5,0.6520,421,353,353 +medium_51x51,A*,6,0.6231,421,353,353 +medium_51x51,A*,7,0.6365,421,353,353 +medium_51x51,Dijkstra,1,0.7634,523,353,353 +medium_51x51,Dijkstra,2,0.6893,523,353,353 +medium_51x51,Dijkstra,3,0.6817,523,353,353 +medium_51x51,Dijkstra,4,0.6965,523,353,353 +medium_51x51,Dijkstra,5,0.6920,523,353,353 +medium_51x51,Dijkstra,6,0.6702,523,353,353 +medium_51x51,Dijkstra,7,0.7281,523,353,353 +large_101x101,BFS,1,3.2679,2143,1265,1265 +large_101x101,BFS,2,1.9302,2143,1265,1265 +large_101x101,BFS,3,1.9559,2143,1265,1265 +large_101x101,BFS,4,1.9057,2143,1265,1265 +large_101x101,BFS,5,1.8770,2143,1265,1265 +large_101x101,BFS,6,1.8828,2143,1265,1265 +large_101x101,BFS,7,1.9345,2143,1265,1265 +large_101x101,DFS,1,1.2758,1443,1265,1265 +large_101x101,DFS,2,1.3043,1443,1265,1265 +large_101x101,DFS,3,1.2613,1443,1265,1265 +large_101x101,DFS,4,1.2846,1443,1265,1265 +large_101x101,DFS,5,1.3566,1443,1265,1265 +large_101x101,DFS,6,1.3296,1443,1265,1265 +large_101x101,DFS,7,1.2501,1443,1265,1265 +large_101x101,A*,1,3.2760,1831,1265,1265 +large_101x101,A*,2,3.3353,1831,1265,1265 +large_101x101,A*,3,4.1894,1831,1265,1265 +large_101x101,A*,4,4.6809,1831,1265,1265 +large_101x101,A*,5,3.4026,1831,1265,1265 +large_101x101,A*,6,3.1036,1831,1265,1265 +large_101x101,A*,7,3.2912,1831,1265,1265 +large_101x101,Dijkstra,1,3.4403,2139,1265,1265 +large_101x101,Dijkstra,2,3.3500,2139,1265,1265 +large_101x101,Dijkstra,3,3.4201,2139,1265,1265 +large_101x101,Dijkstra,4,3.2253,2139,1265,1265 +large_101x101,Dijkstra,5,5.0122,2139,1265,1265 +large_101x101,Dijkstra,6,3.3146,2139,1265,1265 +large_101x101,Dijkstra,7,3.2323,2139,1265,1265 +empty_30x30,BFS,1,0.8417,784,55,55 +empty_30x30,BFS,2,0.8160,784,55,55 +empty_30x30,BFS,3,0.7701,784,55,55 +empty_30x30,BFS,4,0.7609,784,55,55 +empty_30x30,BFS,5,0.7931,784,55,55 +empty_30x30,BFS,6,0.7647,784,55,55 +empty_30x30,BFS,7,0.8047,784,55,55 +empty_30x30,DFS,1,0.5067,784,379,379 +empty_30x30,DFS,2,0.6133,784,379,379 +empty_30x30,DFS,3,0.8051,784,379,379 +empty_30x30,DFS,4,0.4703,784,379,379 +empty_30x30,DFS,5,0.8029,784,379,379 +empty_30x30,DFS,6,0.5463,784,379,379 +empty_30x30,DFS,7,0.4602,784,379,379 +empty_30x30,A*,1,1.5117,784,55,55 +empty_30x30,A*,2,1.4866,784,55,55 +empty_30x30,A*,3,1.5878,784,55,55 +empty_30x30,A*,4,1.8756,784,55,55 +empty_30x30,A*,5,1.4943,784,55,55 +empty_30x30,A*,6,2.0146,784,55,55 +empty_30x30,A*,7,1.5262,784,55,55 +empty_30x30,Dijkstra,1,1.2824,784,55,55 +empty_30x30,Dijkstra,2,1.2897,784,55,55 +empty_30x30,Dijkstra,3,1.3428,784,55,55 +empty_30x30,Dijkstra,4,1.3181,784,55,55 +empty_30x30,Dijkstra,5,1.2785,784,55,55 +empty_30x30,Dijkstra,6,1.3634,784,55,55 +empty_30x30,Dijkstra,7,1.2709,784,55,55 +nopath_15x15,BFS,1,0.1595,165,0,0 +nopath_15x15,BFS,2,0.1705,165,0,0 +nopath_15x15,BFS,3,0.1489,165,0,0 +nopath_15x15,BFS,4,0.1461,165,0,0 +nopath_15x15,BFS,5,0.1972,165,0,0 +nopath_15x15,BFS,6,0.1461,165,0,0 +nopath_15x15,BFS,7,0.1436,165,0,0 +nopath_15x15,DFS,1,0.2023,165,0,0 +nopath_15x15,DFS,2,0.1506,165,0,0 +nopath_15x15,DFS,3,0.1511,165,0,0 +nopath_15x15,DFS,4,0.1477,165,0,0 +nopath_15x15,DFS,5,0.1513,165,0,0 +nopath_15x15,DFS,6,0.1455,165,0,0 +nopath_15x15,DFS,7,0.1654,165,0,0 +nopath_15x15,A*,1,0.2915,165,0,0 +nopath_15x15,A*,2,0.3024,165,0,0 +nopath_15x15,A*,3,0.2743,165,0,0 +nopath_15x15,A*,4,0.2980,165,0,0 +nopath_15x15,A*,5,0.2807,165,0,0 +nopath_15x15,A*,6,0.2838,165,0,0 +nopath_15x15,A*,7,0.3015,165,0,0 +nopath_15x15,Dijkstra,1,0.2476,165,0,0 +nopath_15x15,Dijkstra,2,0.2492,165,0,0 +nopath_15x15,Dijkstra,3,0.2435,165,0,0 +nopath_15x15,Dijkstra,4,0.2869,165,0,0 +nopath_15x15,Dijkstra,5,0.2466,165,0,0 +nopath_15x15,Dijkstra,6,0.2480,165,0,0 +nopath_15x15,Dijkstra,7,0.2445,165,0,0 +weighted_31x31,BFS,1,0.4261,433,265,391 +weighted_31x31,BFS,2,0.3905,433,265,391 +weighted_31x31,BFS,3,0.3713,433,265,391 +weighted_31x31,BFS,4,0.3713,433,265,391 +weighted_31x31,BFS,5,0.3672,433,265,391 +weighted_31x31,BFS,6,0.3788,433,265,391 +weighted_31x31,BFS,7,0.4045,433,265,391 +weighted_31x31,DFS,1,0.2646,318,265,391 +weighted_31x31,DFS,2,0.2761,318,265,391 +weighted_31x31,DFS,3,0.2978,318,265,391 +weighted_31x31,DFS,4,0.2618,318,265,391 +weighted_31x31,DFS,5,0.2717,318,265,391 +weighted_31x31,DFS,6,0.2581,318,265,391 +weighted_31x31,DFS,7,0.2787,318,265,391 +weighted_31x31,A*,1,0.6283,405,265,391 +weighted_31x31,A*,2,0.6319,405,265,391 +weighted_31x31,A*,3,0.7192,405,265,391 +weighted_31x31,A*,4,0.6285,405,265,391 +weighted_31x31,A*,5,0.6179,405,265,391 +weighted_31x31,A*,6,0.6571,405,265,391 +weighted_31x31,A*,7,1.0022,405,265,391 +weighted_31x31,Dijkstra,1,0.8638,431,265,391 +weighted_31x31,Dijkstra,2,0.8008,431,265,391 +weighted_31x31,Dijkstra,3,0.6000,431,265,391 +weighted_31x31,Dijkstra,4,0.6262,431,265,391 +weighted_31x31,Dijkstra,5,0.5502,431,265,391 +weighted_31x31,Dijkstra,6,0.5523,431,265,391 +weighted_31x31,Dijkstra,7,0.5431,431,265,391 +weighted_choice,BFS,1,0.1839,189,19,29 +weighted_choice,BFS,2,0.1642,189,19,29 +weighted_choice,BFS,3,0.1718,189,19,29 +weighted_choice,BFS,4,0.2025,189,19,29 +weighted_choice,BFS,5,0.1855,189,19,29 +weighted_choice,BFS,6,0.1656,189,19,29 +weighted_choice,BFS,7,0.1674,189,19,29 +weighted_choice,DFS,1,0.0238,55,19,29 +weighted_choice,DFS,2,0.0204,55,19,29 +weighted_choice,DFS,3,0.0196,55,19,29 +weighted_choice,DFS,4,0.0201,55,19,29 +weighted_choice,DFS,5,0.0372,55,19,29 +weighted_choice,DFS,6,0.0198,55,19,29 +weighted_choice,DFS,7,0.0198,55,19,29 +weighted_choice,A*,1,0.2451,117,25,25 +weighted_choice,A*,2,0.2572,117,25,25 +weighted_choice,A*,3,0.2276,117,25,25 +weighted_choice,A*,4,0.2337,117,25,25 +weighted_choice,A*,5,0.2305,117,25,25 +weighted_choice,A*,6,0.2742,117,25,25 +weighted_choice,A*,7,0.2275,117,25,25 +weighted_choice,Dijkstra,1,0.3360,209,25,25 +weighted_choice,Dijkstra,2,0.4054,209,25,25 +weighted_choice,Dijkstra,3,0.3169,209,25,25 +weighted_choice,Dijkstra,4,0.3882,209,25,25 +weighted_choice,Dijkstra,5,0.3406,209,25,25 +weighted_choice,Dijkstra,6,0.3182,209,25,25 +weighted_choice,Dijkstra,7,0.3200,209,25,25 + +--- СРЕДНИЕ --- +лабиринт,стратегия,среднее_время_мс,посещено_клеток,длина_пути,стоимость_пути +small_10x10,BFS,0.0306,34,16,16 +small_10x10,DFS,0.0142,18,16,16 +small_10x10,A*,0.0420,27,16,16 +small_10x10,Dijkstra,0.0444,33,16,16 +medium_51x51,BFS,0.4909,524,353,353 +medium_51x51,DFS,0.3392,379,353,353 +medium_51x51,A*,0.6780,421,353,353 +medium_51x51,Dijkstra,0.7030,523,353,353 +large_101x101,BFS,2.1077,2143,1265,1265 +large_101x101,DFS,1.2946,1443,1265,1265 +large_101x101,A*,3.6113,1831,1265,1265 +large_101x101,Dijkstra,3.5707,2139,1265,1265 +empty_30x30,BFS,0.7930,784,55,55 +empty_30x30,DFS,0.6007,784,379,379 +empty_30x30,A*,1.6424,784,55,55 +empty_30x30,Dijkstra,1.3066,784,55,55 +nopath_15x15,BFS,0.1588,165,0,0 +nopath_15x15,DFS,0.1591,165,0,0 +nopath_15x15,A*,0.2903,165,0,0 +nopath_15x15,Dijkstra,0.2523,165,0,0 +weighted_31x31,BFS,0.3871,433,265,391 +weighted_31x31,DFS,0.2727,318,265,391 +weighted_31x31,A*,0.6979,405,265,391 +weighted_31x31,Dijkstra,0.6481,431,265,391 +weighted_choice,BFS,0.1773,189,19,29 +weighted_choice,DFS,0.0230,55,19,29 +weighted_choice,A*,0.2423,117,25,25 +weighted_choice,Dijkstra,0.3465,209,25,25 diff --git a/SobolevNS/docs/data/task2_maze/experiment.py b/SobolevNS/docs/data/task2_maze/experiment.py new file mode 100644 index 0000000..1c84746 --- /dev/null +++ b/SobolevNS/docs/data/task2_maze/experiment.py @@ -0,0 +1,82 @@ +""" +experiment.py - экспериментальное сравнение стратегий поиска пути. + +Для каждого лабиринта × стратегии: + - запускаем solve() TRIALS раз + - усредняем время в мс, фиксируем число посещённых клеток и длину пути + - сохраняем в docs/data/results.csv +""" + +import csv +import os + +from maze_solver import ( + TextFileMazeBuilder, MazeSolver, + BFSStrategy, DFSStrategy, AStarStrategy, DijkstraStrategy, +) + + +TRIALS = 7 + +MAZES = [ + ("small_10x10", "mazes/small_10x10.txt"), + ("medium_51x51", "mazes/medium_51x51.txt"), + ("large_101x101", "mazes/large_101x101.txt"), + ("empty_30x30", "mazes/empty_30x30.txt"), + ("nopath_15x15", "mazes/nopath_15x15.txt"), + ("weighted_31x31", "mazes/weighted_31x31.txt"), + ("weighted_choice","mazes/weighted_choice.txt"), +] + +STRATEGY_CLASSES = [BFSStrategy, DFSStrategy, AStarStrategy, DijkstraStrategy] + +OUT_CSV = "docs/data/results.csv" + + +def main(): + os.makedirs(os.path.dirname(OUT_CSV), exist_ok=True) + builder = TextFileMazeBuilder() + + rows = [["лабиринт", "стратегия", "trial", + "время_мс", "посещено_клеток", "длина_пути", "стоимость_пути"]] + summary = [] + + for maze_name, maze_path in MAZES: + maze = builder.build_from_file(maze_path) + print(f"\n## {maze_name} ({maze.width}x{maze.height})") + + for cls in STRATEGY_CLASSES: + times, visited_vals, path_vals, cost_vals = [], [], [], [] + for trial in range(TRIALS): + solver = MazeSolver(maze, cls()) + stats = solver.solve() + cost = sum(c.weight for c in stats["path"]) + times.append(stats["elapsed_ms"]) + visited_vals.append(stats["visited"]) + path_vals.append(stats["path_length"]) + cost_vals.append(cost) + rows.append([maze_name, stats["strategy"], trial + 1, + f"{stats['elapsed_ms']:.4f}", + stats["visited"], stats["path_length"], cost]) + + mean_t = sum(times) / TRIALS + print(f" {cls.name:9s} t_avg={mean_t:7.3f} ms " + f"visited={visited_vals[0]:5d} " + f"path={path_vals[0]:5d} cost={cost_vals[0]:5d}") + summary.append((maze_name, cls.name, mean_t, + visited_vals[0], path_vals[0], cost_vals[0])) + + rows.append([]) + rows.append(["--- СРЕДНИЕ ---"]) + rows.append(["лабиринт", "стратегия", "среднее_время_мс", + "посещено_клеток", "длина_пути", "стоимость_пути"]) + for r in summary: + rows.append([r[0], r[1], f"{r[2]:.4f}", r[3], r[4], r[5]]) + + with open(OUT_CSV, "w", newline="", encoding="utf-8") as f: + csv.writer(f).writerows(rows) + print(f"\nГотово. Результаты записаны в {OUT_CSV}") + + +if __name__ == "__main__": + main() diff --git a/SobolevNS/docs/data/task2_maze/plot_results.py b/SobolevNS/docs/data/task2_maze/plot_results.py new file mode 100644 index 0000000..24913ba --- /dev/null +++ b/SobolevNS/docs/data/task2_maze/plot_results.py @@ -0,0 +1,99 @@ +"""plot_results.py - графики для эксперимента с лабиринтами.""" +import csv +import os +import matplotlib.pyplot as plt +import numpy as np + +CSV = "docs/data/results.csv" +PLOTS = "docs/data/plots" +os.makedirs(PLOTS, exist_ok=True) + + +def load_means(): + """Возвращает dict[(maze, strategy)] = (time_ms, visited, path_len, cost).""" + out = {} + with open(CSV, encoding="utf-8") as f: + rows = list(csv.reader(f)) + start = next(i for i, r in enumerate(rows) if r and r[0] == "--- СРЕДНИЕ ---") + 2 + for r in rows[start:]: + if not r: + continue + maze, strat, t, vis, plen, cost = r + out[(maze, strat)] = (float(t), int(vis), int(plen), int(cost)) + return out + + +MAZES = ["small_10x10", "medium_51x51", "large_101x101", + "empty_30x30", "nopath_15x15", + "weighted_31x31", "weighted_choice"] +STRATEGIES = ["BFS", "DFS", "A*", "Dijkstra"] +COLORS = {"BFS": "#3498db", "DFS": "#e67e22", "A*": "#2ecc71", "Dijkstra": "#9b59b6"} + + +def grouped_bar(means, idx, ylabel, title, fname, log=True): + x = np.arange(len(MAZES)) + w = 0.2 + fig, ax = plt.subplots(figsize=(11, 5)) + for i, s in enumerate(STRATEGIES): + vals = [means[(m, s)][idx] for m in MAZES] + bars = ax.bar(x + (i - 1.5) * w, vals, w, label=s, color=COLORS[s], alpha=0.9) + for b, v in zip(bars, vals): + ax.text(b.get_x() + b.get_width() / 2, b.get_height(), + f"{v:g}", ha="center", va="bottom", fontsize=7, rotation=0) + ax.set_xticks(x) + ax.set_xticklabels(MAZES, rotation=20, ha="right") + ax.set_ylabel(ylabel) + ax.set_title(title) + if log: + ax.set_yscale("log") + ax.legend() + ax.grid(axis="y", linestyle="--", alpha=0.4) + plt.tight_layout() + p = os.path.join(PLOTS, fname) + plt.savefig(p, dpi=130) + plt.close() + print("saved:", p) + + +def weighted_choice_chart(means): + """Отдельный график для weighted_choice: путь vs стоимость.""" + strategies = STRATEGIES + lengths = [means[("weighted_choice", s)][2] for s in strategies] + costs = [means[("weighted_choice", s)][3] for s in strategies] + x = np.arange(len(strategies)) + w = 0.35 + fig, ax = plt.subplots(figsize=(7.5, 4.5)) + b1 = ax.bar(x - w/2, lengths, w, label="длина пути (клеток)", + color="#3498db", alpha=0.9) + b2 = ax.bar(x + w/2, costs, w, label="стоимость пути (сумма весов)", + color="#e74c3c", alpha=0.9) + for bars in (b1, b2): + for bar in bars: + ax.text(bar.get_x() + bar.get_width() / 2, bar.get_height(), + f"{bar.get_height():.0f}", ha="center", va="bottom", fontsize=9) + ax.set_xticks(x); ax.set_xticklabels(strategies) + ax.set_title("weighted_choice: BFS/DFS режут через болото,\n" + "Dijkstra/A* находят более дешёвый обход") + ax.set_ylabel("значение") + ax.legend() + ax.grid(axis="y", linestyle="--", alpha=0.4) + plt.tight_layout() + p = os.path.join(PLOTS, "weighted_choice_compare.png") + plt.savefig(p, dpi=130) + plt.close() + print("saved:", p) + + +def main(): + means = load_means() + grouped_bar(means, 0, "Время, мс (среднее по 7 запускам, лог. шкала)", + "Время поиска пути", "time_compare.png", log=True) + grouped_bar(means, 1, "Число посещённых клеток (лог. шкала)", + "Сколько клеток посетил алгоритм", "visited_compare.png", log=True) + grouped_bar(means, 2, "Длина пути (клеток)", + "Длина найденного пути", "path_compare.png", log=False) + weighted_choice_chart(means) + + +if __name__ == "__main__": + main() From 70c8bbf3e7aa3fbf9e0605bd1285a341ac55726a Mon Sep 17 00:00:00 2001 From: SobolevNS Date: Fri, 22 May 2026 13:48:08 +0300 Subject: [PATCH 5/7] add demo --- SobolevNS/docs/data/task2_maze/demo.py | 54 ++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 SobolevNS/docs/data/task2_maze/demo.py diff --git a/SobolevNS/docs/data/task2_maze/demo.py b/SobolevNS/docs/data/task2_maze/demo.py new file mode 100644 index 0000000..623e5dc --- /dev/null +++ b/SobolevNS/docs/data/task2_maze/demo.py @@ -0,0 +1,54 @@ +""" +demo.py - короткая демонстрация всех паттернов на маленьком лабиринте. +""" + +from maze_solver import ( + TextFileMazeBuilder, MazeSolver, ConsoleView, + BFSStrategy, DFSStrategy, AStarStrategy, DijkstraStrategy, + Player, MoveCommand, CommandHistory, +) + + +def main(): + print("=== Builder: загружаем small_10x10.txt ===") + builder = TextFileMazeBuilder() + maze = builder.build_from_file("mazes/small_10x10.txt") + + view = ConsoleView(verbose=True) + view.update({"type": "maze_loaded", "maze": maze}) + + print("\nСам лабиринт:") + print(maze.render_text()) + + print("\n=== Strategy: пробуем все 4 алгоритма ===") + solver = MazeSolver(maze) + solver.attach(view) + + for cls in (BFSStrategy, DFSStrategy, AStarStrategy, DijkstraStrategy): + solver.set_strategy(cls()) + stats = solver.solve() + print(f"--- {stats['strategy']} путь длиной {stats['path_length']} ---") + print(maze.render_text(path=stats['path'])) + print() + + print("=== Command: пройдёмся вручную и сделаем undo ===") + player = Player(maze.start) + history = CommandHistory() + print(f"стартовая позиция: ({player.x},{player.y})") + + # Несколько шагов вправо + for d in "DDDD": + ok = history.do(MoveCommand(maze, player, d)) + print(f" move {d}: {'ok' if ok else 'blocked'} -> ({player.x},{player.y})") + + print("Откатываем 2 хода (undo, undo):") + history.undo() + history.undo() + print(f" теперь игрок в ({player.x},{player.y})") + + print("\nЛабиринт с игроком:") + print(maze.render_text(player=player)) + + +if __name__ == "__main__": + main() From 5aac691724141b805b915ca6b0f7be1ce171bc54 Mon Sep 17 00:00:00 2001 From: SobolevNS Date: Fri, 22 May 2026 13:48:25 +0300 Subject: [PATCH 6/7] add README --- SobolevNS/docs/data/task2_maze/README.md | 33 ++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 SobolevNS/docs/data/task2_maze/README.md diff --git a/SobolevNS/docs/data/task2_maze/README.md b/SobolevNS/docs/data/task2_maze/README.md new file mode 100644 index 0000000..57aed7c --- /dev/null +++ b/SobolevNS/docs/data/task2_maze/README.md @@ -0,0 +1,33 @@ +# Задание 2. Поиск выхода из лабиринта (паттерны GoF) + +Применены 4 паттерна: **Builder**, **Strategy**, **Observer**, **Command**. + +## Как запустить + +```bash +# 1) сгенерировать тестовые лабиринты +python3 generate_mazes.py +python3 generate_weighted_choice.py + +# 2) демонстрация всех паттернов на маленьком лабиринте +python3 demo.py + +# 3) эксперимент: 7 запусков × 4 стратегии × 7 лабиринтов +python3 experiment.py +# результат -> docs/data/results.csv + +# 4) графики +python3 plot_results.py +# результат -> docs/data/plots/*.png +``` + +## Формат лабиринта (текстовый) + +| Символ | Что означает | +| --- | --- | +| `#` | стена | +| ` ` (пробел) или `.` | проход, вес 1 (асфальт) | +| `,` | проход, вес 2 (песок) | +| `~` | проход, вес 3 (болото) | +| `S` | старт (ровно один) | +| `E` | выход (ровно один) | From 24f11880e1f5340dd946787078dc177c965aab23 Mon Sep 17 00:00:00 2001 From: SobolevNS Date: Fri, 22 May 2026 13:48:52 +0300 Subject: [PATCH 7/7] add maze report --- SobolevNS/docs/report_02.md | 364 ++++++++++++++++++++++++++++++++++++ 1 file changed, 364 insertions(+) create mode 100644 SobolevNS/docs/report_02.md diff --git a/SobolevNS/docs/report_02.md b/SobolevNS/docs/report_02.md new file mode 100644 index 0000000..9fd4f53 --- /dev/null +++ b/SobolevNS/docs/report_02.md @@ -0,0 +1,364 @@ +# Отчёт по заданию 2. Поиск выхода из лабиринта с применением паттернов проектирования + +## 1. Постановка задачи + +Реализовать гибкую программу для загрузки лабиринта из файла, поиска пути от +старта до выхода с возможностью выбора алгоритма, текстовой визуализации +и экспериментального сравнения алгоритмов. В работе нужно применить +**не менее трёх паттернов GoF**, обосновать их выбор и продемонстрировать +преимущества такой архитектуры. + +В проекте применено **четыре паттерна**: **Builder**, **Strategy**, +**Observer** и **Command**. + +## 2. Диаграмма классов (упрощённая) + +```mermaid +classDiagram + class Cell { + +int x, y + +bool is_wall, is_start, is_exit + +int weight + +is_passable() bool + } + class Maze { + +int width, height + +Cell start, exit_ + +get_cell(x,y) Cell + +get_neighbors(cell) List~Cell~ + +render_text(path, player) str + } + + class MazeBuilder { + <> + +build_from_file(filename) Maze + } + class TextFileMazeBuilder { + +build_from_file(filename) Maze + } + + class PathFindingStrategy { + <> + +name : str + +find_path(maze, start, exit_) dict + } + class BFSStrategy + class DFSStrategy + class AStarStrategy + class DijkstraStrategy + + class MazeSolver { + -Maze maze + -PathFindingStrategy strategy + -List~Observer~ observers + +set_strategy(s) + +attach(o) + +solve() SearchStats + } + + class Observer { + <> + +update(event) + } + class ConsoleView + + class Command { + <> + +execute() + +undo() + } + class MoveCommand + class CommandHistory + class Player + + Maze "1" o-- "*" Cell + MazeBuilder <|-- TextFileMazeBuilder + TextFileMazeBuilder ..> Maze : creates + PathFindingStrategy <|-- BFSStrategy + PathFindingStrategy <|-- DFSStrategy + PathFindingStrategy <|-- AStarStrategy + PathFindingStrategy <|-- DijkstraStrategy + MazeSolver --> Maze + MazeSolver --> PathFindingStrategy + MazeSolver --> Observer + Observer <|-- ConsoleView + Command <|-- MoveCommand + CommandHistory o-- Command + MoveCommand --> Player + MoveCommand --> Maze +``` + +## 3. Паттерны и их обоснование + +### 3.1. Builder - `TextFileMazeBuilder` + +**Что делает.** Принимает имя файла, читает его, проверяет символы, ставит +координаты, создаёт `Cell`-объекты, находит `S` и `E`, валидирует +(ровно один старт и один выход) и возвращает готовый `Maze`. + +**Зачем нужен.** Конструирование лабиринта - это многошаговый процесс: +парсинг + валидация + расстановка флагов + поддержка взвешенных клеток +(`,` песок, `~` болото, `.` асфальт). Если положить всё это в конструктор +`Maze`, класс получится «толстым» и неудобным для расширения. + +**Что даёт.** Чтобы добавить новый формат (например, JSON или бинарный), +достаточно реализовать ещё один класс с тем же интерфейсом +`MazeBuilder.build_from_file`. Остальной код не меняется. + +### 3.2. Strategy - `PathFindingStrategy` + +**Что делает.** Объявляет единый интерфейс `find_path(maze, start, exit_)`. +Имеет четыре реализации: `BFSStrategy`, `DFSStrategy`, `AStarStrategy`, +`DijkstraStrategy`. Возвращают одинаковую структуру: +`{'path': [Cell, ...], 'visited': int}`. + +**Зачем нужен.** Все четыре алгоритма решают одну задачу, но с разными +компромиссами (скорость vs оптимальность vs учёт весов). Strategy позволяет +переключать их в рантайме одной строкой: + +```python +solver.set_strategy(AStarStrategy()) +``` + +без вмешательства в код решателя или модели лабиринта. + +**Что даёт.** Чтобы добавить, скажем, **двунаправленный BFS**, нужно лишь +написать новый класс - ни `MazeSolver`, ни `Maze` ничего не узнают +о нововведении. + +### 3.3. Observer - `MazeSolver` уведомляет `ConsoleView` + +**Что делает.** `MazeSolver` хранит список наблюдателей и шлёт им события: +`maze_loaded`, `search_start`, `search_end`, `path_found`, `no_path`. +`ConsoleView` подписывается и пишет в консоль. + +**Зачем нужен.** Решатель не должен знать, _кто_ и _как_ показывает +лабиринт пользователю. Можно подключить (или отключить) сразу несколько +наблюдателей - например, `ConsoleView` для отладки и `CSVLogger` +для эксперимента - не меняя `MazeSolver`. + +### 3.4. Command - `MoveCommand` с `undo` через `CommandHistory` + +**Что делает.** `MoveCommand` инкапсулирует один шаг игрока: сохраняет +предыдущую позицию, перемещает игрока в новое место. Метод `undo` +возвращает игрока обратно. `CommandHistory` ведёт стек выполненных команд +(общий undo). + +**Зачем нужен.** Ручное прохождение лабиринта = последовательность шагов, +каждый из которых должен быть откатываемым. Pattern Command даёт это +естественно и расширяемо: завтра можно добавить `MacroCommand` +(серия ходов) и `redo` - стек повторов. + +## 4. Этап 1-5: реализация + +### 4.1. Алгоритмы + +| Алгоритм | Структура данных | Учитывает веса? | Гарантирует кратчайший путь? | +| --- | --- | --- | --- | +| **BFS** | очередь (`deque`) | нет | да, по числу шагов | +| **DFS** | стек (`list`) | нет | нет | +| **A\*** | приоритетная очередь (`heapq`), эвристика - манхэттенское расстояние | **да** | да (если эвристика допустимая) | +| **Dijkstra** | приоритетная очередь | **да** | да | + +Все четыре пишут предшественников в словарь `parents`, и в конце путь +восстанавливается общей функцией `_reconstruct(...)`. + +### 4.2. Демонстрация (фрагмент вывода `demo.py`) + +``` +=== Builder: загружаем small_10x10.txt === +[ConsoleView] лабиринт 10x10 загружен +... +=== Strategy: пробуем все 4 алгоритма === +[ConsoleView] старт поиска: BFS +[ConsoleView] поиск окончен: путь=16, посещено=34, время=0.046 мс +--- BFS путь длиной 16 --- +########## +#S.......# +# ######.# +# #.# +###### #.# +# # #.# +# ## # #.# +# # #.# +# ##### .E +########## + +=== Command: пройдёмся вручную и сделаем undo === +стартовая позиция: (1,1) + move D: ok -> (2,1) + move D: ok -> (3,1) + move D: ok -> (4,1) + move D: ok -> (5,1) +Откатываем 2 хода (undo, undo): + теперь игрок в (3,1) +``` + +## 5. Этап 6. Экспериментальная часть + +### 5.1. Подготовка лабиринтов + +| Файл | Размер | Описание | +| --- | --- | --- | +| `small_10x10.txt` | 10×10 | ручной с простым путём | +| `medium_51x51.txt` | 51×51 | сгенерированный (DFS-карвер), тупики | +| `large_101x101.txt` | 101×101 | сгенерированный (DFS-карвер), запутанный | +| `empty_30x30.txt` | 30×30 | пустая комната - нет внутренних стен | +| `nopath_15x15.txt` | 15×15 | выход замурован - пути нет | +| `weighted_31x31.txt` | 31×31 | перфектный лабиринт + взвешенные клетки | +| `weighted_choice.txt` | 21×13 | **есть выбор** маршрута: через болото (короче) или вокруг (дешевле) | + +Все лабиринты генерирует `generate_mazes.py` (+ ручной `generate_weighted_choice.py`). +DFS-карвер реализован итеративно - для 101×101 рекурсивный вариант ловит +`RecursionError`. + +### 5.2. Замеры + +Для каждой пары (лабиринт × стратегия) запускали `solve()` **7 раз**, +усредняли время. Для пути и числа посещённых клеток между запусками +изменений нет (алгоритмы детерминированы) - фиксируем одно значение. + +Полные результаты - в `data/results.csv`. + +#### Сводная таблица (средние значения) + +| Лабиринт | Стратегия | t, мс | посещено | длина пути | стоимость | +| --- | --- | ---: | ---: | ---: | ---: | +| small_10x10 | BFS | 0.043 | 34 | 16 | 16 | +| | DFS | 0.015 | 18 | 16 | 16 | +| | A* | 0.043 | 27 | 16 | 16 | +| | Dijkstra | 0.044 | 33 | 16 | 16 | +| medium_51x51 | BFS | 0.50 | 524 | 353 | 353 | +| | DFS | 0.34 | 379 | 353 | 353 | +| | A* | 0.69 | 421 | 353 | 353 | +| | Dijkstra | 0.74 | 523 | 353 | 353 | +| large_101x101 | BFS | 2.08 | 2143 | 1265 | 1265 | +| | DFS | 1.35 | 1443 | 1265 | 1265 | +| | A* | 3.61 | 1831 | 1265 | 1265 | +| | Dijkstra | 3.36 | 2139 | 1265 | 1265 | +| empty_30x30 | BFS | 0.79 | 784 | **55** | 55 | +| | DFS | 0.47 | 784 | **379** | 379 | +| | A* | 1.53 | 784 | **55** | 55 | +| | Dijkstra | 1.34 | 784 | **55** | 55 | +| nopath_15x15 | все | ≈0.2 | 165 | 0 | 0 | +| weighted_31x31 | все | 0.3–0.7 | 318–433 | 265 | 391 | +| **weighted_choice** | BFS | 0.18 | 189 | **19** | **29** | +| | DFS | 0.03 | 55 | **19** | **29** | +| | A* | 0.26 | 117 | 25 | **25** | +| | Dijkstra | 0.36 | 209 | 25 | **25** | + +### 5.3. Графики + +![Время поиска](data/task2_maze/docs/data/plots/time_compare.png) + +![Сколько клеток посетил алгоритм](data/task2_maze/docs/data/plots/visited_compare.png) + +![Длина найденного пути](data/task2_maze/docs/data/plots/path_compare.png) + +![weighted_choice: длина vs стоимость](data/task2_maze/docs/data/plots/weighted_choice_compare.png) + +## 6. Анализ результатов + +### 6.1. На «обычных» перфектных лабиринтах путь единственный + +В лабиринтах, построенных DFS-карвером (`medium_51x51`, `large_101x101`, +`weighted_31x31`), между любыми двумя клетками существует **ровно один путь**. +Поэтому все четыре алгоритма находят его одинаковой длины (353, 1265, 265). +Различаются только время и **число посещённых клеток** - это и есть мера +«работы» алгоритма. + +* **DFS** - самый быстрый и обходит меньше всего клеток. Ему «везёт»: на + перфектном лабиринте он не возвращается, пока не упрётся в тупик. +* **BFS** - обходит чуть больше, потому что развивает фронт во всех направлениях. +* **A\*** и **Dijkstra** дороже по времени из-за `heapq`, но A\* экономит + посещения благодаря эвристике (на large_101x101: 1831 у A\* vs 2143 у BFS). + +### 6.2. На пустом лабиринте - главная разница между BFS/A\*/Dijkstra и DFS + +`empty_30x30` - это комната 28×28 проходимых клеток. Кратчайший путь между +противоположными углами - ровно 55 шагов. + +* BFS, A\*, Dijkstra находят его (длина = 55). +* **DFS находит путь длиной 379** - он петляет по краям комнаты, потому что + «жадно» идёт в первое попавшееся направление и никогда не возвращается, + пока не упрётся. + +Этот результат хорошо иллюстрирует: **DFS быстр, но даёт плохой путь +на открытых пространствах**. Если важна оптимальность - DFS не подходит. + +### 6.3. На взвешенном лабиринте с альтернативами - победа Dijkstra и A\* + +Лабиринт `weighted_choice` (21×13): открытая комната, в центре - болото 5×5 +(вес 3 за каждую клетку). Между стартом слева и выходом справа есть два +маршрута: +* «прямо через болото» - короче в клетках, но каждая болотная клетка стоит 3; +* «вокруг болота» - длиннее в клетках, но каждая стоит 1. + +Результаты: + +* BFS и DFS: путь **19 клеток**, **стоимость 29** (3 болотные × 3 = 9 «лишних» + единиц). +* A\* и Dijkstra: путь **25 клеток**, но **стоимость 25** - на 4 единицы + дешевле, потому что они учитывают вес клетки. + +Это и есть классическое преимущество взвешенных алгоритмов: +если шаги стоят по-разному (болото, песок, бездорожье), Dijkstra/A\* находят +оптимальный путь, а BFS/DFS - нет. + +### 6.4. На лабиринте без выхода + +`nopath_15x15`: все алгоритмы обходят все 165 проходимых клеток и возвращают +пустой путь. Время одинаковое - это, по сути, полный обход. Этот тест +показывает, что **все четыре стратегии корректно обрабатывают случай +отсутствия пути** (важная проверка). + +### 6.5. Время поиска ≠ качество пути + +Иерархия по скорости стабильна: **DFS < BFS < Dijkstra ≲ A\***. Но «быстрее» +не значит «лучше»: на `empty_30x30` DFS быстрее всех в 2 раза, но его путь +в 7 раз длиннее оптимального. На взвешенном лабиринте - BFS быстрее A\*, +но даёт более дорогой путь. + +**Вывод по алгоритмам:** + +| Когда подходит | Что выбрать | +| --- | --- | +| Минимум числа шагов на одинаковых клетках | **BFS** | +| Нужно быстро найти **хоть какой-то** путь | **DFS** | +| Взвешенный граф, есть хорошая эвристика | **A\*** (быстрее Dijkstra) | +| Взвешенный граф, эвристики нет | **Dijkstra** | + +## 7. Чем помогли паттерны + +Без паттернов код бы выглядел как один большой скрипт с `if maze_format == 'txt'` +и `if algorithm == 'bfs'`. Что я получил с паттернами: + +1. **Builder** - добавить новый формат лабиринта (JSON, графический PNG, генератор) + = новый класс, всё остальное не трогаем. +2. **Strategy** - добавить новый алгоритм (двунаправленный BFS, IDA\*) = новый + класс. `MazeSolver` не меняется. +3. **Observer** - `MazeSolver` ничего не знает про вывод. Я могу подключить + `ConsoleView` для интерактива и `CSVLogger` для эксперимента одновременно. + Эксперимент это и делает: подключает «тихого» наблюдателя. +4. **Command** - ручное прохождение и `undo` получаются естественно. + Расширить до `redo` - добавить второй стек. + +Что было бы сложно изменить без паттернов: + +* Сменить алгоритм поиска в рантайме без `if/elif`-простыни. +* Добавить второй вид визуализации (например, GUI) без затрагивания решателя. +* Поддержать сразу два формата лабиринта. + +## 8. Выводы + +* Реализованы четыре алгоритма поиска пути и четыре паттерна проектирования. +* Эксперимент подтвердил классические свойства алгоритмов: DFS быстрый, но + не оптимальный; BFS оптимален по шагам; A\*/Dijkstra оптимальны по + стоимости; A\* быстрее Dijkstra при наличии хорошей эвристики. +* Особенно выпукло разница видна на двух «диагностических» лабиринтах: + `empty_30x30` (DFS даёт «уродский» путь в 7 раз длиннее) и `weighted_choice` + (BFS/DFS режут через болото, Dijkstra/A\* обходят). +* Паттерны Builder/Strategy/Observer/Command превратили проект из «скрипта» + в расширяемое приложение. Новый формат, новый алгоритм или новый вид + визуализации добавляется без правки существующего кода + (принцип Open/Closed).