Научная статья на тему 'ПРОГРАММНАЯ РЕАЛИЗАЦИЯ ПОИСКА ПУТИ ДЛЯ МНОЖЕСТВА ОБЪЕКТОВ С ОБЛАСТЯМИ РАЗЛИЧНОЙ ПРОХОДИМОСТИ'

ПРОГРАММНАЯ РЕАЛИЗАЦИЯ ПОИСКА ПУТИ ДЛЯ МНОЖЕСТВА ОБЪЕКТОВ С ОБЛАСТЯМИ РАЗЛИЧНОЙ ПРОХОДИМОСТИ Текст научной статьи по специальности «Математика»

CC BY
180
24
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
АЛГОРИТМЫ ОПТИМИЗАЦИИ / ПОИСК КРАТЧАЙШЕГО ПУТИ / ПРОГРАММНАЯ РЕАЛИЗАЦИЯ

Аннотация научной статьи по математике, автор научной работы — Барабанов В. Ф., Гребенникова Н. И., Донских А. К., Коваленко С. А.

Дано описание решения задачи поиска кратчайшего пути для множества объектов с учетом препятствий и труднопроходимых областей. Сформированы функциональные требования к предложенному модулю поиска пути. Приведен обзор алгоритмов оптимизации пути, для выбранного алгоритма разработана модульная структурная схема приложения. Данное приложение предоставляет возможности по отслеживанию состояний объектов, что позволяет производить корректировку результатов поиска пути. Для корректной работы модуля поиска пути была разработана собственная структура данных. Для работы с множеством объектов предложен специальный метод, который находит самый близкий к цели объект, затем с помощью основного алгоритма оптимизации пути строит для него путь. Для удобства использования рассматриваемого программного решения вычисление маршрута было предложено перенести в параллельный поток. Выработаны рекомендации для выбора параметров работы программного модуля, алгоритма оптимизации для получения точных результатов. Приведенные рекомендации позволяют наиболее полно воспользоваться возможностями программного модуля для поиска кратчайшего пути между объектами, разделенными труднопроходимыми областями

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по математике , автор научной работы — Барабанов В. Ф., Гребенникова Н. И., Донских А. К., Коваленко С. А.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

SOFTWARE IMPLEMENTATION OF PATHFINDING FOR MULTIPLE OBJECTS WITH AREAS OF DIFFERENT PERMEABILITY

A description is given of the solution of the shortest-path search problem for a set of objects with obstacles and difficult-to-reach areas. The functional requirements for the pathfinder module being developed are formed. An overview of the path optimization algorithms is given, and a modular application structural diagram was developed for the selected algorithm. The developed application provides the ability to track the states of objects, which allows one to adjust the results of the search path. For the correct operation of the path finding module, its own data structure was developed. To work with a variety of objects, a special method was proposed that finds the object closest to the target, then builds a path for it using the basic optimization algorithm. For ease of use of the developed software solution, the calculation of the route was proposed to be transferred to a parallel stream. Recommendations were given for the selection of the operating parameters of the software module and the optimization algorithm for obtaining accurate results. These recommendations allow one to make the most of the program module’s capabilities to find the shortest path between objects separated by difficult areas

Текст научной работы на тему «ПРОГРАММНАЯ РЕАЛИЗАЦИЯ ПОИСКА ПУТИ ДЛЯ МНОЖЕСТВА ОБЪЕКТОВ С ОБЛАСТЯМИ РАЗЛИЧНОЙ ПРОХОДИМОСТИ»

УДК 004.4

ПРОГРАММНАЯ РЕАЛИЗАЦИЯ ПОИСКА ПУТИ ДЛЯ МНОЖЕСТВА ОБЪЕКТОВ С ОБЛАСТЯМИ РАЗЛИЧНОЙ ПРОХОДИМОСТИ

В.Ф. Барабанов, Н.И. Гребенникова, А.К. Донских, С.А. Коваленко Воронежский государственный технический университет, г. Воронеж, Россия

