Требования к языкам программирования агентов

 

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

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

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

3. Поддержка сетевого взаимодействия. Свойство агентов участвовать в переговорах и многие другие особенности агентов нуждаются в доступе к удаленным ресурсам. Поддержка сетевых услуг может включать семейства соответствующих программных интерфейсов (APIs) таких как: sockets, интерфейсы к базам данных, интерфейсы взаимодействия объектов (CORBA, OLE, ActiveX и т.д.), специальные механизмы, встроенные в язык (типа Remote Method Invocation в языке Java), специальные примитивы языка для осуществления переговоров агента и т.д.

4. Многопоточная обработка (“Multithreading”). Агент может выполнять некоторые действия одновременно. Тем самым, язык программирования агентов должен включать поддержку параллельного выполнения различных функций агента (типа “threads”) и различных примитивов синхронизации (семафоры, мониторы, критические секции, и т. д.). Кроме того, процесс который выполняет всех агентов (и может, фактически, рассматриваться как мета-агент) должен поддерживать параллельное выполнение агентов. Последнего можно добиться с помощью отдельной виртуальной машины с реализованным режимом вытесняющей многозадачности и собственной стратегией разделения времени.

5. Поддержка символьных вычислений. Так как в рамках современных взглядов агент должен активно использовать достижения и методы искусственного интеллекта, было бы полезно иметь поддержку символьных вычислений и, возможно, логического программирования, встроенную в язык (подобно PROLOG и LISP), а также иметь встроенный механизм выводов, включающий различные стратегии поиска решения. Автоматическое управление памятью и сборка мусора - стандартные средства для таких языков.

6. Безопасность, в частности, наличие системы защиты от несанкционированного доступа и “плохих кодов”. Это важно по многим причинам. Мобильные агенты, которые приходят из сети, могут таить в себе множество опасностей для принимающей машины, так как они выполняются в ее адресном пространстве. Для обеспечения безопасности перед передачей управления каждому агенту необходимо выполнить процесс авторизации агента, т. е. проверить, зарегистрирован ли он и имеет ли соответствующие полномочия (привилегии), чтобы выполнить то или иное действие или обратиться к некоторым ресурсам. Система безопасности должна предотвращать любые несанкционированные действия агента.

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

8. Языковая поддержка свойств агента. Было бы, вероятно, удобно иметь поддержку специфических для агента свойств, встроенную в язык на уровне синтаксических конструкций, так, чтобы, например, свойства типа “beliefs-desires-intentions” (BDI), инструкции для переговоров и обеспечения мобильности, места встречи, и т.д. могли бы быть выражены с помощью соответствующих примитивов языка.

9. Эффективность, достаточная для потребностей прикладных программ.