вторник, 18 декабря 2007 г.

Что такое (интеллектуальные) агенты?

Осторожно!!! Документ в работе!!!

Попытаемся окончательно и бесповоротно разобраться в том, что такое интеллектуальные агенты с точки зрения инженера-разработчика программного обеспечения. В данной статье рассмотрим только самих агентов, а все вопросы взаимодействия между агентами освещены в статье «Что такое мультиагентные системы?».

Сначала я приведу основные идеологические положения из области агентов. Далее покажу агентов как результат эволюции существующего ПО. Затем мы посмотрим различия в конструкции и особенности разработки. А в самом конце выясним, что не является агентом и почему агенты – это круто.

Основы

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

Слово "интеллектуальные" часто стыдливо опускают, но Вас это не должно вводить в заблуждение относительно истинной природы агентов.


 


Могучий интеллект Симпсона видно даже невооруженным глазом.


Перво-наперво, немного теории (или точнее, ряд наиболее характерных слоганов из научного сообщества) о том, что такое агенты. Чтобы сразу же отпугнуть недостойных или неготовых неофитов.

1. Агент – система, находящаяся в среде, действующая в среде и воспринимающая среду.

2. Агенты способны к независимым действиям, представляя интересы пользователя или владельца.

3. Многоагентная система (МАС) – система, содержащая агентов, взаимодействующих между собою.

4. Для успешного взаимодействия агенты должны уметь сотрудничать, координировать действия и вести переговоры.

5. Рациональный агент действует таким образом, чтобы он мог достичь наилучшего ожидаемого результата.

6. И наконец, информация для практиков: агент может быть реализован только в виде программы (софтбот, бот) или иметь программно-аппаратную реализацию (робот).



Эти определения полностью самодостаточны. Если медитировать над ними длительное время, то можно вывести все современные достижения в области агентов, постичь Дао и даже впасть в Нирвану.





 

* * *


Несколькими днями ранее я на этом и закончил обсуждение особенностей агентов. Но... Сегодня Дао говорило со мной. И просило сжалиться над теми хронически занятыми беднягами, которые находятся в извечном круге производства-потребления, и разжевать им все по полной. Что ж, прислушаюсь к этому призыву и напишу подробнее об отличии агентных программных систем от обычного примитивного ПО.


Агенты как эволюция примитивного ПО

Сестра, скальпель! Сестра, зажимы! Кто-нибудь! Дайте же мне, наконец, этот чертов топор!!!

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




Различные способы взаимодействия пользователя и программы.


1. До Windows – были линейные программы: куча мелких утилит и консоль. Пользователь – программист, должен знать API (параметры командной строки) + скриптовый язык (шелл-скрипт). Это было царство обработки информации – подаем на вход данные и через часы/дни/месяцы получаем результат их обработки.

2. В эпоху Windows – появились интерактивные программы: куча мелких утилит (или обрабатывающих процедур в коде), увязанных меж собой единой моделью данных. Все это "богатство" привязано к красивому интерфейсу пользователя и реализует так называемые варианты использования – типичные сценарии взаимодействия пользователя с программой, или функциональные фичи. Например, открытие файла, отсылку электронной почты. Типичный пример таких программ – текстовый редактор. Или браузер. Или… практически все ПО, с которым Вы встречались до этого момента.
Пользователь подобных систем – не программист, но должен знать GUI (когда, куда и чем тыкать). Это есть царство Инструментов. Этап характеризуется огромными усилиями по повышению удобства использования и интеграции: кто из производителей сумеет в один продукт впихнуть больше функциональности, которой удобно пользоваться. Но эта гонка не бесконечна, так как существует естественный предел количества "фич" в программе, после которого ей уже становится просто неудобно пользоваться человеку.

3. После Windowsагенты и их интеллектуальные интерфейсы. Система через естественные интерфейсы (речь, видео) сама узнает или уточняет у пользователя, что ему, бедному, нужно и сама пытается выполнить задачу, используя при этом те самые огромные количества накопленных "фич" и взаимодействуя с другими агентами. Пользователь вообще ничего не должен знать: все что нужно – расскажут и покажут, сделают за него. Это будет Царство Помощников (синонимы: Золотой Век, Святой Грааль, Серебряная Пуля Программирования, Сингулярность, Апокалипсис, Судный День).

