Category: дизайн

Category was added automatically. Read all entries about "дизайн".

любопытно

Разработка AI в стратегических компьютерных играх III

Наконец добрался выложить третью часть.
Ссылки на предыдущие: первая, вторая.

В обсуждениях предыдущих частей мне задали несколько вопросов, попробую ответить.
1. (Это не прямая цитата, я попробую обобщить несколько схожих вопросов) Идеи так или иначе не новые, и встречались в хорошо изученных областях computer science (например: rule-based systems; автоматное программирование). Почему бы не вести рассказ в таких терминах? Или более того, использовать достижения этих областей напрямую?
Более банальная причина состоит в том, что на момент написания текста (2004 год) я еще мало что знал об аналогах, а масштабно переписывать нет времени. Менее явная, но более важная - в том, что переформулировка такого узкоприкладного текста в терминах более широкой области знаний мне кажется неверной. Дело в том, что такая переформулировка приведет к иной расстановке акцентов. Появляется желание мысленно отбросить все то, что на этот язык не переводится. Например, можно сформулировать рассказ в терминах конечных автоматов. Первая часть на таком языке говорит о комбинаторном взрыве числа состояний. Вторая - как этот взрыв преодолевается переходом к стековым автоматам. Но при каждой подобной интерпретации что-то теряется (например, в этом случае мы проигнорируем важность явного управления со стороны сценария, или семантику "минимального поведения"). К тому же появляются какие-то ложные и отвлекающие ассоциации. Например, в автоматном программировании важна (во всяком случае, часто обсуждается) автоматическая проверка полноты и достижимости всех состояний. В игровом AI это не имеет особенного смысла.

2. А как насчет DSL для AI? Мне кажется, это очень хороший подход. Как раз, в нем можно будет описывать планы, правила поведения, и прочее.
Я об этом когда-то размышлял. К сожалению, вряд ли это применимо на практике. Для одной игры (или даже для серии), думаю, оно того не стоит: существующие универсальные языки (тот же Python) достаточно хороши, улучшения будут незначительными - а там, где Python использовать нельзя из-за ограничений "железа", и обязателен С(++), с высокой вероятностью нельзя будет использовать и свой язык. Имело бы смысл делать его как middleware, если бы AI middleware не было так сложно позиционировать и продавать. Может быть, когда у меня каким-то чудом появится много времени, я сделаю подобное middleware "на общественных началах".

3. Вы делали "вязкость AI"? Т.е. чтобы AI был бы ленивым, и не рыпался менять тактики из-за каких-то мелких изменений обстановки.
Иерархическая goal-based система как раз и обеспечивает "вязкость" поведения: структура дерева планов меняется довольно редко и, что называется, "по делу": когда план выполнен или наборот, когда его выполнение уже не представляется возможным. На проблему "дрожания" чем-то похожа проблема "зависания AI", упомянутая в первой части. Но проблема зависания проще: по сути, нужно обеспечить "вязкость" на нулевом времени (я уже писал, как именно можно это гарантировать). Чаще возникает как раз обратная проблема "упрямства", когда план продолжает выполняться в явно неадекватной обстановке - вот зачем понадобились "ассоциированные логические цепочки".

4. Вы задумывались, а видит ли игрок все эти рейды, атаки, передислокации, и пр? ИМХО, когда я играю в стратегии, для меня это не видно. Все, на что обычно я обращаю внимание, это копит ли враг на базе юниты, и атакует ли он меня. Все остальное для меня не имеет особого значения.
Задумывался. Что-то об этом сказано в тексте ниже. К этому еще добавлю, что "рейды" и "передислокации" упомянуты только в качестве удобных примеров. На самом деле эта система дает большой выигрыш и в реализации куда более важного и банального поведения, например, "swarm to position", "патрулировать", "собирать ресурсы" или "атаковать базу противника". Преимущество не столько в том, что AI становится "умнее", сколько в том, что он перестает совершать совсем бредовые действия a la "маршировать, упершись в стенку лбом". Исправление багов становится проще и быстрее.
Collapse )