Погоня за движущейся целью? - PullRequest
10 голосов
/ 23 января 2012

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

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

Была ли эта проблемаэкстенсивно изучен?Если да, то есть ли здесь набор хорошо известных методов, которые можно использовать здесь?

Спасибо!

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

Ответы [ 4 ]

6 голосов
/ 23 января 2012

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

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

4 голосов
/ 23 января 2012

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

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

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

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

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

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

2 голосов
/ 23 января 2012

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

  1. Поиск пути / предотвращение столкновений
  2. Расчет предполагаемого пункта назначения

Поиск пути / предотвращение столкновений

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

  • Насколько динамично движение объектов (сетка низкого разрешения в стиле RTS или гоночная игра)?
  • Насколько перегружена сцена с динамическими объектами (решите, нужно ли вам учитывать движения толпы для оптимизации траектории)?

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

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

Теперь, когда объект может сказать: «Я хочу пойти сюда, дай мне лучший путь», мы можем независимо смотреть на погоню за целью.

Из реализованных мною алгоритмов самонаведения ракеты я использовал следующее:

  • Расчетное время достижения цели (с использованием некоторого эвристического, возможно, просто пути к объекту)
  • Экстраполирование положения целик тому времени, которое потребуется для преследователя, чтобы достигнуть его (вдоль текущей скорости / пути)
  • Сравнить расчетное время до цели с фактическим временем с будущим положениемПоэтому, если не в пределах некоторого допуска, оцените смещение и повторите итерацию до тех пор, пока не будете удовлетворены
  • Установите цель преследователей как экстраполированную позицию

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

Вы также можете обнаружить изменения в целевой скорости / пути, чтобы вызвать пересчет

2 голосов
/ 23 января 2012

Быстрый поиск "AI chasing" включил этот алгоритм:

http://www.peachpit.com/articles/article.aspx?p=102090&seqNum=4

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

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

Кроме того, Нейронные сети могут нормально работать здесь, при условии, что нетне слишком много препятствий в вашем мире.Что-то, возможно, с 2 входами (расстояние до цели и дельта-радианы к лицу) и 2 выходами (желаемая скорость и желаемый курс)

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