Какое поведение должно привести к созданию «неидеального» бойца ИИ?


19

При создании НЦА комбатантом, это просто очевидно , что сделать , чтобы получить робот deathmachine пути оптимизации боевой тактики, сроки и атаку типа, но сложнее (и интереснее в бое) , чтобы получить особенный, inpredictable врага. Какие виды поведения (алгоритмы?) Полезны для создания более органичного, нетрадиционного врага?

Изменить: Мой конкретный случай использования с MMO-подобных врагов, например, World of Warcraft, хотя с меньшим количеством вовлеченной графики. Обратите внимание, что это означает как человеческих, так и нечеловеческих врагов (животных, монстров и т. Д.)

Ответы:


14

Есть очень интересная статья по этому вопросу о Гамасутре: интеллектуальные ошибки: как включить глупость в ваш код AI , написанную Миком Вестом.

Эта статья рассказывает об искусстве игры в пул. При реализации такого ИИ довольно легко заставить его забивать мяч при каждом выстреле. Упрощенный способ сделать ИИ менее «умным» состоит в том, чтобы, как было предложено в других ответах, добавить в расчет случайный фактор, заставляя ИИ больше пропускать.

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

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

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

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

Таким образом, игрок будет думать, что ему повезло. И это то, что вы ожидаете от игры, когда в нее легко играть.


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

Хотя я согласен не использовать рандомизацию, я не согласен с тем, чтобы «помогать игроку»: это было бы похоже на мошенничество, только намного хуже, потому что вы бы обманули игрока.
о0 '.

@ Lo'oris: Ну, я не вижу в этом лжи. Когда игроки говорят, что игра должна быть легкой для него, он ожидает, что игра будет мягкой. Когда вы играете в игру, в которой вы действительно хороши с другом, который только что обнаружил это, я чувствую, что вполне нормально дать ему возможности. Это делает игру более приятной для всех.
Тын

1
Есть хорошая запись в блоге Шона Харгривса о рандомизации и способности человека определять закономерности в случайности. Это переведет тонну, в этом случае игрок неправильно оценивает тактику ИИ-игрока.
Джонатан Коннелл

1
На самом деле, я думаю, что рандомизация по точности - хороший путь. С реальным игроком, который не так хорош, иногда он ошибается и бьет лучше.
AttackingHobo

10

Ключевая концепция состоит в том, чтобы не давать NPC "совершенное знание".

  • Рандомизированный предел погрешности при любых решениях или действиях, которые включают расчет. очевидный пример - прицеливание (например, снайперы штурмовиков). Если они не всегда бьют тебя, это более реалистично.
  • Line of Sight ... если они не видят вас, это может сделать интересную игру в кошки-мышки.
  • В командной тактике, в зависимости от вашего типа игры, враги, которые адаптируются к ситуации, могут быть намного интереснее. Например, если в вас стреляют, вы не будете атаковать вслепую, вы будете укрываться, пока не погаснет входящий огонь. Или, возможно, вы бы чувствовали себя более комфортно в спешке, если рядом есть товарищи по команде ... вы можете смоделировать такое поведение, чтобы заставить NPC вести себя так, как если бы они были живы.

Я уверен, что будет дано гораздо больше примеров, возможно, вы могли бы рассказать нам о своей игре, и мы можем получить более конкретную информацию :-)


4

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

Вот небольшой пример для вывода:

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

Вот несколько идей для ввода:

  • Если действия основаны на здоровье противника, добавьте случайный коэффициент (скажем, +/- 10 для бара здоровья 0-100) к воспринимаемому ИИ состоянию.
  • То же самое для оценки действий, если ИИ знает, что некоторые атаки сильнее других, случайным образом добавляйте / вычитайте некоторые значения там.

Одной очевидной вещью, которую нужно принять во внимание, является скорость ИИ. В большинстве игр ИИ могут реагировать НАМНОГО быстрее, чем люди (особенно в бою), и выполнять многозадачность (это очень заметно в играх RTS). Таким образом, вы должны действовать в соответствии с этим, поддерживая ИИ немного медленным (возможно, адаптивно) и ограничивая количество действий, которые он может выполнять в определенный промежуток времени (т.е. одно действие каждые полсекунды).