Если вы "ниасилили" ничего вплоть до этого места, "патамучта многабукаф" – ничего. Щаз расталкую на пальцах, что такое агенты. Представьте, что вы голосом диктуете Ворду реферат (надеюсь, кто-то их еще пишет, а не копипейздит). А Ворд в это время стебётся над вашей грамматикой и предлагает более удачные варианты предложений, попутно шарясь в Гугле, энциклопедиях, базах рефератов, в анекдотах и на bash.org. Просекли фишку??? Это же просто чума!!!


 

Выводы:

  • агенты отличаются самым главным – способом взаимодействия с пользователем;
  • агенты сами решают поставленные перед ними задачи.


 

Особенности разработки примитивного ПО
Когда вы создаете программу, вы на самом деле описываете в коде свои знания о предметной области приложения:

1. Модель данных – набор структур данных и связей между ними. Например, данные для хранения информации о страницах в текстовом редакторе MS Word. Или о таблицах в MS Excel, данные форматирования веб-страниц в браузере и т.п.

2. Алгоритм поиска решения. Обычно жестко заданный. Как по запросу пользователя вернуть результат обработки данных.

3. Визуальное представление модели данных. Как отображать на экране страницы MS Word или картинки Photoshop.

4. Элементы управления: рычажки, рукоятки и кнопочки, посредством которых пользователь передает свои запросы алгоритму поиска решения.



Разработчики примитивного ПО за работой.


 


 

Подобные системы – чисто реактивные. Нажал кнопку – получил ответ. Это значит, что они не осознают окружающей действительности и поэтому у них практически отсутствуют возможности приспосабливаемости.


 

Такой софт нужно постоянно вручную адаптировать к изменениям функциональных или нефункциональных требований. Например, Photoshop. Новое функциональное требование: пользователи хотят инструмент редактирования фотографий «магическая скрепка». Нефункциональное требование: из-за появления многоядерных процессоров необходимо добавить поддержку многопоточности в алгоритмы работы с изображениями.


 

Поэтому можно выделить две основные задачи проектирования примитивного ПО.


 

Декомпозиция – разделение будущей реализации системы на более-менее независимые части (классы, модуль, компоненты, сервисы) таким образом, чтобы в дальнейшем все изменения (запланированные или даже неожиданные) были локальными и не требовали перепроектирования всей системы.

Обеспечение корректной работы ПО, соответствующей требованиям. Это само по себе является проблемой, т.к. объем функционала в программах постоянно растет. Система уже не помещается в голове одного человека. Коллективная разработка вносит свои погрешности. Формально доказать, что программа делает то, что от нее ожидается на данный момент невозможно. Тестирование же позволяет проверить лишь те багги, которые мы ожидаем увидеть, а все сюрпризы обнаруживаются во время эксплуатации.



В агентах все совсем по другому

Не думай об объекте, думай о наблюдателе!

1. Агент по определению способен воспринимать свою окружающую среду. Если в среду агента входите Вы, значит он может воспринимать Вас. Это автоматически приводит к тому, что у агента есть модель внешнего мира. Чем сложнее и изощреннее эта модель, тем больше информации агент может использовать в своей деятельности.

2. У агента (или группы агентов) есть цели – ожидаемые результаты, которых нужно достичь, решив стоящие перед ними задачи. Система целей агента также может быть весьма сложной. Цели могут быть заданы извне агента или порождаются в результате некой "умственной деятельности" агента.

3. Для достижения целей агент может совершать в среде определенные действия. Агент, конечно, может пытаться совершать действия наобум, методом "научного тыка". Авось, повезет и цель будет достигнута. Но это полный перебор и потому очень неэффективно. Поэтому агент должен обладать знаниями о наборе своих возможных действий, необходимых условиях для их совершения и возможных последствиях.




Живой агент в среде своего обитания. На фото четко различимы сенсоры и эффекторы.


 


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

