Выбор лучшего целевого алгоритма в программировании ИИ аркадной / стратегической игры - PullRequest
1 голос
/ 20 июня 2010

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

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

Доступны следующие данные: позиция танкера, дальность, точки попадания, урон.

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

Спасибо взаранее, Рамананд.

Ответы [ 3 ]

6 голосов
/ 21 июня 2010

Я собираюсь выразить это в ракурсе, похожем на RPG-геймеров:

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

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

Так что я собираюсь разбить то, что, по моему мнению, наиболее вероятно относится катрибутам ваших танков.

RANGE: Far range tanks can hit from a distance but have weak STRENGTH in their attacks.

TANKER POSITION: Closer tanks are faster tanks, but have less STRENGTH in their attacks.  Also low HITPOINTS because they're meant for SPEED, and not for DAMAGE.

TANKER HP: Higher HP means a slower-moving tank, as they're stronger.  But they won't be close to the front lines.

DAMAGE: Higher DAMAGE means a STRONGER tank with lots of HP, but SLOWER as well to move.

Так что на вашем месте я бы сосредоточился сначала на танках, которые имеют самые высокие HP / самые сильные атаки, затем на ближайших, а затем беспокоился оТанки дальнего боя - вы ничего не можете с ними сделать, пока они не перейдут в радиус вашей атаки: P

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

А затем пройдитесь по каждому пункту в списке.Если есть возможность атаковать Танк (0), атакуйте.Если нет, то идите в Танк (1).

4 голосов
/ 21 июня 2010

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

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

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

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

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

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

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

Командная тактика в основном включает фланкирование и диверсию.

Какова ситуация с боеприпасами, и можно ли пропустить неподвижную цель?

1 голос
/ 23 июня 2010

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

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

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

Если ваш алгоритм представляет собой набор правил if-then (включая системы сопоставления правил), а повышение производительности включает изменение порядка или реструктуризацию этих правил, тогда вы можете рассмотреть генетические алгоритмы , что немного сложнее.Для применения генетических алгоритмов важно, чтобы вы определили операторы мутации и кроссовера таким образом, чтобы одно применение мутации или кроссовера приводило к небольшому изменению общей производительности, в то время как многие применения мутации и кроссовера приводили к значительному изменению в целом.производительность вашего алгоритма.Я не являюсь экспертом в этой области, но при поиске «генетических алгоритмов на деревьях решений» должно появиться много информации.Ловушка, которой следует избегать, заключается в том, что если вы просто подумаете о замене ветвей в дереве решений для оператора мутации, одно приложение может изменить корень вашего дерева решений, создав огромную разницу в производительности.Как правило, это добавляет слишком много шума для генетического алгоритма, поэтому мой совет в этом подходе - быть очень осторожным с кодировкой ваших операторов.

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

...