Максим Потятиник
апрель 2016.
680

Зависит ли разумность ботов в видеоиграх от мощности компьютера?

Ответить
Ответить
Комментировать
0
Подписаться
0
3 ответа
Поделиться

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

Итак.

Во многих случаях (вероятно, в подавляющем большинстве) - не зависит. Часто ИИ (искусственный интеллект) специально стараются писать наиболее простыми алгоритмами (способами) для того, чтобы поменьше нагружать машину, потому что хотят сэкономить ресурсы для впечатляющей картинки на экране. Если брать шутеры, то приблизительно 95-99% уходит на графику и физику (падение, столкновение, полёт осколков, пыль, жидкости). Это то, что игроки видят чаще всего, это впечатляет больше всего, поэтому ресурсы выжимаются до капли, чтобы обеспечить наилучшую графику. Остальным аспектам (как ИИ) приходится довольствоваться огрызками.

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

Дело ещё и в том, что создание действительно хорошего ИИ - это очень сложная и не всегда успешная задача (особенно обидно, должно быть, работать полгода и понять, что ИИ не вышел). А талант хорошего разработчика игр заключается также и в том, чтобы уметь определять, как лучше всего потратить деньги, чтобы при затратах поменьше получить игру поуспешнее. С такой позиции, как понимаете, ИИ находится в непростой ситуации. Чаще дополнительные деньги вкладывают в спецэффекты, в кат-сцены, сюжет, скрипты. В ИИ деньги вкладывают тогда, когда он является важной составляющей геймплея (в голову приходят S.T.A.L.K.E.R. и F.E.A.R.).

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

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

Прежде всего, хочу отметить, что хорошо написанный, способный ИИ обязательно работает асинхронно (как отдельная задача для процессора), поэтому от мощности процессора результат, всё-таки, зависит. Чем сложнее ИИ, тем больше вещей он понимает и учитывает, тем больше ему требуется времени на осмысление текущей ситуации. На одном процессоре он может справиться за 0.1 секунды, а на другом - за 0.5. Но, конечно, разработчики не дадут вам догадаться, что ИИ "тупит" и не знает, что ему делать. Пока ИИ думает, он просто будет продолжать делать то, что делал раньше (стрелять, сидеть за укрытием или же бежать, куда бежал, а если прибежал - стоять там и отстреливаться).

Также в некоторых играх есть несколько интересных задач, которые требуют сравнительно долгих вычислений (от 0.1 до 1-2 секунд). В основном это всё касается ориентирования в пространстве: понимание "видимости" (откуда что видно, понимание секторов обстрела и целесообразности укрытий) и определение маршрута до нужного места. Для простых коридорных уровней эта задача решается так, что все возможные маршруты, сектора видимости и укрытия просчитаны заранее и боты просто знают их как таблицу умножения. Если тебе нужно туда-то или в тебя стреляют оттуда-то, значит маршрут такой, а укрытия - такие (так сделан FEAR). При таком подходе боты ориентируются весьма быстро.

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

Поэтому используется комбинированный вариант. Для своих глобальных планов боты пользуются "таблицей умножения". Поскольку по ходу игры она начинает устаревать (рушатся стены, укрытия, открываются или закрываются маршруты), отдельная задача в процессоре (своеобразный "командующий всеми ИИ") занимается тем, что постоянно обновляет эту таблицу умножения. Например, как только стена была разрушена, "командующий" помечает все объекты и маршруты рядом с этой стеной как "под вопросом" и начинает анализировать этот кусок уровня, чтобы понять, какие появились возможности (можно ли сквозь пролом куда-то дойти? а имеет ли смысл это делать? в каких случаях это стоит делать, а в каких нет?), какие возможности закрылись (укрытие разрушено? здесь теперь опасно, простреливаемая область? враг может здесь атаковать?), какой открылся обзор (что теперь позволено видеть боту, когда он здесь стоит?). "Командующий" начинает пересчитывать таблицу начиная от разрушенной стены и потом всё дальше и дальше и дальше, пока не проверит всю таблицу целиком и не решит, что она снова отражает текущую ситуация на уровне. Это может потребовать много секунд (с трудом представляю сколько, но допустим, от 3 до 30 секунд, ведь мы помним, что ресурсы нужно потреблять потихоньку, оставляя большую часть для графики).