Спецы по ИИ – люди ленивые (ну... кроме того, что еще и умные), поэтому они еще в 50-х годов прошлого века отделяют описание задачи (которое меняется от задачи к задаче) от алгоритмов поиска решения (которых так немного и их можно применять в общем виде, не затачивая каждый раз под конкретную задачу).

Это нужно попробовать и почувствовать самому, слова тут не помогут! При таком подходе Вы даете агенту только знания о целях, об окружающем мире и его возможностях, конкретная уникальная последовательность действий, приводящая к цели, ищется агентом каждый раз с учетом текущих внутренних и внешних условий. Алгоритм даже может меняться и корректироваться по ходу выполнения!


 


 

При разработке агентов возникают уже совсем другие, более высокоуровневые вопросы:


 

1. Насколько сложной является окружающая среда? Есть ли неопределенность? Полностью ли она наблюдаема? Как быстро она может меняться?

2. Какие задачи требуется решать агенту? Насколько они сложны? Эти вопросы хорошо разобраны в (Рассел и Норвиг, 2007), глава 2.

3. Какой должна быть архитектура агента? В настоящее время распространены различные реактивные архитектуры. А из логических – BDI. Также весьма интересны архитектуры Emotion Machine (Marvin Minsky) и CogAff (Aaron Sloman).

4. Какими должны быть цели агента?

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

6. Каким должно быть поведение агента?

7. Что должен знать агент о себе и окружающей среде, т.е. какова будет его модель среды и себя самого? Какими символами и понятиями он сможет оперировать? Насколько полными и детальными должны быть его знания? Будут ли знания задаваться разработчиком, или они будут приобретаться в процессе (само)обучения?

8. Каким способом представить знания агента? Насколько выразительным должен быть язык описания знаний? Как обеспечить требуемую производительность алгоритмов обработки знаний?

9. Каковы должны быть границы адаптации агента к изменениям окружающей среды? Как агент будет менять свое поведение? Как агент может (само)обучаться?


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


А теперь вопрос на засыпку для самых внимательных: "И где же тут объекты???"
Можно сказать, что они одновременно везде и нигде. Объекты объектно-ориентированного подхода соотносятся с агентами точно также, как машинные коды ассемблера соотносятся с самими объектами.

На просторах нашей необъятной Родины встречаются порой люди, которые пытаются рассматривать передовую область агентов только с позиций морально устаревшего объектно-ориентированного подхода. Не попадайся на этот обман, дорогой читатель, ибо тот, кто зациклен на кирпичах, не сможет понять прелесть небоскреба! И хотя существуют теории, утверждающие, что корни интеллекта и свободы воли находятся внутри атома (не будем показывать пальцем), я бы не советовал тратить на них свое время и деньги.


 

Более того, существуют специальные агентные языки программирования (например, AgentSpeak), которые позволяют лепить агентов, вообще прибегая к объектно-ориентированному программированию!!!




Анонимный Небоскреб.


 

Выводы:

  • До сих пор при разработке примитивного ПО существуют большие проблемы.
  • Разработка агентных систем сама по себе сложнее, но получившийся результат будет более гибким и позволит автоматизировать те виды деятельности человека, которые требуют большего интеллекта, чем расстановка переносов в тексте, заливка контура текстурой в графическом редакторе, рендеринг веб-страницы в браузере.



Решаемые задачи

Любая программа нужна для того, чтобы решать определенную задачу. Управление атомными реакторами и электрическими зубными щетками. Стимуляция работы сердца и системы электронного шпионажа. Денежные переводы и спекуляции на финансовых рынках. Трехмерное моделирование будущих реальных товаров и порождения больной фантазии дизайнеров компьютерных игр. Даже ПО сейчас создается с помощью ПО!

И все же, с прискорбием должен констатировать, что примитивное ПО может решать только примитивные задачи.

Выводы:

  • Агенты могут использовать существующее примитивное ПО как инструмент для достижения своих целей. Прямо как люди.


 

Что НЕ является агентами?

Ну, с этим-то у Вас теперь не должно быть проблем.

