Delphi World - Проблема проектирования искуственного интелекта в компьютерных играх
Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Проблема проектирования искуственного интелекта в компьютерных играх

Автор: Andrew Luppnow
Перевел и дополнил: Daddy

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

Далее по тексту, "СПР" – сокращение от "система принятия решений". Этим термином будем называть любую систему, которая принимает "ситуацию" на входе и генерирует "ответ" на выходе. Примером СПР может быть простая нейронная сеть, набор жестко заданных правил, набор нечетких логических правил. Наиболее важной особенностью системы должна являться ПРОСТОТА и ЛЕГКОСТЬ МОДИФИКАЦИИ - в частности она должна принимать на входе данные от малого, конечного возможного набора входных данных и генерировать на выходе подобный малый, конечный возможный набор выходных данных.

Некоторое время назад я начал думать о разработки AI для компьютерной игры, требующей, чтобы компьютерный противник избирал разумную военную стратегию. В конечном счете я понял, что СПР с информацией относительно позиции и состояния каждого дружественного и вражеского солдата безнадежно неэффективна - это сродни представлению генерала с такой информацией и ожиданием от его управления движениями каждого солдата!

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

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

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

Я решил, что эта система может представлять хорошую концептуальную модель для написания искусственного интеллекта в сложной стратегической игре. Дерево СПР может использоваться, для эмуляции цепочки командования в военной иерархии. Определенно, можно использовать относительно более простую СПР для каждого уровня. Входными данными для СПР уровня «k» будут выходные данные уровня «k+1», а выходные, в свою очередь, входными для «k-1» уровня. Выходные данные 0 уровня используются для обновления данных о территории (поле битвы).


На рисунке:

Генерал – малое количество параметров позволяют предвидение и рассуждения вида «что-если»
Солдаты – много параметров, но принимаемые решения простейшие, без попыток предвидения и рассуждений вида «что-если»

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

  • " направлять все военные действия на захват территории X ", или
  • " вести войну на истощение на территориях X, Y, и Z ", или
  • " выиграть время - придерживаться дипломатии до некоторого времени ", или
  • " избегать, прямых столкновений - концентрироваться на прерывании вражеской добычи ресурсов ", и т.д.

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

Пример того, как это может быть:

Уровень3 дает приказ
	-расширение влияния на карте

У2 более конкретизирует этот приказ:
	-добыча ресурсов
	-атака противника

У1:
	-строительство юнитов для добычи ресурсов и строительства базы
	-строительство юнитов для атаки
	-отдача приказов юнитам 

У0:
	-передвижение
	-атака
	-сбор

Предположим:

  • у0 передвигаясь заметил вражеских юнитов в позиции X,Y передал у1
  • у1 обработал полученные данные, дополнив их данными о количестве и силе врага и передал параметры у2
  • у2 просчитал шансы исходя из существующих на данный момент сил и вероятности их увеличения, как со своей, так и с вражеской стороны, и передал данные у3

Тогда:

  • у3 считает шансы на увеличение влияния на карте высокими и дает приказ на подавление противника у2
  • у2 выделяет необходимые силы, разрабатывает стратегический план и дает приказ на атаку этой группы противника у1
  • у1 делит силы на группы, строит группы и дает приказ на атаку каждого отдельного вражеского юнита у0

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

Проект Delphi World © Выпуск 2002 - 2017
Автор проекта: Эксклюзивные курсы программирования