Популярно об ИИ
Думается, что после прочтения предыдущих материалов серии облик искусственного интеллекта как чего-то сверхразумного, мощного и не совершающего ошибок несколько поблек и стал терять розовую краску, навеянную фантастикой. Все рукотворно. Даже более того, не так совершенно, как может показаться на первый взгляд. Например, недавно по National Geographic показывали программу из серии "есть ли жизнь на Марсе" или чего-то подобного. Несмотря на предсказуемость всего повествуемого, как бы невзначай прозвучала одна интереснейшая фраза. Допустим, робот высадился на Марсе, но как он может определить, есть ли там жизнь? И действительно: а вообще придуманы ли хоть какие-нибудь датчики для проведения такого анализа, нахождения объектов, наделенных метаболизмом (т.е. обменом веществ)? "Я найду, только вы скажите, что именно искать, и как это делать".
Даже более того, с современными подходами к формированию ИИ реализовать подобную систему нереально, потому как он не может самостоятельно группировать из множества неизвестных ранее составляющих объекты или, говоря другими словами, образы, что ближе к нашей природе восприятия. Впрочем, варианты есть, что мы и обсудим в следующих материалах серии, а сегодня продолжим начатые темы.
Неожиданные затраты
Конечно, аппаратные мощности современных компьютеров уже достаточно велики — по крайней мере, очень многие программисты, работающие над созданием стандартных приложений на высокоуровневых языках, уже редко задумываются о так называемом "вылизывании" кода. Да и зачем, если все работает? Но когда мы говорим о программировании ИИ, вопрос оптимизации до сих пор стоит достаточно остро. Например, в позапрошлом материале мы обсуждали алгоритм А* — поиска пути по сетке, который достаточно часто применяется в играх, особенно старого поколения. Причем показали его самый примитивный вариант, и давайте подумаем: а что же такого сложного в нем может появиться? Почему же так необходима оптимизация? На самом деле в практических условиях за нее часто упрекают, потому как тратится драгоценное дорогостоящее время.
Во-первых…
При внедрении того же А*-поиска огромное значение имеет расстояние, которое нужно преодолеть искусственному персонажу для достижения цели. Чем оно больше, тем более трудоемкими становятся расчеты. И это только то, что очевидно и лежит на поверхности. Кроме А*-поиска, существует еще множество различных алгоритмов, которые гораздо сложнее по структуре, но их требует современность. То же огибание препятствий, навигация может происходить по-разному, особенно если эти препятствия имеют различную форму, и т.п. Данные алгоритмы мы подробно рассмотрим в следующих материалах серии. Стоит учитывать тот факт, что, кроме поиска пути, параллельно идет множество других расчетов.
Во-вторых…
Имеется ряд непредвиденных ситуаций, которые могут возникать динамически. Например, путь следования выбран, но в рамках виртуальной среды перемещается не один персонаж, а несколько, соответственно, возможны столкновения между ними. Как поступать в данном случае? По старой методике при появлении такой ситуации расчеты пути проводятся заново с учетом того, что занятая другим виртуальным субъектом клетка воспринимается как препятствие. То есть, помимо статической информации о состоянии виртуального мира, нужно иметь динамическую, анализировать изменения, которые там происходят. Необходимо некое подобие сенсорной системы. Игры мы берем в качестве примера потому, что там решается множество практических проблем, которые применимы и в других сферах — например, в тех же автономных роботах, системах управления и т.п. Хотя обычно многие считают ИИ в тех же играх "попсовым" вариантом для такой серьезной науки, на самом деле, если проанализировать все движки и алгоритмы, которые изобретены и изобретаются в варианте этого приложения, то иногда можно встретить серьезнейшие модели. Но, в принципе, разговоры о "попсовости" имеют под собой разумную почву. Например, в играх есть одно существенное и весомое упрощение: поиск пути всегда является информированным. То есть данные среды несобственным персонажам известны изначально, мало того, проектировщики ИИ могут составить то же специальное описание самой среды в виде модели площадки с расстановкой точек перемены маршрута для каждой карты, что делает дальнейшее решение задачи тривиальным. Но есть и более сложные алгоритмические схемы, в рамках которых поведение полностью моделируется независимо от конкретной карты. То есть искусственный персонаж оказывается в таком же положении, как и игрок. Это уже высший пилотаж.
Как вы понимаете, алгоритмы по вычислению оптимальных перемещений весьма затратны, и среди множества задач проектировщика ИИ есть и адекватное ограничение количества обрабатываемой информации так, чтобы поставленная задача выполнялась, но лишние вычисления не производились. Это достаточно трудно соблюсти в некоторых случаях, потому как в рамках динамически изменяемого окружающего пространства нужно следить за множеством дополнительных параметров, которые предвосхищают появление некоторых ситуаций. Конечно, можно ввести ограничения в рамках создания "поля видимости", то есть следить не за всем миром, а за небольшой областью вокруг… В общем, все зависит от поставленной задачи.
В-третьих…
Рост вычислительных мощностей современных ПК значительно расширил и усложнил спектр решаемых задач. Например, в тех же играх виртуальные миры стали больше и разнообразнее. По существу, тот A*-поиск, пример которого мы приводили в позапрошлом материале, работает для 2D, хотя современные игровые пространства уже трехмерны. Причем сейчас есть целое направление по изучению именно 2D-алгоритмов, которые рассматриваются как упрощенный вариант 3D. Казалось бы, что может быть тривиальнее, ведь добавлена еще одна ось, и все. Но это не совсем верно. На самом деле очень часто для полноценной реализации трехмерности нужно искать новые решения, подразумевающие другой уровень сложности. 2D-решения нередко "нанизываются" на 3D, и тут, кстати, в свое время была очень верно исправлена терминология с введением понятия 2,5D как раз для таких случаев. Хорошо это или плохо — ответ вырабатывается, и в основном он зависит от появления конкретных полноценно действующих решений. Например, 2,5D можно оправдать тем, что виртуальные миры обладают гравитацией, а это подразумевает тяготение 3D к 2D.
Идем далее…
В-четвертых…
Когда говорят о системах навигации для искусственных несобственных персонажей в рамках тех же виртуальных миров, часто подразумевают некий образчик — например, поведение человека. И очень часто такие описания стоят в рамках первоначального этапа формулировки требований к ИИ наряду с учетом системного анализа, то есть анализа платформы, на которой все производится. Но когда мы рассматривали варианты поиска в позапрошлом материале данной серии, было очевидно, что "машине" все нужно объяснять на самом примитивном уровне — по существу, начать думать как она, чтобы создать необходимую нам эмуляцию поведения.
Но сама разница между нашим и "машинным" мышлением принципиальна. Она выражается хотя бы в различиях непрерывности восприятия и его дискретности. Есть и другие отличия. Если кратко, то основная проблема состоит в том, что как бы красиво ни описывался ИИ для игр, большинство искусственных персонажей в них с человеческой точки зрения ведут себя неестественно, и даже более того — нерационально. Я уже не говорю о критических ошибках прохождений через стены и т.п. В военных стратегиях компьютерное управление армиями предсказуемо, а это будущее развития военных же технологий. Ведь неспроста американцами вводится общая командная архитектура управления беспилотной робототехникой JAUS, а европейцами — ее аналог CIP. И если вы думаете, что разработчики ИИ в играх занимаются чем-то принципиально иным, чем разработчики ИИ для военной промышленности, то ошибаетесь. В данном случае существуют пробелы, которые еще предстоит восполнять, а сами современные алгоритмы не являются идеальными.
В-пятых…
Думаю, что на "в-пятых" уже нужно завершать перечисления, а то вам станет скучно читать:). Есть два типа алгоритмизации поведения: полностью запрограммированное с практическим отсутствием ИИ и интеллектуальное. Раньше в играх, роботах и т.п. склонялись к первому варианту за исключением использования примитивных агентов, основанных на реакциях, и при необходимости random-режимов. Наш А*-поиск больше приближен к нему. Но потом стали приходить к более полноценным реализациям ИИ. И самым главным камнем преткновения стал параметр НАДЕЖНОСТИ алгоритмов (также ранее мы применяли выражение "качество алгоритма", что подразумевает схожий критерий). То есть алгоритм должен работать в любых ситуациях независимо от того, где он изначально проектировался. Например, в тех же студенческих гонках IGVC, в которых автономные роботы должны были проехать по трассе, ограниченной белыми линиями с определенным количеством препятствий, первоначально до финиша добирались только единицы. Таким образом, скорость выполнения задачи отходила на второй план. В современных играх вы можете найти множество глюков, связанных с неадекватным ситуации поведением несобственных персонажей, ИИ компьютерного соперника и т.п. И, кстати, это хорошо, потому как за примерами не нужно далеко ходить, они очевидны, вы их можете увидеть. Надежность алгоритма достигается достаточно большими усилиями как на стадиях его планирования и проектирования, так при реализации и тестировании. То есть при той же разработке игр "откатывать" ИИ нужно на всех уровнях, которые доступны. Впрочем, разнообразные опытные испытания — это неотъемлемая часть любой сложной технической разработки.
Промежуточное завершение
Эйфория вокруг ИИ в основном витает вокруг его фундаментального, а не прикладного, осмысления. Соответственно, специалисты в этом вопросе постоянно лавируют между максимумом и минимумом абстрактности представления задач, основная цель — эмуляция рационального поведения с высокой степенью надежности, реализованная математическими методами. Нужно отметить, что большие аппаратные мощности современных ПК немного расхолаживают разработчиков, и это есть. Но…
Данный цикл материалов хоть и имеет достаточно легкое название "Популярно об ИИ", обладает одним существенным недостатком. А именно: он не может уподобиться той же серии книг по программированию "для чайников", где не учат ключевому понятию expression-oriented (ориентированный на выразительность) относительно не только написания кода, но и алгоритмической реализации. В ИИ именно этот момент очень важен. В качестве примера можно сказать, что в тех же книгах по данной тематике (ИИ) гораздо большее внимание уделяется методам оценки алгоритмов, рекурсивным функциям и так далее, что достаточно редко развернуто описано в литературе для программистов. И все это на фоне достаточно различной терминологии.
Продолжение следует.
Кристофер, christopher@tut.by
Даже более того, с современными подходами к формированию ИИ реализовать подобную систему нереально, потому как он не может самостоятельно группировать из множества неизвестных ранее составляющих объекты или, говоря другими словами, образы, что ближе к нашей природе восприятия. Впрочем, варианты есть, что мы и обсудим в следующих материалах серии, а сегодня продолжим начатые темы.
Неожиданные затраты
Конечно, аппаратные мощности современных компьютеров уже достаточно велики — по крайней мере, очень многие программисты, работающие над созданием стандартных приложений на высокоуровневых языках, уже редко задумываются о так называемом "вылизывании" кода. Да и зачем, если все работает? Но когда мы говорим о программировании ИИ, вопрос оптимизации до сих пор стоит достаточно остро. Например, в позапрошлом материале мы обсуждали алгоритм А* — поиска пути по сетке, который достаточно часто применяется в играх, особенно старого поколения. Причем показали его самый примитивный вариант, и давайте подумаем: а что же такого сложного в нем может появиться? Почему же так необходима оптимизация? На самом деле в практических условиях за нее часто упрекают, потому как тратится драгоценное дорогостоящее время.
Во-первых…
При внедрении того же А*-поиска огромное значение имеет расстояние, которое нужно преодолеть искусственному персонажу для достижения цели. Чем оно больше, тем более трудоемкими становятся расчеты. И это только то, что очевидно и лежит на поверхности. Кроме А*-поиска, существует еще множество различных алгоритмов, которые гораздо сложнее по структуре, но их требует современность. То же огибание препятствий, навигация может происходить по-разному, особенно если эти препятствия имеют различную форму, и т.п. Данные алгоритмы мы подробно рассмотрим в следующих материалах серии. Стоит учитывать тот факт, что, кроме поиска пути, параллельно идет множество других расчетов.
Во-вторых…
Имеется ряд непредвиденных ситуаций, которые могут возникать динамически. Например, путь следования выбран, но в рамках виртуальной среды перемещается не один персонаж, а несколько, соответственно, возможны столкновения между ними. Как поступать в данном случае? По старой методике при появлении такой ситуации расчеты пути проводятся заново с учетом того, что занятая другим виртуальным субъектом клетка воспринимается как препятствие. То есть, помимо статической информации о состоянии виртуального мира, нужно иметь динамическую, анализировать изменения, которые там происходят. Необходимо некое подобие сенсорной системы. Игры мы берем в качестве примера потому, что там решается множество практических проблем, которые применимы и в других сферах — например, в тех же автономных роботах, системах управления и т.п. Хотя обычно многие считают ИИ в тех же играх "попсовым" вариантом для такой серьезной науки, на самом деле, если проанализировать все движки и алгоритмы, которые изобретены и изобретаются в варианте этого приложения, то иногда можно встретить серьезнейшие модели. Но, в принципе, разговоры о "попсовости" имеют под собой разумную почву. Например, в играх есть одно существенное и весомое упрощение: поиск пути всегда является информированным. То есть данные среды несобственным персонажам известны изначально, мало того, проектировщики ИИ могут составить то же специальное описание самой среды в виде модели площадки с расстановкой точек перемены маршрута для каждой карты, что делает дальнейшее решение задачи тривиальным. Но есть и более сложные алгоритмические схемы, в рамках которых поведение полностью моделируется независимо от конкретной карты. То есть искусственный персонаж оказывается в таком же положении, как и игрок. Это уже высший пилотаж.
Как вы понимаете, алгоритмы по вычислению оптимальных перемещений весьма затратны, и среди множества задач проектировщика ИИ есть и адекватное ограничение количества обрабатываемой информации так, чтобы поставленная задача выполнялась, но лишние вычисления не производились. Это достаточно трудно соблюсти в некоторых случаях, потому как в рамках динамически изменяемого окружающего пространства нужно следить за множеством дополнительных параметров, которые предвосхищают появление некоторых ситуаций. Конечно, можно ввести ограничения в рамках создания "поля видимости", то есть следить не за всем миром, а за небольшой областью вокруг… В общем, все зависит от поставленной задачи.
В-третьих…
Рост вычислительных мощностей современных ПК значительно расширил и усложнил спектр решаемых задач. Например, в тех же играх виртуальные миры стали больше и разнообразнее. По существу, тот A*-поиск, пример которого мы приводили в позапрошлом материале, работает для 2D, хотя современные игровые пространства уже трехмерны. Причем сейчас есть целое направление по изучению именно 2D-алгоритмов, которые рассматриваются как упрощенный вариант 3D. Казалось бы, что может быть тривиальнее, ведь добавлена еще одна ось, и все. Но это не совсем верно. На самом деле очень часто для полноценной реализации трехмерности нужно искать новые решения, подразумевающие другой уровень сложности. 2D-решения нередко "нанизываются" на 3D, и тут, кстати, в свое время была очень верно исправлена терминология с введением понятия 2,5D как раз для таких случаев. Хорошо это или плохо — ответ вырабатывается, и в основном он зависит от появления конкретных полноценно действующих решений. Например, 2,5D можно оправдать тем, что виртуальные миры обладают гравитацией, а это подразумевает тяготение 3D к 2D.
Идем далее…
В-четвертых…
Когда говорят о системах навигации для искусственных несобственных персонажей в рамках тех же виртуальных миров, часто подразумевают некий образчик — например, поведение человека. И очень часто такие описания стоят в рамках первоначального этапа формулировки требований к ИИ наряду с учетом системного анализа, то есть анализа платформы, на которой все производится. Но когда мы рассматривали варианты поиска в позапрошлом материале данной серии, было очевидно, что "машине" все нужно объяснять на самом примитивном уровне — по существу, начать думать как она, чтобы создать необходимую нам эмуляцию поведения.
Но сама разница между нашим и "машинным" мышлением принципиальна. Она выражается хотя бы в различиях непрерывности восприятия и его дискретности. Есть и другие отличия. Если кратко, то основная проблема состоит в том, что как бы красиво ни описывался ИИ для игр, большинство искусственных персонажей в них с человеческой точки зрения ведут себя неестественно, и даже более того — нерационально. Я уже не говорю о критических ошибках прохождений через стены и т.п. В военных стратегиях компьютерное управление армиями предсказуемо, а это будущее развития военных же технологий. Ведь неспроста американцами вводится общая командная архитектура управления беспилотной робототехникой JAUS, а европейцами — ее аналог CIP. И если вы думаете, что разработчики ИИ в играх занимаются чем-то принципиально иным, чем разработчики ИИ для военной промышленности, то ошибаетесь. В данном случае существуют пробелы, которые еще предстоит восполнять, а сами современные алгоритмы не являются идеальными.
В-пятых…
Думаю, что на "в-пятых" уже нужно завершать перечисления, а то вам станет скучно читать:). Есть два типа алгоритмизации поведения: полностью запрограммированное с практическим отсутствием ИИ и интеллектуальное. Раньше в играх, роботах и т.п. склонялись к первому варианту за исключением использования примитивных агентов, основанных на реакциях, и при необходимости random-режимов. Наш А*-поиск больше приближен к нему. Но потом стали приходить к более полноценным реализациям ИИ. И самым главным камнем преткновения стал параметр НАДЕЖНОСТИ алгоритмов (также ранее мы применяли выражение "качество алгоритма", что подразумевает схожий критерий). То есть алгоритм должен работать в любых ситуациях независимо от того, где он изначально проектировался. Например, в тех же студенческих гонках IGVC, в которых автономные роботы должны были проехать по трассе, ограниченной белыми линиями с определенным количеством препятствий, первоначально до финиша добирались только единицы. Таким образом, скорость выполнения задачи отходила на второй план. В современных играх вы можете найти множество глюков, связанных с неадекватным ситуации поведением несобственных персонажей, ИИ компьютерного соперника и т.п. И, кстати, это хорошо, потому как за примерами не нужно далеко ходить, они очевидны, вы их можете увидеть. Надежность алгоритма достигается достаточно большими усилиями как на стадиях его планирования и проектирования, так при реализации и тестировании. То есть при той же разработке игр "откатывать" ИИ нужно на всех уровнях, которые доступны. Впрочем, разнообразные опытные испытания — это неотъемлемая часть любой сложной технической разработки.
Промежуточное завершение
Эйфория вокруг ИИ в основном витает вокруг его фундаментального, а не прикладного, осмысления. Соответственно, специалисты в этом вопросе постоянно лавируют между максимумом и минимумом абстрактности представления задач, основная цель — эмуляция рационального поведения с высокой степенью надежности, реализованная математическими методами. Нужно отметить, что большие аппаратные мощности современных ПК немного расхолаживают разработчиков, и это есть. Но…
Данный цикл материалов хоть и имеет достаточно легкое название "Популярно об ИИ", обладает одним существенным недостатком. А именно: он не может уподобиться той же серии книг по программированию "для чайников", где не учат ключевому понятию expression-oriented (ориентированный на выразительность) относительно не только написания кода, но и алгоритмической реализации. В ИИ именно этот момент очень важен. В качестве примера можно сказать, что в тех же книгах по данной тематике (ИИ) гораздо большее внимание уделяется методам оценки алгоритмов, рекурсивным функциям и так далее, что достаточно редко развернуто описано в литературе для программистов. И все это на фоне достаточно различной терминологии.
Продолжение следует.
Кристофер, christopher@tut.by
Компьютерная газета. Статья была опубликована в номере 27 за 2008 год в рубрике технологии