Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ИИ в играх.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
139.26 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

Филиал федерального государственного бюджетного образовательного учреждения высшего профессионального образования «Национальный исследовательский университет «Московский энергетический институт»

в г. Смоленске

Кафедра вычислительной техники

Доклад

по теме: «Искусственный интеллект в компьютерных играх»

По курсу «Интеллектуальные системы»

Преподаватель: Зернов М.М.

Студенты: Чандер А.

Шорохов А.

Группа: ВМ – 08(м)

Смоленск 2012

Введение

Первой проблемой, встающей перед начинающими программистами при написании ИИ, является, как ни странно, никак не связанная с алгоритмами построения этого самого ИИ проблема. А именно - как организовать ощущение мира игры компьютерным персонажем (в дальнейшем будем его для краткости называть ботом вне зависимости от жанра игры и исполняемой роли)? Ведь любому алгоритму нужны какие-то данные для обработки - сведения о местоположении игрока, своей базе и войсках, карте, на которой происходит битва... Разумеется, реализовывать это «честно» (т.е. вычисляя боту видимый им самим экран и распознавая образы) не хватит никакого времени и ресурсов компьютера. Поэтому приходится идти на упрощения и откровенно жульнические приёмы. Причём чем больше данных получает бот, тем труднее писать и/или обучать его ИИ. Заставить ИИ честно проводить разведку местности довольно трудно, потому и приходится подобным образом жульничать.

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

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

В случае стратегии или RPG область видимости юнита у нас, как правило, составляет круг, а карта - плоская. В таких условиях рассчитывать видимость намного проще, что компенсируется куда большим количеством юнитов на карте. И вот тут-то как раз какие-то усложнения алгоритма вряд ли уместны, разве что в случае тактической стратегии или RPG с упором на реалистичность/stealth-элементами. Во-вторых, нужно всегда помнить одну из главных заповедей игрового ИИ: «Задача бота - не выиграть, а красиво проиграть». Бот всегда превосходит человека реакцией, данными об игровой ситуации и наличием бонусов. В таких условиях сделать ИИ, размазывающий игрока ещё на старте, не так сложно. Но кому нужен подобный бот? Да, игроки бывают разной степени мастерства. Да, они постоянно обвиняют ИИ в тупости. Но стоит переборщить – и в игру просто-напросто никто не станет играть, а вместо обвинений в тупости пойдут обвинения в читерстве (и, кстати, вполне законные - как уже было сказано, сделать ИИ, получающий данные подобно человеку, крайне сложно и накладно). Поэтому в ориентированной на более-менее честное противостояние с ботом игре (в-основном, стратегии, в меньшей степени action, ну а к RPG это почти не относится) стоит сделать несколько уровней сложности именно искусственного интеллекта, а не занижения-завышения игровых параметров бота/игрока. Хотя второй путь, конечно, проще, и им также часто пользуются (смотри, например, Heroes of Might & Magic V).

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

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

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