Решения проблемы поиска пути в играх
DESCRIPTION
Докладчик - Владимир КожаевTRANSCRIPT
![Page 1: Решения проблемы поиска пути в играх](https://reader036.vdocuments.site/reader036/viewer/2022082420/54bb06ba4a7959d5478b4640/html5/thumbnails/1.jpg)
Постановка задачи
Найти путь от точки А к точке Б значит найти последовательность действий проделав которые можно переместиться на игровом поле из А в Б
Действия не противоречат правилам игры
![Page 2: Решения проблемы поиска пути в играх](https://reader036.vdocuments.site/reader036/viewer/2022082420/54bb06ba4a7959d5478b4640/html5/thumbnails/2.jpg)
Виды карт
Карта дискретна. Нужно найти путь на графе Карта непрерывна. Нужно найти векторную
функцию Комбинация двух подходов: об этом позже
![Page 3: Решения проблемы поиска пути в играх](https://reader036.vdocuments.site/reader036/viewer/2022082420/54bb06ba4a7959d5478b4640/html5/thumbnails/3.jpg)
Поиск пути на графе
Найти путь значит найти последовательность рёбер, от исходной вершины к искомой
Классические алгоритмы: Дейкстры, Флойда, Волновой алгоритм А* - наиболее распространённый в играх
![Page 4: Решения проблемы поиска пути в играх](https://reader036.vdocuments.site/reader036/viewer/2022082420/54bb06ba4a7959d5478b4640/html5/thumbnails/4.jpg)
А* Общие сведения
Впервые упомянут в 1968 году Питером Хартом Нильсом Нильсоном и Бертраном Рафаэлем.
Является эвристическим Всегда находит решение, если оно
существует По сути является обобщённым алгоритмом
Дейкстры Лёгок в реализации
![Page 5: Решения проблемы поиска пути в играх](https://reader036.vdocuments.site/reader036/viewer/2022082420/54bb06ba4a7959d5478b4640/html5/thumbnails/5.jpg)
А* Описание алгоритма
Алгоритм А* оперирует с двумя списками: открытым и закрытым. В открытый список помещаются клетки, которые нужно проверить. В закрытые те, что уже не нужно проверять
То, какую клетку проверить первой определяется по значению F=G+H. G – Стоимость передвижения из стартовой клетки в исходную с учётом данной H – эвристическая функция
![Page 6: Решения проблемы поиска пути в играх](https://reader036.vdocuments.site/reader036/viewer/2022082420/54bb06ba4a7959d5478b4640/html5/thumbnails/6.jpg)
А* описание алгоритма 1) Добавляем стартовую клетку в открытый список.
2) Повторяем следующее:
a) Ищем в открытом списке клетку с наименьшей стоимостью F. Делаем ее текущей клеткой.
b) Помещаем ее в закрытый список. (И удаляем с открытого)
c) Для каждой из соседних 8-ми клеток …
Если клетка непроходимая или она находится в закрытом списке, игнорируем ее. В противном случае делаем следующее.
Если клетка еще не в открытом списке, то добавляем ее туда. Делаем текущую клетку родительской для это клетки. Расчитываем стоимости F, G и H клетки.
Если клетка уже в открытом списке, то проверяем, не дешевле ли будет путь через эту клетку. Для сравнения используем стоимость G. Более низкая стоимость G указывает на то, что путь будет дешевле. Эсли это так, то меняем родителя клетки на текущую клетку и пересчитываем для нее стоимости G и F. Если вы сортируете открытый список по стоимости F, то вам надо отсортировать свесь список в соответствии с изменениями.
d) Останавливаемся если:
Добавили целевую клетку в открытый список, в этом случае путь найден.
Или открытый список пуст и мы не дошли до целевой клетки. В этом случае путь отсутствует.
3) Сохраняем путь. Двигаясь назад от целевой точки, проходя от каждой точки к ее родителю до тех пор, пока не дойдем до стартовой точки. Это и будет наш путь
![Page 7: Решения проблемы поиска пути в играх](https://reader036.vdocuments.site/reader036/viewer/2022082420/54bb06ba4a7959d5478b4640/html5/thumbnails/7.jpg)
Проблемы А*
• Сглаживание пути
• Рост потребляемой памяти
• Одновременный поиск
![Page 8: Решения проблемы поиска пути в играх](https://reader036.vdocuments.site/reader036/viewer/2022082420/54bb06ba4a7959d5478b4640/html5/thumbnails/8.jpg)
Проблемы А*: сглаживание пути
• Неестественная траектория
• Зигзагообразная траектория
• Путь по центрам клеток
![Page 9: Решения проблемы поиска пути в играх](https://reader036.vdocuments.site/reader036/viewer/2022082420/54bb06ba4a7959d5478b4640/html5/thumbnails/9.jpg)
Проблемы А*: память и скорость
• Улучшаем алгоритм
• Улучшаем эвристику
• Укрупняем клетки(двупроходный алгоритм)
• Комбинируем с другими алгоритмами
![Page 10: Решения проблемы поиска пути в играх](https://reader036.vdocuments.site/reader036/viewer/2022082420/54bb06ba4a7959d5478b4640/html5/thumbnails/10.jpg)
Метод потенциальных полей
• Препятствия отталкивают, цель притягивает
• Основная проблема – локальные минимумы
• Локальные минимумы обходим итерациями
• Не подходит для больших расстояний
• Быстрый
![Page 11: Решения проблемы поиска пути в играх](https://reader036.vdocuments.site/reader036/viewer/2022082420/54bb06ba4a7959d5478b4640/html5/thumbnails/11.jpg)
Метод виртуальных отталкивающих клеток
• Вариант предидущего метода
• Препятствия режутся на клетки
• Отталкивают клетки, которые близко
• Более плавное движение
![Page 12: Решения проблемы поиска пути в играх](https://reader036.vdocuments.site/reader036/viewer/2022082420/54bb06ba4a7959d5478b4640/html5/thumbnails/12.jpg)
Комбинируем методы поиска
• Делим мир на локации
• От локации к локации – А*
• Внутри локации метод потенциальных полей
• Локации это выпуклые фигуры или фигуры содержащие точку видимости
• Точка видимости, это точка из которой можно провести отрезок в любую точку локации целиком находящийся в ней
![Page 13: Решения проблемы поиска пути в играх](https://reader036.vdocuments.site/reader036/viewer/2022082420/54bb06ba4a7959d5478b4640/html5/thumbnails/13.jpg)
Вопросы