Брайан Рейнольдс о искуственном интелекте
(Brian Reynolds), Firaxis Games
Один из лучших учеников Сида Мейера (Sid Meier), Брайан Рейнольдс принимал участие в создании таких классических стратегий, как Colonization и Civilization H. На момент написания этой книги Брайан являлся вице-президентом компании Firaxis Games по разработке программного обеспечения. Последняя его работа - военно-историческая игра Antietam! «Вопреки бытующему мнению, - говорит Брайан, - создание ИИ для компьютерной игры обходится без черной магии. Совершенно не обязательно доставать какие-то запатентованные алгоритмы или знакомиться с результатами последних исследований в области нейронных сетей. Все, что вам нужно, - это немного вдохновения и огромное упорство». В следующих трех параграфах описаны некоторые из излюбленных методов Брайана Рейнольдса.
Итеративный процесс разработки
Прежде всего в ходе создания ИИ, как и при создании самой игры, необходимо использовать «итеративный процесс разработки». Начните с простого моделирования передвижения вражеских фигурок, пусть даже ваш алгоритм окажется не сложнее, чем «switch(rnd(4))». Затем попробуйте сыграть против вашего ИИ и понаблюдайте за тем, какие ходы он делает. Дождитесь, пока система совершит какую-нибудь глупость (в первый раз это случится очень быстро), а затем подумайте вот над чем: а) какие ошибки допустил компьютер (предположим, пустил танки через лес, что замедлило их передвижение, или из всех родов войск начал «строить» исключительно артиллерию); б) как бы вы сами поступили на его месте (двигали бы танки по дороге, в разумных пропорциях «строили» пехоту, артиллерию, танки и самолеты...); в) какие данные заставили вас (помогли вам) принять это решение (юниты быстрее передвигаются по дороге; у вас уже имелась пушка, но не было ни одного пехотинца). Измените алгоритм с учетом этих данных.
Теперь начните игру заново - до очередной ошибки, после чего весь процесс повторяется. Раз от раза ваш ИИ будет становиться все умнее и умнее. Так на практике выглядит пресловутая «самообучающаяся система». Благодаря таким многократно повторяющимся циклам игры и исправления кода, ИИ набирает опыт и начинает играть все лучше и лучше.
Чтобы проиллюстрировать свою идею, Брайан Рейнольдс рассказал нам о том, как он, будучи молодым программистом, работал над своей первой игрой (Colonization).
По правде сказать, когда пришло время приступать к работе над искусственным интеллектом, я немного побаивался. Игра к тому моменту в общих чертах уже была готова: в нее можно было как-то играть, передвигать отряды, но ИИ совершенно не знал, как выполнять какие-либо действия. С чего же начать? Я до сих пор помню совет, данный мне Сидом Мейером: «Сначала научи компьютер делать один ход. Затем научи его делать два хода, и лишь потом думай о том, чтобы он сделал 10 ходов».
Начните с простого
Начните с тривиальных компоновочных блоков. Например, для стратегической игры сначала полезно написать стандартную процедуру, задающую маршрут перемещения любого объекта из пункта «А» в пункт «Б». Обычно это называют алгоритмом поиска пути (или перемещения). Создание процедуры поиска пути - весьма подходящий замкнутый проект для начала работы: нужно только научить объект, как переходить «отсюда» «туда», и поначалу не обращать внимание на то, как он будет выбирать это самое «туда». Я не говорю, что написать хорошую процедуру поиска пути просто, но всегда легче начать работу с понятной задачи, а затем перейти к более сложной. Как только процедура поиска пути будет готова, можно приступать к другой задаче - определению, в какое место карты должны двигаться ваши фигурки. И теперь вам уже не надо будет заботиться о том, как именно они туда доберутся.
Процедура поиска пути отвечает за перемещение одного или нескольких юнитов из пункта «А» в пункт «Б», а также за выбор наиболее рационального маршрута движения. Вам когда-нибудь приходилось замечать, как в старых стратегиях, идущих в реальном времени, отряды застревают на полпути или выбирают длинные и неудачные маршруты?
Умножение и деление на двойку
В самом начале своей карьеры я научился у Сила Мейера еще одному замечательному приему. Подобно другим нашим уловкам, он одинаково хорошо применим и к разработке игр, и к созданию искусственного интеллекта. Метод состоит в следующем: если у вас есть какое-нибудь значение или эффект, и вы хотите его скорректировать, удвойте его или поделите пополам. Например, если танки кажутся вам слишком дешевыми, удвойте их стоимость. Не пытайтесь увеличивать значение с 10 до 11, гадая о том, возымеет ли это нужный эффект. Сразу «поднимите ставки» до 20, даже если это и кажется не совсем уместным. А теперь все внимание на игру: изменения от удорожания танков видны невооруженным взглядом - стало быть, вы получили четкое представление о роли этого параметра. Цена слишком велика? Отрегулируйте ее, уменьшив значение до 15. И так далее. Если вам кажется, что компьютер создает слишком много пехотинцев, сократите вероятность их производства сразу вдвое. Я помню сотни случаев, когда я увеличивал или уменьшал вдвое тот или иной параметр, ожидая увидеть слишком сильные изменения, а на поверку выходило, что для достижения желаемого эффекта нужно было еще раз умножать или делить на двойку. И снова повторюсь: итеративный метод здесь незаменим.
Брайан закончил интервью следующим советом: «Придерживайтесь простого алгоритма: попробовал - исправил - повторил. И не ошибетесь».