(Начало в №17)
Беглый взгляд на AI (ИИ)
Давайте дальше говорить о разработке компьютерных игр. Я уже немного рассказал вам об общих подходах к этому процессу и о том, что такое DirectX. Я помню, что обещал рассказать о десятой версии этой мультимедийной системы и о Managed DirectX. И собирался писать следующую статью именно по этим темам. Но потом подумал, что будет гораздо интереснее рассказать о такой важной составляющей современной GameDev-индустрии, как AI - Artificial Intellect, или, по-русски, ИИ - искусственный интеллект.
Говорить о ИИ можно бесконечно, причём, что характерно, не рискуя впасть в демагогию. Но я, к сожалению, этого себе позволить не могу, потому что существует редактор, который вряд ли готов отдать всю газету под статью об искусственном интеллекте, тем более о таком специфичном, как тот, что применяется в игровой индустрии. Поэтому сейчас я изложу кратко историю развития этого направления математики и обрисую существующее положение вещей с точки зрения разработчика игр. Историю я кратко расскажу в соответствии с замечательной книгой "Компьютер обретает разум" под редакцией В. Л. Стефанюка, выпущенной издательством "Мир" ещё в 1990 году. Если вы интересуетесь искусственным интеллектом, то, пожалуй, лучшей книги для знакомства с ним не найти. Так что спрашивайте её в библиотеках.
В общем-то, говорить об ИИ как о явлении, связанном только с игровой индустрией, было бы не просто неверно, а в корне неправильно. Фактически, вся история развития вычислительной техники базируется на интересе человечества к этому феномену. Некоторые считают, что первая мысль об искусственном интеллекте принадлежит ещё выдающемуся французу Рене Декарту, который выдвинул идею о том, что животные и человек - это сложные механические системы. Но, конечно, если уж забираться в глубь веков, то, на мой взгляд, самым ярким из мечтателей об искусственном интеллекте можно назвать Чарльза Бэббиджа, мечтавшего построить "думающую" машину. Но это всё, что называется, преданья старины глубокой. Потому что по-настоящему ИИ занялись только с появлением первых вычислительных машин.
Одним из первых имён, которое мы встречаем в новой истории ИИ, стало имя отца-основателя кибернетики Норберта Винера. Ему принадлежит идея и теория "обратной связи" - т.е. принципа самообучаемости "разумных" машин на основе информации, поступающей из внешнего мира. Эту теорию впоследствии взяли на вооружение множество учёных, среди которых был и ученик профессора Винера Уоррен Маккалох. Он, в соавторстве с собственным учеником Уолтером Питтсом, предложил конструкцию сети из электронных "нейронов", причём этими же учёными было доказано, что такая сеть в состоянии выполнять любые мыслимые арифметические и логические операции, а, значит, в перспективе сможет и распознавать образы, и обучаться, и обобщать... В общем, теперь, благодаря им, дело было за "малым" - перейти от теории к практике и построить такую "интеллектуальную" электронную сеть.
Одним из первых практиков создания ИИ стал Фрэнк Розенблат, который предложил модель перцептрона - электронного устройства, которое должно было имитировать человеческое мышление. Но воплощённые в электронике, стоившей тогда на вес золота, результаты оказались гораздо скромнее, чем теория: первый рабочий прототип с трудом распознавал буквы на карточках, подносившихся к его "глазам"-кинокамерам. В общем-то, на этом достижения "восходящего подхода" к ИИ, предусматривавшего движение от аналогов простых нейронных систем животных к сложной человеческой, и закончились, потому что возникла новая школа - "нисходящий подход". Он состоял в том, что сложность закладывалась в систему изначально, а сама система реализовывалась не в виде аналоговых устройств, а в виде программы для цифровой ЭВМ. Основоположниками этого подхода принято считать Марвина Минского и Сеймура Пейперта, профессоров МТИ1.
Это самые истоки развития теории искусственного интеллекта. Но, как бы интересна ни была история, пора уже заканчивать рассказ о ней, ибо см. выше. Для разработки ИИ для компьютерных игр не нужно знать всё об его истории, потому что, на самом-то деле, большая часть современных игр не пользуется и десятой частью наработок этой теории. Но, тем не менее, ещё немного об истории ИИ я расскажу, потому как это касается непосредственно игр.
Как вы думаете, в какой из игр появился первый искусственный интеллект? Нет, не Doom 2 и не Dune, всё было намного раньше... Естественно, самой интеллектуальной игрой, доступной для реализации на компьютере, в те годы были шахматы. Пожалуй, ни до, ни после столько именитых людей не работали на одну компьютерную игру. Автором идеи создания игры был А. Ньюэлл, теоретическую основу предложил знаменитый Клод Шеннон, а математическую формализацию выполнил не менее известный Алан Тьюринг. Пока математики разрабатывали алгоритмы, группа голландских психологов под руководством А. Де Гроота изучала стили игры самых выдающихся мировых шахматистов. Кибернетики создали первый в мире символьный язык обработки списков ИПЛ-1, ставший прототипом неумирающего ЛИСПа. Вот так игры и служат прогрессу человечества. Разработка же самой компьютерной программы NSS, игравшей в шахматы, растянулась на три года. В последующем на основе NSS была создана система "Универсальный решатель задач" (General Problem Solver - GPS). Однако успехи этих системы были, по правде сказать, не слишком впечатляющими.
Может быть, мы как-нибудь ещё поговорим об истории развития ИИ, но пока что действительно прервёмся. И посмотрим на современные системы ИИ.
Винер, Тьюринг, Ньюэлл, Шеннон и другие великие люди разрабатывали свои идеи в пятидесятых годах двадцатого столетия. С тех пор немало воды утекло, немало произошло потрясений, даже Советский союз успел развалиться. Естественно, в мире, где нет ничего незыблемого, представления о реализации AI не могли оставаться неизменными столь долгое время. Современные системы ИИ разделяются, по большому счёту, на экспертные системы и нейронные сети. На самом деле эти вещи называются конвекционным и вычислительным подходами к ИИ, но мы же с вами не теоретики, поэтому будем пользоваться более привычными для уха и глаза терминами, пусть и не такими общими. Экспертные системы - это программы, основанные на статистике. Они анализируют большой объём сходных между собой данных, после чего по заложенным в них правилам выдают решение. Нейронные сети, в отличие от этих систем, сами выдумывают себе правила для принятия решений, но, опять-таки, на основе статистики и анализа больших объёмов данных. Недостаток таких систем - большой процент ошибочно принимаемых решений. Ну, а наилучшие результаты, конечно же, дают гибридные конвекционно-вычислительные системы.
Одной из самых интересных черт математической теории искусственного интеллекта является то, что критерии интеллектуальности реализованной на компьютере системы более чем расплывчаты. Пользуясь этим фактом, многие игры, не имеющие ни нейронных, ни экспертных систем в своих недрах, тем не менее, гордо заявляют о наличии искусственного интеллекта у своих юнитов. Давайте попробуем разобраться, насколько правдивы эти заявления.
В современной практике создания ИИ самым удачным из придуманных критериев интеллектуальности системы считается один из самых старых тестов, придуманный ещё Аланом Тьюрингом в 1950 году. Суть его состоит в сравнении компьютерного интеллекта с человеческим. Выбирается некоторый человек - судья, который должен переписываться на естественном языке с человеком и с компьютером. Если в течение достаточно длительного промежутка времени судья не может надёжно определить, кто из его собеседников человек, а кто - машина, то последнюю можно поздравить с успешным прохождением теста. При этом, естественно, скорость получения ответов от собеседников должна быть такой, чтобы по ней невозможно было идентифицировать принадлежность собеседника к людям или к компьютерам. Сам Тьюринг в качестве лимита времени выставил пять минут, а человек должен был притворяться человеком противоположного пола. Но сейчас эти правила не считаются необходимыми.
Сами понимаете, организовать такую переписку с компьютерными ботами в том же Quake несколько затруднительно. Поэтому можно попробовать модифицировать тест Тьюринга: вместо написания сообщений можно наблюдать за игрой живого игрока и за игрой компьютера. Конечно, кто-то скажет, что такое обращение с тестом Тьюринга - неоправданно вольное, и поэтому такой тест ничего хорошего не покажет. Что ж, любителям формализма советую почитать статью Джона Сёрля "Разум мозга - компьютерная программа?" (найти её в интернете можно по адресу az13.mail333.com/mat/in1.htm). Но тест и в самом деле получится не слишком показательным, потому что практически всегда можно подобрать пользователя с таким уровнем игры, что он сможет играть наравне с компьютером. Так что большая часть современных игр такой тест пройдут.
Что ж, вот уже пора заканчивать статью, а, собственно, о самих алгоритмах, на которых основана работа искусственного интеллекта, не сказано ни слова. Обещаю... Эх, что-то я стал стремительно обрастать долгами перед вами, уважаемые читатели. Но об этих алгоритмах я обязательно постараюсь рассказать, потому что на общей эрудиции в процессе создания собственной реализации ИИ для игры выехать сложно. А на сегодня пока всё.
Вадим СТАНКЕВИЧ
1 МТИ - Массачусетский технологический институт (по-английски эта аббревиатура пишется как MIT)
Горячие темы