1. Все то, что не удовлетворяет определениям из начала статьи. Почти весь современный COTS софт на прилавках вашего любимого магазина p2p-сервера. Правда, БД тихой сапой становятся Self* системами (т.е. сами себя администрируют без участия человека: само-мониторинг, автоконфигурирование и оптимизация производительности), поэтому в них несколько лет назад начали применять агентов.

2. Отдельные механизмы, из которых состоит агент, или отдельные методы ИИ. Вроде экспертных систем, планировщиков, машин вывода, систем анализа данных, объектов, компонентов и т.д.

3. Отдельные теории, которые, однако, могут применяться для описания агентных систем. Вроде теории игр, теории приятия решений и т.д.

4. Ну и из того, что осталось, можно смело вычеркнуть все то, что просто бессмысленно описывать в виде агентов. Это значит, описать можно, но такое описание ничего не даст: ни денег, ни славы. Тут все сильно зависит от конкретной области и уровня здравого смысла у конкретного практикующего. Например, атомы (но не всегда), неживую природу (но не всегда), объекты (будь они неладны) и т.д.


Почему агенты – это круто?

Для тех, кто этого еще не понял и не бросился делать агентные системы...

1. Потому, что это передовая область исследований даже на Западе, а не только в отдаленных селениях нашей необъятной Родины.

2. Потому, что они находятся на стыке нескольких направлений, таких как:

  • искусственный интеллект;
  • разработка ПО;
  • распределенные системы;
  • робототехника и наномеханизмы (да-да, вы не ослышались :) );
  • экономика;
  • психология и прочие соц науки.

3. Чтобы утереть нос ихним и показать, на что способны наши.

4. Потому, что агенты без сомнения принесут огромные кучи денег. Правда, когда технология будет принята в промышленности ;) И скорее всего, принесут акулам бизнеса, после того, как разорятся все early adopters.

5. Ну и потом, кто не хочет стать Главным Архитектором Матрицы???

<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/8TDSLaDZHLo&hl=ru&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/8TDSLaDZHLo&hl=ru&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>

Архитектор Матрицы о жизни и о себе.


 


 

В общем и целом, на уровне одного-единственного агента все обстоит именно так. Обо всех тех любопытных подробностях, когда агенты собираются толпой и начинают давить Вас интеллектом, можно узнать в статье «Что такое мультиагентные системы?».

Литература

Рассел, С., Норвиг, П. Искусственный интеллект. Современный подход. : Вильямс, 2007. – 1408 с.

15 комментариев:

  1. Очень популярное объяснение, особенно интересны высказывания про магию и архитектора матрицы :)

    ОтветитьУдалить
  2. Переработал в еще более популярное объяснение ;)

    ОтветитьУдалить
  3. благодарю=) статьи заинтересовали и было приятнее втягиваться в работу=)уже к слову выполненную=)

    ОтветитьУдалить
  4. Анонимный23.12.2009, 16:11

    У вас тут видюшка слетела, если была когда-то...

    ОтветитьУдалить
  5. Анонимный26.04.2013, 14:06

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

    ОтветитьУдалить
  6. Статья все еще висит в инете оказывается.
    А уже сколько лет прошло. Я когда первый раз прокомментировал запись эту был еще маленьким наемным быдло-кодером в фирмочке небольшой. Интересовался искусственным интеллектом.
    И вот сейчас я владелец своей фирмы (http://www.sitebill.ru) и мой продукт это CMS, но в основу я заложил принцип агентной системы, что позволяет системе быть очень гибкой, но при этом каждый сайт на CMS позволяет обновляться с центрального сервера.

    ОтветитьУдалить
  7. Привет из 2к17, господа

    ОтветитьУдалить
  8. Привет из 2к18, ребятишки

    ОтветитьУдалить
  9. Прошло еще 8 лет с моего предыдущего поста.
    Землю охватила невиданная пандемия.
    Криптовалюты сжирают невероятное количество энергии.
    Беспилотники начинают отбирать работу у водителей.
    Илон Маск почти отправил первых исследователей на Марс.
    Я так много работал, что стал писателем, теперь работаю еще больше.
    До встречи в будущем...

    ОтветитьУдалить