» Фантастика » » Читать онлайн
Страница 142 из 163 Настройки

Система послушно зашуршала дебаг-логом, подгружая данные:

ListAction actions = new ListAction()

{

new SpawnNormalEnemy(),

new SpawnTankEnemy(),

new SpawnFastEnemy()

};

Консоль снова услужливо перевела происходящее на человеческий: «Агент получил список возможностей».

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

— Ну-ка, посмотрим, как именно ты решил проблему. — пробормотал я, снова нажимая Enter, и тут же довольно крякнул.

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

Goal goal = new ReachBaseGoal()

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

Цель: Добраться до базы

Условия мира:

Линия 1 — опасность 10

Линия 2 — опасность 3

Линия 3 — опасность 7

Оценка вариантов:

Атаковать линию 2 (наименьшее сопротивление)

Пробую инструменты:

обычный враг → стоимость 10, не хватает силы сломать стену (Отказ)

летун → стоимость 20, игнорирует стену (Одобрено)

танк → стоимость 50, сломает стену, но избыточен (Отказ)

Решение:

Спавн: летун на 2 линию.

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

Ошибки быть не могло. Передо мной на экране крутился сырой, но невероятно перспективный прототип GOAP-системы (Goal-Oriented Action Planning). Настоящий думающий ИИ. Конечно, ничего сверх прорывного в этом не было. Додуматься до такой системы и в моем мире многие программисты смогли самостоятельно. Но все же сделать такую работу с нуля за пару дней — это достойно.

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

Да, конечные автоматы тоже нужны и отлично работают в определенных рамках — гумбы в Марио, солдаты в Халф лайф, мутанты в Сталкере или те же зомби, тупо бредущие по прямой к дому. Вижу врага — бегу — атакую. Такая система дешева в производстве и почти не жрет ресурсы процессора.

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

А система Коула могла масштабироваться. Достаточно докидывать ей новые «Действия» и «Цели», и она сама будет учиться их комбинировать. Конечно, есть нюансы, но это всяко удобнее, чем делать все ручками.

— Определенно, надо брать. — Пробубнил я себе под нос.

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

Глава 26

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

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

Во-первых, это сильно замедлит работу всей команды. Да, в этом мире уже существовал Скайфлайт — старксофтовский аналог Скайпа. Были и Тимспик, и Логмейн, он же Шлу Ту Митинг, но для серьезной проектной работы все это толком не работало. Пока твой спец не сидит у тебя под боком, в зоне прямого тыка шваброй, у него всегда есть непреодолимый соблазн проебаться. И он им воспользуется.