Аннотация: дано описание решения задачи поиска кратчайшего пути для множества объектов с учетом препятствий и труднопроходимых областей. Сформированы функциональные требования к предложенному модулю поиска пути. Приведен обзор алгоритмов оптимизации пути, для выбранного алгоритма разработана модульная структурная схема приложения. Данное приложение предоставляет возможности по отслеживанию состояний объектов, что позволяет производить корректировку результатов поиска пути. Для корректной работы модуля поиска пути была разработана собственная структура данных. Для работы с множеством объектов предложен специальный метод, который находит самый близкий к цели объект, затем с помощью основного алгоритма оптимизации пути строит для него путь. Для удобства использования рассматриваемого программного решения вычисление маршрута было предложено перенести в параллельный поток. Выработаны рекомендации для выбора параметров работы программного модуля, алгоритма оптимизации для получения точных результатов. Приведенные рекомендации позволяют наиболее полно воспользоваться возможностями программного модуля для поиска кратчайшего пути между объектами, разделенными труднопроходимыми областями

Ключевые слова: алгоритмы оптимизации, поиск кратчайшего пути, программная реализация

Введение

Поиск оптимального маршрута между двумя точками (поиск пути, англ. применяется во многих областях разработки компьютерных программ, например, в разработке программ навигации, трассировки печатных плат, моделировании и в видеоиграх.

Однако часто требуется выполнять поиск оптимального пути для различных объектов, учитывая различные по форме, перемещающиеся препятствия и труднопроходимые для агентов области.

В данной работе решается задача поиска пути для множества объектов. После анализа существующих программных продуктов было принято решение разработать собственный модуль на игровом движке Unity3D.

Функциональные требования к разрабатываемому модулю поиска пути

Алгоритм поиска пути должен учитывать следующие объекты: агент; статическое препятствие; динамическое препятствие; область, с различным коэффициентом проходимости. Разработанный программный модуль должен иметь возможность выполнять поиск объектов,

© Барабанов В.Ф., Гребенникова Н.И., Донских А.К., Коваленко С.А., 2018

относящихся к поиску пути, в определенной области, добавлять к уже имеющимся объектам новые, удалять объекты в определенной области, быть не требовательным к ресурсам и прост в конфигурации, а также выполнять очистку всех объектов. Программное средство должно обладать возможностями по отслеживанию за изменением состояний объектов, благодаря которому будет производиться корректировка результатов поиска пути.

Алгоритмы оптимизации пути можно условно разделить на две различные категории. Первая категория, это категория алгоритмов, в которых все препятствия заранее неизвестны и об их существовании следует узнавать на каждом шаге работы алгоритма. Данная категория оптимальна для динамически изменяющихся сред. Вторая категория предназначена для алгоритмов, в которых среда использования относительно статична. Но этой категории алгоритмов требуется заранее, перед использованием алгоритма, просканировать требуемую среду.

Сущность большинства методов заключается в поиске пути на графе, начиная с одной (стартовой) точки и исследуя смежные узлы до тех пор, пока не будет достигнут узел назначения (конечный узел).

К самым известным и популярным алгоритмам поиска пути относятся такие алгоритмы: алгоритм поиска А*; алгоритм Дейкстры;

волновой алгоритм; навигационная сетка; метод потенциальных полей.

Поиск A* (произносится «А звезда» или «А стар», от англ. A star) - алгоритм поиска по первому наилучшему совпадению на графе, который находит маршрут с наименьшей стоимостью от одной вершины (начальной) к другой (целевой, конечной). Порядок обхода вершин определяется эвристической функцией «расстояние + стоимость» (обычно обозначаемой как f(x)). Эта функция - сумма двух других: функции стоимости достижения рассматриваемой вершины (x) из начальной (обычно обозначается как g(x) и может быть как эвристической, так и нет), и функции эвристической оценки расстояния от рассматриваемой вершины к конечной (обозначается как h(x)).

A* пошагово просматривает все пути, ведущие от начальной вершины в конечную, пока не найдёт минимальный. В начале работы просматриваются узлы, смежные с начальным; выбирается тот из них, который имеет минимальное значение f(x), после чего этот узел раскрывается. На каждом этапе алгоритм оперирует с множеством путей из начальной точки до всех ещё не раскрытых (листовых) вершин графа - множеством частных решений, - которое размещается в очереди с приоритетом. Приоритет пути определяется по значению f(x) = g(x) + h(x). Алгоритм продолжает свою работу до тех пор, пока значение f(x) целевой вершины не окажется меньшим, чем любое значение в очереди, либо пока всё дерево не будет просмотрено. Из множества решений выбирается решение с наименьшей стоимостью. Чем меньше эвристика h(x), тем больше приоритет, поэтому для реализации очереди можно использовать сортирующие деревья.

Схема алгоритма представлена на рис. 1.

Реализация программного комплекса поиска пути

В роли основного алгоритма был выбран алгоритм A*, т.к. он является наиболее быстрым алгоритмом при сравнительно легкой реализации.

Для оптимизации работы поиска пути было решено ввести подмодуль для сканирования локации. И хотя этот модуль и является вспомогательным, от этого он не становится менее важным, так как от его работы зависит и работа модуля поиска пути, и удобство использования программного решения.

Структурная схема модулей проектируемого приложения представлена на рис. 2.

Модуль-карта проходит все точки в заданной области с указанным шагом и генерирует на основе этих точек определенную структуру данных.

Данная структура разработана специально для выбранного алгоритма. Так как A* для своей работы должен знать о соседях, то в структуру включено поле со списком соседей, также было добавлено поле, хранящее уровень проходимости ячейки (например, препятствие, труднопроходимая ячейка и свободная область). Помимо этого, структура должна содержать и свою позицию.

Во время сканирования новой ячейки алгоритм проверяет каждую из соседних ячеек текущей ячейки, и если соседняя ячейка уже была просканирована, то добавляет ее в список соседей. Также алгоритм устанавливает тип ячейки, если просканированный объект имеет свойство "static" установленное в значение истина, то тип ячейки является препятствием, но, если объект имеет компонент "MapObject", то он установит для ячейки тип, указанный в этом компоненте, несмотря на свойство "static". Если просканированная область не имеет объектов или в ней отсутствуют объекты с компонентами "MapObject", то она сохраняется как свободная.

Схема работы алгоритма сканирования представлена на рис. 3.

Рис. 1. Схема алгоритма А*

Рис. 2. Структурная схема модулей

Рис. 3. Схема работы алгоритма сканирования

Схематичное изображение алгоритма работы установления соседства отображено на рис. 4.

Для оптимизации процесса поиска ячейки в списке уже просканированных ячеек список должен быть одной из реализаций сортирующего списка или дерева поиска. В данной реализации алгоритма был выбран список, сортирующий по хеш-коду, который генерируется из позиции, т.к. на одну позицию приходится одна ячейка. Также благодаря тому, что все проска-нированные ячейки хранятся в списке, достаточно просто сделать так, чтобы какую-либо область можно было сканировать поэтапно, с добавлением к уже просканированным областям с сохранением и добавлением всех списков соседей.

Разработанный программный модуль выполняет слежение за всеми объектами. Для это-

го компонент «МарО^есЪ», имеющийся у каждого препятствия, при изменении координат или типа объекта генерирует событие, которое прослушивает основной модуль сканирования.

Рис. 4. Схема работы алгоритма установки соседства

При изменении типа объекта модуль выполняет изменение всех областей, принадлежащих данному объекту на новый тип. При изменении координат модуль переносит ячейки, принадлежащие вызвавшему изменение объекту в новые координаты, и если новые координаты ячеек, принадлежащих объекту, есть в списке просканированных ячеек, то происходит только изменение типа этих ячеек на тип объекта и изменение владельца этих ячеек на объект, вызвавший изменение. Если новые координаты не содержатся в списке просканирован-ных ячеек, то выполняется их добавление к этому списку с добавлением всех соседей.

Схема алгоритма метода изменения расстояния продемонстрирована на рис. 5.

Рис. 5. Схема работы алгоритма изменения положения игрового объекта

Модуль поиска пути является центральным модулем разработанного программного решения. Поэтому было принято решение поместить его в параллельный поток, а для сообщения результата выполнения использовать функцию обратного вызова.

Для корректной работы модуля поиска пути была разработана собственная структура данных, которую будем называть вершиной. Вершина содержит в себе представленную ранее структуру данных для указания текущей ячейки, родительскую вершину для корректной работы алгоритма, а также стоимость достижения рассматриваемой вершины от изначальной и функции эвристической оценки расстояния от рассматриваемой вершины к конечной.

Данная структура представлена на рис. 6.

,_4_

_Вершина_

Стоимость достижения данной вершины от изначальной

Эвристическая стоимость

Сумма оценок

Родительская вершина

Текущая ячейка

Рис. 6. Структура данных вершины

Также для оптимизации работы алгоритма тип закрытого и открытого списков должен быть сортирующим. По аналогии со сканирующим модулем был выбран сортирующий по хеш-коду список. Кроме того, для оптимизации получения вершины из открытого списка с наименьшим значением эвристической оценки было принято решение ввести еще один список, но на этот раз сортирующий по эвристической оценке. Алгоритм работы оптимизации пути представлен на рис. 7.

Так как алгоритм требует получения значения из списка по двум разным критериям (поиск соседней ячейки в списке просмотренных вершин и получение вершины с наименьшей эвристической оценкой), то было введено два списка для разных критериев. Результат работы модуля поиска пути отображен на рис. 8. Черный цвет -непроходимая область; светло-серый цвет -труднопроходимая область. Светло-серой линией обозначен проложенный путь.

Как можно видеть, алгоритм старается избегать светло-серых нежелательных областей, но если обход подобной области является слишком накладным, то алгоритм проходит эту область так, чтобы присутствие в нежелательном объекте оказалось минимальным.

Для работы с множеством игровых объектов разработан специальный метод, одним из входных параметров которого является массив игровых объектов. Данный метод сначала находит самый близкий к цели объект, затем с помощью основного алгоритма оптимизации пути строит для него путь. Также этот метод строит путь до выбранного ближайшего игрового объекта от всех остальных объектов, а затем объединяет оба пути и вызывает функцию обратного вызова данного объекта.

Заключение

Для удобства использования разработанного программного решения вычисление маршрута было перенесено в параллельный поток, так как при достаточно большом размере области поиска маршрута алгоритм будет отрабатывать существенное время, а результат возвращаться с помощью функции обратного вызова.

Рекомендуется при первом вызове расчета маршрута передавать значение погрешности большее 1, так как при высоком значении погрешности алгоритм отрабатывает значительно быстрее, но при этом выдает приблизительный результат. И для того, чтобы объект, для которого требуется построить маршрут, не ожидал полного расчета, а сразу начал движение, требуется вызывать расчет с высокой погрешностью, а затем уже второй раз для более точного результата.

Рекомендуется сканировать карту местности либо при загрузке сцены, либо небольшими частями.

В качестве рекомендаций можно использовать выбор алгоритма оптимизации, основанный на статистике использования программного модуля, например, если точка назначения меняется редко, то предпочтительнее использовать волновой алгоритм, иначе использовать А*. Также если карта не сильно загружена препятствиями, то перспективно использовать метод потенциальных полей.

Еще одной точкой расширения является возможность кэширования уже найденных маршрутов. Если точка, из которой следует выполнять поиск, и точка, к которой следует выполнять поиск пути, находятся близко к какой-либо из точек уже рассчитанного маршрута, то следует использовать части этого маршрута для оптимизации работы алгоритма и исключения данных точек рассчитанного маршрута из алгоритма.

Рис. 8. Результат работы модуля поиска пути

Разработанный модуль может использоваться для различных типов программного обеспечения, позволяет его интегрировать в уже разработанные или только разрабатываемые программные средства.

Литература

1. Tavakkoli Alireza Game Development and Simulation with Unreal Technology. Boca Raton: CRC Press. 2016.

427 p.

2. Shekar S. Cocos2d Cross-Platform Game Development Cookbook. Packt Publishing Ltd. 2014. 266 p.

3. Скит Джон. C# для профессионалов: тонкости программирования; пер. с англ. Ю. Н. Артеменко. Изд. 3-е. М.: Вильямс, 2014. 608 с.

4. Hocking Joseph. Unity in Action. Multiplatform game development in C# with Unity 5. Manning, 2015. 352 p.

5. Торн Алан Искусство создания сценариев в Unity; пер. с англ. Р. Н. Рагимова. М.: ДМК-Пресс. 360 с.

6. Плотников О.А., Подвальный Е.С. Разработка меметического алгоритма для решения задач

оптимального планирования грузоперевозок // Вестник Воронежского государственного технического университета. 2012. Т. 8. № 10.1. С. 19-24.

7. Плотников О.А., Подвальный Е.С. Разработка алгоритма для комплексного решения задач транспортной логистики // Вестник Воронежского государственного технического университета. 2011. Т. 7. № 11. С. 102-105.

Поступила 01.06.2018; принята к публикации 14.09.2018 Информация об авторах

Барабанов Владимир Федорович - д-р техн. наук, профессор, Воронежский государственный технический университет (394026, Россия, г Воронеж, Московский проспект, 14), e-mail: [email protected]

Гребенникова Наталия Ивановна - канд. техн. наук, доцент, Воронежский государственный технический университет (394026, Россия, г. Воронеж, Московский проспект, 14), e-mail: [email protected]

Донских Андрей Константинович - магистрант, Воронежский государственный технический университет (394026, Россия, г Воронеж, Московский проспект, 14), e-mail: [email protected]

Коваленко Сергей Александрович - аспирант, Воронежский государственный технический университет (394026, Россия, г. Воронеж, Московский проспект, 14), e-mail: [email protected]

SOFTWARE IMPLEMENTATION OF PATHFINDING FOR MULTIPLE OBJECTS WITH

AREAS OF DIFFERENT PERMEABILITY

V.F. Barabanov, N.I. Grebennikova, A.K. Donskikh, S.A. Kovalenko

Voronezh State Technical University, Voronezh, Russia

Abstract: a description is given of the solution of the shortest-path search problem for a set of objects with obstacles and difficult-to-reach areas. The functional requirements for the pathfinder module being developed are formed. An overview of the path optimization algorithms is given, and a modular application structural diagram was developed for the selected algorithm. The developed application provides the ability to track the states of objects, which allows one to adjust the results of the search path. For the correct operation of the path finding module, its own data structure was developed. To work with a variety of objects, a special method was proposed that finds the object closest to the target, then builds a path for it using the basic optimization algorithm. For ease of use of the developed software solution, the calculation of the route was proposed to be transferred to a parallel stream. Recommendations were given for the selection of the operating parameters of the software module and the optimization algorithm for obtaining accurate results. These recommendations allow one to make the most of the program module's capabilities to find the shortest path between objects separated by difficult areas

Key words: optimization algorithms, search for the shortest path, software implementation

References

1. Tavakkoli Alireza "Game Development and Simulation with Unreal Technology", CRC Press, Boca Raton, 2016, 427 p.

2. Shakar S. "Cocos2d cross-platform game development cookbook", Packt Publishing Ltd, 2014, 266 p.

3. Skeet J. "C# for professionals: the subtleties of programming", trans. from English by Artemenko Yu.N., Moscow, Williams, 2014, 608 p.

4. Hocking J. "Unity in action. Multiplatform game development inC# with Unity 5", Manning, 2015, 352 p.

5. Thorne A. "The Art of scripting in Unity", trans. from English by Ragimov R.N., Moscow, DMK-Press, 360 p.

6. Plotnikov O.A., Podvalnyy E.S. "Development of genetic algorithm for solving problems of optimal planning of cargo transportation", The Bulletin of Voronezh State Technical University (Vestnik Voronezhskogo gosudarstvennogo tekhnicheskogo universiteta), 2012, vol. 8, no. 10-1, pp. 19-24.

7. Plotnikov O.A., Podvalnyy E.S. "Development of algorithm for complex solution of transport logistics problems", The Bulletin of Voronezh State Technical University (Vestnik Voronezhskogo gosudarstvennogo tekhnicheskogo universiteta), 2011, vol. 7, no. 11, pp. 102-105.

Submitted 01.06.2018; revised 14.09.2018 Information about the authors

Vladimir F. Barabanov, Dr. Sc. (Technical), Professor, Voronezh State Technical University (14 Moskovskiy prospekt, Voronezh 394026, Russia), e-mail:[email protected]

Natalia I. Grebennikova, Cand. Sc. (Technical), Associate Professor, Voronezh State Technical University (14 Moskovskiy prospekt, Voronezh 394026, Russia), e-mail:[email protected]

Sergey A. Kovalenko, Graduate student, Voronezh State Technical University (14 Moskovskiy prospekt, Voronezh 394026, Russia), e-mail: [email protected]

Andrey K. Donskikh, MA, Voronezh State Technical University (14 Moskovskiy prospekt, Voronezh 394026, Russia), e-mail: [email protected]

i Надоели баннеры? Вы всегда можете отключить рекламу.