Там, где "командующий" ещё не успел обновить таблицу, ботам приходится пользоваться устаревшей версией. То есть они как бы не замечают сломанной стены. Особенно трудно приходится ботам в "секторе под вопросом". Они вынуждены пользоваться упрощённым, ситуативным алгоритмом, действуя в большей степени наугад, чем осмысленно. Их логика действий примерно такова: если ты вроде как в "укрытии" (по данным старой таблицы), но в тебя почему-то попали, вычёркивай это укрытие из таблицы и начинай поиск какой-нибудь стены поблизости. Нашёл стену? Представь, что ты встал рядом с ней. Проведи линию от себя к тому, кто в тебя выстрелил. Линия упёрлась в эту стену? Отлично. Беги к этой стене, стой там и отстреливайся, пока командующий не даст новую таблицу этой части карты. При этом у бота нет возможности проверить множество других мелочей (которые проверяет "командующий" при построении таблицы и поэтому это так долго). Например, может оказаться, что стена-то близко, но она находится этажом выше. При попытке добежать туда по прямой, бот просто встанет под этой стеной и окажется ситуации "чёрт, а где стена? найти стену. вот стена. отлично, бежим к ней. но ты уже прибежал к ней. чёрт, а где тогда стена?". Или же стена правильная, но, встав за неё, ему ничего не видно, ему некуда оттуда стрелять, и он просто стоит и ничего не делает. Спасает только то, что эту область "командующий" начинает обновлять в первую очередь и можно надеяться, что он обновит её за секунду-другую и эту тупость никто не заметит.

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

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

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

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

3
0
Прокомментировать

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

Правда, уже пугали, что нейросети научат играть в StarCraft http://www.kotaku.com.au/2016/03/starcraft-could-be-the-next-frontier-for-googles-alphago-ai/

0
0
Прокомментировать

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

Виктор Руденкоотвечает на ваши вопросы в своейПрямой линии
4
-5

Не совсем верно. Зависит от игры.

-1
Ответить

А игра это программа, а в программе заложены алгоритмы поведения ботов.

0
Ответить

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

Я написал свой ответ на вопрос.

0
Ответить
Ещё 6 комментариев

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

+1
Ответить

Хорошо. Давайте тогда возьмём случай, когда боты умеют самообучаться.

Где-то 15 лет назад я любил играть в Quake 2  с замечательными ботами, которые использовали принцип самообучения.

Оригинальный Quake 2 вышел без мультиплеерных ботов. Мультиплеер подразумевался только с людьми. Фанаты стали писать таких ботов. Но задача эта была очень непростая, поскольку мультиплеерные карты не содержали никакой помощи для ИИ. Банального графа связности комнат (чтобы знать из каких комнат в какие можно прийти) - и того не было.

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

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

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

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

Однако через пол часа игры они преображались. Бегали немножко коряво, но уже на уровне человека-новичка, вполне умели прятаться за укрытиями. А через пару часов игры они выходили на мой уровень: падали с обрывов не случайно, а намеренно (чтобы спрятаться или срезать путь), использовали рокет-джампы (эти вещи он подсматривал у игрока/ов), умели прятаться в тёмных углах, выбирали оружие в зависимости от ситуации.

Особенно интересно было играть в Capture The Flag (команда на команду), потому что на небольших картах боты вполне могли работать командно (или, как минимум, создавалась такая видимость).

Теперь вам вопрос. Как вы думаете, итоговая результативность таких алгоритмов тоже не зависит от мощности процессора?

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

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

+1
Ответить

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

0
Ответить

т.к логичность поведения закладывает алгоритм а не мощность компа <

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

Будет ли зависеть видимая разумность поведения бота в игре от мощности процессора? Безусловно. Процессора мощностью в 1 ГГц, допустим, хватит только на то, чтобы кое-как добираться от укрытия к укрытию, двигаясь по карте в случайных направлениях. О контроле карты или скоординированных действиях речи нет.

А если мы возьмём 10 процессоров по 3 ГГц, то они уже, допустим, смогут понимать смысл передвижения по области карты размером 100 квадратных метров (10х10 метров). Но за пределами этой области они по прежнему будут слепыми и глупыми как новорождённые котята (нет мощности, чтобы выстроить маршрут), поэтому двигаться придётся наугад. Возьмём 100 процессоров. Боты, может быть, будут способны контролировать существенную часть карты и, стало быть, получат способность действовать осмысленно, решать какие-то задачи (контроль области, защита области, взаимное прикрытие и т. д.).

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

+1
Ответить

ALEXANDER OVCHARENKO если можно то чуть лапидарнее излагайте. Я просто тону в вашем тексте)))

Еще раз обращаю внимание что я говорю о "розумности" а вы о "видимой разумности".

+1
Ответить

А коротко тут и обсуждать нечего.

  1. Безусловно, чем более понимающий алгоритм, тем больше ему нужно всего учитывать, тем больший объём информации нужно обрабатывать в единицу времени, тем более мощный нужен процессор.

  2. Чем более понимающий алгоритм, тем больше ему необходимо знать, тем больше ему нужно оперативной памяти.

  3. Между "разумностью ИИ" и "видимой разумностью" нет никакой разницы.

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

Допустим, вы знаете правила игры в шахматы, но опыта игры у вас нет. Вам предлагают сыграть партию, где на ход вам отведено 10 секунд. Насколько разумной будет ваша игра?

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

10 секунд - это аналогия с очень медленным процессором, а 1 месяц - с очень быстрым.

+1
Ответить
Прокомментировать
Ответить
Читайте также на Яндекс.Кью
Читайте также на Яндекс.Кью