Надеюсь, что это помогает и удачи!


3

Трудно дать прямо полезный ответ, не зная, что именно вы пытаетесь сделать.

У меня есть две вещи на эту тему, которые могут вам помочь.

Первое (и это, безусловно, самое важное): если вы пытаетесь заставить врага чувствовать себя более интересным и человечным, ваша тактика ведения боя не имеет значения. Хитрость в том, чтобы заставить игроков «верить», что враг жив, состоит в том, чтобы использовать анимацию, звуки и мелкие детали, чтобы подразумевать поведение человека. Идеальный ИИ может пройти за угол, увидеть игрока и выстрелить. ИИ-человек может пройти за угол, увидеть игрока, удивленно взглянуть ему в лицо, выкрикнуть в тревоге и выстрелить. Первый кажется роботизированным. Второй кажется человеком. Оба используют идентичный ИИ во всех отношениях, кроме вставки анимации непосредственно перед стрельбой (или, чтобы сохранить тактическое поведение во время стрельбы).

Во-вторых, избегайте рандомизации. Игроки не ценят это так сильно, как дизайнеры хотят думать, что они будут. Игроки не видят, что «компьютер сгенерировал 1 из 100, а затем 5, 3 и 4, поэтому факторы ошибок для последних четырех выстрелов составляли только 1%, 5%, 3% и 4%, и это почему ты умер за полсекунды в этом раунде ". Игроки просто видят врагов, которые иногда дико скучают, а другие время от времени бьют их без видимой причины, что невероятно расстраивает. Хороший игровой дизайн - это, в основном, создание шаблонов, которые могут сделать люди-игроки.наблюдать, учиться и побеждать, и добиваться успеха игрока, основываясь на его собственных суждениях, умениях и интуиции, а не на том, повезло ли игроку. Стремление к рандомизации исходит из опыта настольных игр и азартных игр, которые невероятно отличаются от видеоигр (а то, что работает в одной среде, часто не имеет смысла в другой).


1

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

  • Используйте «библиотеки ходов». Если вы сражаетесь с орком, скажите ему 3 боевых упражнения, которые они время от времени повторяют. Это облегчает борьбу за счет большей предсказуемости, что кажется противоположностью того, чего вы хотите, но все же делает ИИ менее «идеальной машиной» и более «нубом, повторяющим одно и то же движение снова и снова».
  • Субоптимизация, если это возможно. Если, как вы говорите, ваш ИИ основан на расчете лучшего хода, наложите искусственный лимит на этот расчет. Сделайте поиск меньше или ограничьте количество шагов. Вместо лучшего хода, ИИ выберет просто хороший ход. Это может добавить разнообразия в поведении ваших врагов, так как есть больше хороших, чем лучших ходов.
  • Сделайте ошибки нарочно. Вместо лучшего хода выберите второй или третий лучший. Или даже выбрать ход, который имеет плохую полезность. Это может помочь решить проблему «непредсказуемости».

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


0

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

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

  • Атака мечом (30 очков)
  • Огненное заклинание (50 очков)
  • Заклинание льда (20 очков)

Суммируйте общее количество баллов (100)

Возьмите показатель интеллекта персонажа из максимально возможного значения для этого показателя (скажем, 60 из 100).

Создайте случайное число между 0 (или некоторым другим полом) и коэффициентом интеллекта (0,6), умножьте на общее количество баллов (100). В нашем примере, скажем, результат 45.

Теперь вы начинаете вычитать плохие ходы из этого значения, пока не достигнете нуля. (Вычтите по порядку.)

Сначала мы рассмотрим заклинание льда, которое набрало 20. 45 - 20 = 25. Это выше нуля, поэтому мы выбрасываем заклинание льда.

Во-вторых, посмотрите на Атаку с мечом, стоимостью 30 очков. 25 - 30 = -5. Мы достигли порога, поэтому выбираем Атаку с помощью действия меча.

В этой системе персонаж с низким интеллектом не выберет лучший ход. И персонаж с высоким интеллектом часто выбирает лучший ход. (В этом примере персонаж с совершенным интеллектом выбирает лучший ход в 50% случаев.)

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.