{ "cells": [ { "cell_type": "code", "execution_count": null, "id": "73f2af9d", "metadata": {}, "outputs": [], "source": [ "import os\n", "import pandas as pd\n", "\n", "# Переходим из docs/data/ в корень lab/\n", "# os.chdir('../')\n", "\n", "from source import TextFileMazeBuilder\n", "from source.observer import ConsoleView, Event\n", "from source.strategy import MazeSolver, BFS, DFS, Dijkstra, AStar\n", "# from source.strategy.maze_solver import \n", "from source.classes import Cell, Maze" ] }, { "cell_type": "code", "execution_count": null, "id": "c23c6e70", "metadata": {}, "outputs": [], "source": [ "builder = TextFileMazeBuilder()" ] }, { "cell_type": "code", "execution_count": null, "id": "ae0615f3", "metadata": {}, "outputs": [], "source": [ "csv_path = 'docs\\\\data\\\\csv\\\\banchmark.csv'" ] }, { "cell_type": "code", "execution_count": null, "id": "5949d98c", "metadata": {}, "outputs": [], "source": [ "maze_empty = 'maze_empty'\n", "maze_no_path = 'maze_no_path'\n", "maze10x10 = 'maze10x10'\n", "maze50x50 = 'maze50x50'\n", "maze100x100 = 'maze100x100'\n", "\n", "mazes = [maze10x10, maze50x50, maze100x100, maze_empty, maze_no_path]\n", "def make_maze_path(maze_name) -> str:\n", " return 'mazes\\\\benchmarks\\\\' + maze_name + '.txt'" ] }, { "cell_type": "code", "execution_count": null, "id": "e94b3b5a", "metadata": {}, "outputs": [], "source": [ "class DataBench():\n", " \"\"\"Класс для хранения информации о тестировании\"\"\"\n", " def __init__(self, maze_name: str, strategy: str, time_ms: float, count_visited: int, path_length: int):\n", " self.maze_name = maze_name\n", " self.strategy = strategy\n", " self.time_ms = time_ms\n", " self.count_visited = count_visited\n", " self.path_length = path_length\n", " \n", " def toDict(self):\n", " \"\"\"Формирует словарь\"\"\"\n", " return {\n", " 'Лабиринт': self.maze_name,\n", " 'Алгоритм': self.strategy,\n", " 'Время': self.time_ms,\n", " 'Посещено клеток': self.count_visited,\n", " 'Длина пути': self.path_length\n", " }" ] }, { "cell_type": "code", "execution_count": null, "id": "ad8278e6", "metadata": {}, "outputs": [], "source": [ "def save_data(data: DataBench, filename=csv_path):\n", " \"\"\"Сохраняет данные в CSV\"\"\"\n", "\n", " # Создаём DataFrame из словаря\n", " new_row = pd.DataFrame([data.toDict()])\n", " \n", " # Умная дозапись\n", " if os.path.exists(filename) and not os.path.getsize(filename) == 0:\n", " \n", " existing = pd.read_csv(filename)\n", " updated = pd.concat([existing, new_row], ignore_index=True)\n", " updated.to_csv(filename, index=False)\n", " print(f\"Добавлена запись. Всего строк: {len(updated)}\")\n", " else:\n", " new_row.to_csv(filename, index=False)\n", " print(f\"Создан новый файл с 1 записью\")\n", "\n", "# def format_data(maze_name: str, strategy: str, time_ms: float, count_visited: int, path_length: int):\n", "# \"\"\"Форматирует данные для последющей записи в csv(мне лень писать каждый раз словарь)\"\"\"\n", "# return " ] }, { "cell_type": "code", "execution_count": null, "id": "da46fa84", "metadata": {}, "outputs": [], "source": [ "N_REPEAT = 10\n", "strats = [BFS(), DFS(), AStar(), Dijkstra()]\n", "\n", "# Очищаю файл для перезаписи\n", "open(csv_path, 'w').close()\n", "\n", "\n", "for strat in strats:\n", " \n", " for maze_name in mazes:\n", " \n", " maze = builder.buildFromFile(make_maze_path(maze_name))\n", " solver = MazeSolver(maze, strat, ConsoleView())\n", " print(maze_name)\n", " # print(solver.strategyName())\n", " result_average = DataBench(\n", " maze_name=maze_name + '(среднее)',\n", " strategy=solver.strategyName(),\n", " time_ms=0,\n", " count_visited=0,\n", " path_length=0\n", " )\n", " \n", " for i in range(N_REPEAT):\n", " stats = solver.solve()\n", " result = DataBench(\n", " maze_name=maze_name,\n", " strategy=solver.strategyName(),\n", " time_ms=stats.timeMs,\n", " count_visited=stats.visitedCells,\n", " path_length=stats.pathLength\n", " )\n", " save_data(result)\n", "\n", " result_average.time_ms += stats.timeMs\n", " result_average.count_visited += stats.visitedCells\n", " result_average.path_length += stats.pathLength\n", " \n", " result_average.time_ms /= N_REPEAT\n", " result_average.count_visited /= N_REPEAT\n", " result_average.path_length /= N_REPEAT\n", "\n", " save_data(result_average)\n", " # stats.show()" ] }, { "cell_type": "code", "execution_count": null, "id": "de0f513e", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "60b732ff", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.6" } }, "nbformat": 4, "nbformat_minor": 5 }