Книги, научные публикации

ИНФОРМАЦИОННЫЕ СИСТЕМЫ И ТЕХНОЛОГИИ В БИЗНЕСЕ АРХИТЕКТУРА ВЫСОКОПРОИЗВОДИТЕЛЬНОЙ СИСТЕМЫ МНОГОАГЕНТНОГО МОДЕЛИРОВАНИЯ О.Р. Набиуллин, аспирант Нижегородского филиала Государственного университетаЦВысшей

школы экономики, nabiulin В.М. Норкин, ассистент Нижегородского Государственного технического университета, mnmvik В первом разделе данной работы описывается область применения, современные тен денции и проблемы в области многоагентного моделирования. Акцент делается на про изводительность и распределение вычислительной нагрузки. Во втором разделе описыва ется подход к агентному моделированию и определяются базовые термины, которые будут использованы в дальнейшем. В третьем разделе предлагается архитектура фреймворка и среды для распределённого многоагентного моделирования. Прототип, со зданный на основе предложенной архитектуры, рассматривается в четвёртом разделе.

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

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

тические модели. В качестве примера таких облас тей можно назвать некоторые виды экономических Проблемы производительности фреймворков взаимоотношений, социальные процессы или зада для агентного моделирования чи с экспоненциальной сложностью. Невозмож Многие фреймворки для агентного моделирова ность использования строгих моделей не означает ния используют языки, близкие к скриптовым: Java их отсутствие. Препятствием может стать вычисли (Swarm, RePast J, Quicksilver, VSEdit, MASON, тельная сложность модели, отсутствие модели как JADE), Python (RePast Py), Lisp и его варианты таковой, или сложность подбора параметров. Для (HLSIM, SimAgent) [2]. Скриптовые языки обеспе некоторого класса таких областей деятельности чивают б ольшую абстрагированность и простоту, за в качестве альтернативы выступает имитационное счёт производительности. Разработчики таких моделирование [1], позволяющее использовать си фреймворков пытаются максимально снизить нергетический эффект взаимодействия большого планку вхождения и позиционируют свои про количества относительно простых систем для изуче дукты как инструмент для непрофессиональных ния систем более высоких порядков. Использова программистов. При этом проблемы производи ние фреймворков для агентного моделирования тельности рассматриваются как второстепенные [3].

48 БИЗНЕС ИНФОРМАТИКА №2(04)Ц2008 г.

ИНФОРМАЦИОННЫЕ СИСТЕМЫ И ТЕХНОЛОГИИ В БИЗНЕСЕ Тем не менее, рассмотрим возможность увеличения (которые могли бы работать в рамках одной производительности путём распределения вычис машины) лительной нагрузки.

При построении распределённой агентной сис Распределённые вычисления темы встаёт несколько проблем. Для примера рас Распределение вычислительной нагрузки между смотрим стандартную модель heat bugs (описание несколькими копьютерами не обязательно должно модели приведено в четвёртом разделе). Требуется, быть лэквивалентным. Разделение может осущест чтобы все агенты жуки обрабатывались последова вляться по принципу: исходные данные - вычисле тельно. Этот пример - частный случай более общей ния - представление результатов (визуализация).

проблемы: наличие во многих агентных моделях глобальных разделяемых ресурсов (поле), доступ Создание виртуальной распределённой к которым должен быть синхронизированным. среды взаимодействия Исследование [4] показало: визуализация резуль Для прозрачного взаимодействия агентов в рам татов моделирования в системах Swarm и RePast за ках распределённой системы надо создать вирту медляет работу в несколько раз, поскольку работа по альную распределённую среду взаимодействия.

просчёту (рендерингу) графики осуществляется на Аналогом такой среды в Java можно считать JMS каждом шаге моделирования. Решение этой пробле (Java Messaging Service);

в случае Windows окруже мы - разделение моделирования и представления, ния похожую функциональность представляет например, переход от прямой реализации к реализа MSMQ - Microsoft Message Queuing. В табл. 1 пред ции основанной на событиях [5]. ставлено сравнение основных характеристик этих Предположим, что влияние разделяемых ресур подходов.

сов минимально (т.е. к ним обращаются редко).

В этом случае ограничивающим фактором является Таблица факт, что агенты, составляющие систему, должны Сравнение распределённых сред обмена сообщениями обмениваться сообщениями. Стоимость такого вза Параметр ASF (SOP) JMS MSMQ имодействия сильно варьируется в зависимости от того, находятся ли агенты физически на одной ма Любой Язык С++ Java (CAPI, COM API) шине или на разных. Временная стоимость посыл ки сообщения через Ethernet на 3Ц4 порядка выше, Работа в гетерогенной Да Да Да чем стоимость посылки локального сообщения.

среде Многие стандартные модели используют кон цепцию дискретного времени. Это означает, что Работа в offline Нет Нет Да эволюция системы осуществляется итерациями Платформа Любая Любая Windows (шагами). Если мы попытаемся равномерно рас пределить агентов по некоторому количеству ком Коммерчес Коммерческая Лицензия Свободная кая (компонент пьютеров, это приведёт к тому, что более быстрые (часть J2EE) Windows) машины будут простаивать.

Поддержка Вышеперечисленные причины приводят к сле транзакционно Нет Есть Есть дующим выводам:

сти если задаться целью максимизировать произ Защита Encryption + SSL SSL водительность, то это нужно делать средства от взлома Windows ACL ми модели;

Распреде использование C++ в качестве языка описа Производи лённость Гарантированная Акцент ния модели позволит увеличить производи тельность и транзак доставка ционность тельность системы, не теряя в гибкости;

распределение агентной системы имеет смысл если выполнены следующие условия:

отдельный шаг работы системы достаточ 2. Подход но ресурсоёмок с вычислительной точки зрения;

Реализация агентного подхода взята из объём передаваемых данных не велик;

SObjectizer [2], поэтому периодически в тексте бу модель предусматривает некоторое количес дет фигурировать именно SObjectizer, а не ASF.

тво почти изолированных кластеров агентов БИЗНЕС ИНФОРМАТИКА №2(04)Ц2008 г. ИНФОРМАЦИОННЫЕ СИСТЕМЫ И ТЕХНОЛОГИИ В БИЗНЕСЕ Агенты и широковещательно (без указания имени получа В строгом смысле слова агенты в ASF (и в теля). В случае широковещательной рассылки со SObjectizer), не являются агентами, по определе общение получают все подписавшиеся на него нию из ИИ. агенты. Сообщения могут доставляться получате SObjectizer определяет агентно ориентирован лям сразу, в момент отсылки сообщения (обычные ную модель, в рамках которой осуществляется про сообщения), могут быть отложенными (т.е. их до ектирование реализации конкретных задач. В рам ставка будет производится после истечения некото ках этой модели любое приложение рассматривается рого тайм аута) и/или периодическими (т.е. их до как совокупность именованных объектов - агентов. ставка будет осуществляться в цикле с некоторой Каждый агент имеет заранее определённые состоя паузой между циклами).

ния. Взаимодействие между агентами осуществляет ся посредством обмена сообщениями. Агент выби События рает сообщения, которые он желает обрабатывать - Событие - это реакция агента на сообщение.

подписывается на сообщения. Возникновение и по Каждое событие должно иметь уникальное в рам следующая обработка сообщения называется событи ках агента имя. На C++ событие реализуется неста ем. Сообщение может породить несколько событий. тическим методом C++ класса агента.

Они будут обрабатываться в соответствии с назначен Во время подписки на сообщение агент сообща ными им приоритетами т.н. приоритетная диспетче ет SObjectizer, что появление некоторого сообщения ризация событий. Агенты, имеющие одинаковое (далее - инцидент) приводит к генерации такого то множество состояний, событий и сообщений, образу события. Событие может быть подписано на ноль ют класс агентов. или более сообщений. Если событие подписано на несколько сообщений, то событие генерируется при Сообщения возникновении любого из инцидентов. Обработка Сообщение - единственный механизм взаимо события заключается в том, что SObjectizer автома действия между агентами в SObjectizer. Имя сооб тически вызывает метод обработчик события при щения должно быть уникальным в рамках агента. возникновении сообщения.

На C++ сообщение должно быть представлено События имеют приоритет, устанавливаемый структурой или классом. Для отсылки сообщения в момент подписки. Сообщение может быть инци SObjectizer предоставляет несколько функций дентом сразу нескольких событий одного агента, ес send_msg. Сообщения могут выполнять роль сигна ли эти события имеют разные приоритеты. В этом лов (сообщение без данных, важен сам факт отсыл случае при возникновении сообщения обработчики ки сообщения) и роль обычных сообщений (содер событий запускаются SObjectizer в порядке убыва жащих данные). ния их приоритетов.

Для получения сообщения агент должен подпи саться на него. Сообщения в SObjectizer идентифи Пробинг (опрос состояния) цируются по паре имён: имени агента, владеющего Встроенные средства SObjectizer позволяют для сообщением, и имени самого сообщения. Такой спо любого агента узнать его состояние. Список состоя соб идентификации позволяет различать сообщения ний, поддерживаемых агентом, декларируется на от агентов одного типа (владеющих одинаковыми на этапе создания. Для полноценного анализа инфор борами сообщений). Понятие владение агента сооб мации о состоянии недостаточно. Предположим, щением возникает из за необходимости как то что полное состояние агента описывается древо структурировать множество всех сообщений. Напри видным набором свойств. Тогда поддержка пробин мер, если в противопожарной системе есть множест га сводится к описанию в терминах сообщений и со во однотипных датчиков, а каждый из них отсылает бытий интерфейса, поддерживаемого всеми агенты, сообщение о своём состоянии, нужно как то разли создаваемой системы. В качестве решения этой чать, к какому именно датчику относится конкретное проблемы можно создать специальный тип агента сообщение. В SObjectizer эта проблема решена при discoverable_agent_t, от которого должны наследо вязкой имён сообщений к именам агентов - если ваться все пользовательские агенты. Наследование агент зарегистрирован в SObjectizer, есть и его сооб агентами свойств своих предков в SObjectizer похоже щения. Как только агент дерегистрируется, вместе на наследование классов в C++, множественное на с ним исчезают и сообщения, которыми он владел. следование допустимо с ограничением: имена сооб Сообщения могут рассылаться адресно (т.е. с щений и состояний агентов предков не должны пе указанием имени конкретного агента получателя), ресекаться. Discoverable_agent_t должен определять 50 БИЗНЕС ИНФОРМАТИКА №2(04)Ц2008 г.

ИНФОРМАЦИОННЫЕ СИСТЕМЫ И ТЕХНОЛОГИИ В БИЗНЕСЕ набор сообщений, позволяющий узнать у агента его щем процессе. В случает модели heat bugs одним из внутреннюю структуру, полное состояние и статис видов аггрегатора становится агент, вычисляющий тические параметры. среднюю несчастливость жуков на каждом шаге ра боты системы. Этот агент посылает свои сообщения, Наблюдатели (аггрегаторы) отображаемые средой на компьютере пользователя.

Вводится специальный тип агентов - аггрегато В общем случае исследователь контролирует экспе ры. Аггрегатор - это агент, находящийся в системе, римент, проходящий на другом компьютере или на но не оказывающий на неё активного влияния. боре компьютеров. Начиная с определённого этапа, Задача аггрегатора - аккумуляция статистической у него возникает гипотеза: средняя несчастливость и аналитической информации в соответствии с оп жуков не поднимется выше 0.016 но и не опустится ределёнными правилами и предоставление их в ви ниже 0.015. Исследователь описывает на специаль де сообщений. Например, в случае модели heat bugs ном DSL (Domain Specific Language) агента, проверя в системе присутствует два вида аггрегаторов: ющего эту гипотезу, с двумя сообщениями:

unhappiness_aggregator, собирающий информацию msg_avg_ok, которое должно генерироваться каждые о среднем уровне несчастливости агентов жуков, сто шагов, если условие гипотезы не было нарушено и hb_gui_server - агент, генерирующий некоторое и msg_avg_fail (val), которое должно генерироваться, кодированное представление текущей ситуации на если одна из границ оказалась неверной. После этого поле. по описаню агента на DSL генерируется C++ описа ние агента (динамическая библиотека, содержащая Асинхронность сервис, который при запуске зарегистрирует агента Все сообщения, передаваемые агентами, асин в системе и создаст один экземпляр). Созданная биб хронные. Сколько потоков будут выполнять работу лиотека распространяется средствами ASF по всем по обработке сообщений, зависит от диспетчера, хостам, участвующим в эксперименте, и запускается.

который задаётся при старте SObjectizer. При ис Предположим, в некоторый момент времени при пользовании некоторых типов диспетчеров прило шло сообщение msg_avg_fail (0.0161). Исследова жение может не заботиться о синхронизации досту тель делает вывод, что гипотеза не подтверждается, па к разделяемым данным, т.к. самих разделяемых и уточняет параметры. Теперь генерируется агент, данных не будет. На текущий момент все штатные проверяющий рамки 0.002, 0.015. Предыдущий агент диспетчеры SObjectizer гарантируют, что несколько исключается из эксперимента, и его место занмает обработчиков событий одного агента не будут запу новый с уточнёнными параметрами. Графически этот щены в разных контекстах. Это означает, что у аген процесс отображен на рис. 1.

та нет проблемы доступа к своим данным из разных потоков. Поэтому и нет необходимости синхрони зировать доступ к ним.

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

Проверка гипотез Одним из ключевых элементов отличающих раз рабатываемую среду от аналогов является интерак тивная проверка гипотез. Физически проверка осу ществляется построением новых аггрегаторов и включением их в текущий эксперимент. Среда Рис. 1. Включение нового аггрегатора в эксперимент должна предоставлять удобные средства контроля и мониторинга аггрегаторов. Агентно ориентированный подход - скорее до Сценарий работы исследователя со средой ASF полнение к объектно ориентированному подходу, следующий. Запускается эксперимент, в процессе нежели его замена. Фактически агентно ориенти взаимодействия состояние среды меняется, и аггре рованный подход является дополнением ООП в об гаторы выдают некоторую информацию о протекаю ласти динамического взаимодействия объектов, т.е.

БИЗНЕС ИНФОРМАТИКА №2(04)Ц2008 г. ИНФОРМАЦИОННЫЕ СИСТЕМЫ И ТЕХНОЛОГИИ В БИЗНЕСЕ в объектной модели разрабатываемой системы вы Используемые библиотеки, технологии.

деляются самостоятельные объекты, взаимодей Standard C++ ствующие друг с другом. Эти объекты объявляются В качестве основного языка разработки выбран агентами. Далее проектирование осуществляется C++ как язык, обеспечивающий высокий уровень практически так же, как и в ООП (описываются со абстрагированности и позволяющий писать натив стояния, сообщения и события агентов), только ный эффективный код. [8, 11Ц14]. Обеспечение с учётом того, что каждая из используемых сущнос кросплатфоменности достигается использованием тей (состояние, сообщение, событие) будет кон стандартного подмножества языка C++, а также кретным, заранее известным способом перенесена инкапсуляцией платформенно зависимых прими из проекта в программу. тивов и сервисов. Большую часть инкапсуляции ба зовой функциональности операционной системы, такой как сокеты, потоки, динамические библиоте 3. Архитектура ки, работа с переменными окружения, берут на се бя библиотеки Boost и ACE.

После анализа работ [3, 7Ц10] выбрана архитек тура, представляющая некоторое сужение SOA Boost (Service Oriented Architecture). Билиотека Boost - свободно распространяемый продукт с открытым исходным кодом (open source) [15]. Исходники библиотеки и документация до ступны по адресу www.boost.org [16]. Библиотека Boost - это собрание множества независимых биб лиотек, созданных независимыми разработчиками и тщательно проверенными на различных платфор мах. Можно считать, что Boost - это расширение стандартной библиотеки C++.

ACE The ADAPTIVE Communication Environment (ACE) - одна из самых переносимых C++ библио тек, предназначенная для разработки сложных, многоплатформенных приложений, и широко Рис. 2. Архитектура SOA используется во всем мире [17]. ACE представляет собой библиотеку, разделённую логически на не Один из ключевых аспектов проектируемой сис сколько слоёв. На самом нижнем уровне находится темы - его распределённость. Выбрана многозвен кроссплатформенная реализация многих функций ная (клиент сервер) архитектура с одним важным из стандартной библиотеки C и POSIX. Над ними - дополнением: клиентская часть должна минималь интерфейсные фасады, скрывающие детали реали но отличаться от серверной. Этого удалось добиться зации таких средств, как нити, процессы, примити в полной мере, выполняя различные задачи. Клиент вы синхронизации, различные механизмы межпро и сервер содержат полный набор логики, что делает цессорного взаимодействия. Над ними каркасы.

возможным смену ролей в runtime. При проектиро вании сформулированы следующие предпосылки: Python единая архитектурная концепция для разных Python (п айтон, пит он) - мультипарадигмен приложений;

ный язык программирования высокого уров модульность и расширяемость;

ня с динамической типизацией, автоматическим быстродействие, близкое к Real Time;

управлением памятью и удобными высокоуровне принципиальная возможность перехода на выми структурами данных, такими как словари другие программные платформы;

(хеш таблицы), списки, кортежи. Большая часть самодиагностика;

реализаций, в том числе и референсная CPython, - устойчивость к внутренним и внешним сбоям;

интерпретаторы. Поддерживает классы, модули (они защита информации и алгоритмов от несанк могут быть объединены в пакеты), обработку исклю ционированного доступа;

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

52 БИЗНЕС ИНФОРМАТИКА №2(04)Ц2008 г.

ИНФОРМАЦИОННЫЕ СИСТЕМЫ И ТЕХНОЛОГИИ В БИЗНЕСЕ Язык поддерживает несколько парадигм програм мирования: структурное, объектно ориентирован ное, функциональное и аспектно ориентированное.

SObjectizer SObjectizer - набор принципов, правил и огра ничений на проектирование и реализацию про грамм в рамках агентного подхода, называемый агентной моделью;

кросплатформенная OpenSource библиотека, позво ляющая реализовать приложение в терминах аген тов, их состояний, сообщений и событий [18;

19].

4. Прототип На основании проведённого исследования, а также изучения соответствующей аналитической литературы сформулированы следующие принци пы проектирования:

ядро - сервисы - Модель данных;

настройка через внешние файлы;

граф зависимостей между сервисами;

несколько категорий сервисов;

механизм Job Scheduler;

использование интерфейсов и перехватчи Рис. 3. Сервисы ASF ков для вызова;

шаблон Generic Attribute;

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

просов (конфигурируется через скрипт);

Ядро (Kernel) выступает в роли менеджера ре транзакции;

сурсов (память, потоки, и т.д.) а также черного Service - Health - Monitoring в ядре;

ящика для сервисов, через который они получают микрорестарт. доступ к другим сервисам. Взаимодействие ядра с сервисами происходит асинхронно. Одна из клю При создании прототипа выделено пять катего чевых особенностей - полная интроспекция: каж рий сервисов: дый сервис формально регистрирует свой внешний Boot strap services - сервисы, в обязанность интерфейс в ядре. Таким образом, можно объеди которых входит запуск и инициализация ядра;

нять сервисы, разработанные независимо друг от Kernel support services - сервисы ядра, серви друга. В качестве средства оркестровки сервисов сы реализующие основную часть функцио используется скрипт на языке Python.

нальности framework (каркаса);

Application support services - вспомогательные Boot strap services сервисы, аналог HAL - Hardware Abstraction Сервисы, входящие в группу Boot strap отвечают Layer;

за запуск ядра и базовую информацию о системе.

Application services - сервисы специфичные Сюда входят:

для SensorMonitor;

Startup service - сервис, которому передаётся Service extensions - расширения сервера (plug управление при запуске сервера (экземпляр ins, script);

создается в функции main);

BasicLog service - сервис, обеспечивающий Состав каждой группы сервисов, для одного из журналирование (текстовый файл) на этапах проектов, созданных на ядре ASF, отражён на рис. 3. запуска и остановки сервера;

Группы Application support services и Application BasicConfig service - сервис, обеспечивающий services на рис. 3 не содержат всех сервисов. В общем доступ к конфигурационным параметрам.

БИЗНЕС ИНФОРМАТИКА №2(04)Ц2008 г. ИНФОРМАЦИОННЫЕ СИСТЕМЫ И ТЕХНОЛОГИИ В БИЗНЕСЕ SysInfo service - сервис, через который ядро SimulationManager - сервис обеспечивающий получает информацию о системе (количество управление имитационным экспериментом;

доступной памяти, тип процессора и т.д.) HeatBugsService - набор агентов для класси ческой модели Heat Bugs;

Сервисы этой группы тесно связаны с ядром, опе HeatBugsGUI - визуализация модели рационной системой и типом программы, играющей HeatBugs (в т.ч. и распределенная);

роль сервера в системе SensorMonitor (stand alone, PythonScripting - управление приложением с service, daemon), и любые изменения в их интерфей помощью Python скриптов.

сах отражается на ядре.

Kernel services Сервисы, входящие в группу Kernel реализуют основную функциональность framework (каркаса).

Сюда относятся:

StandartConfig service - сервис позволяющий другим частям системы получить доступ к своим конфигурационным параметрам (xml файл);

StandartLog service - сервис, обеспечивающий журналирование работы системы (текстовый файл, системные журналы, БД);

Resource Manager - менеджер ресурсов обес печивающий доступ к разделяемым ресурсам и их освобождение в случае сбоя сервиса, за хватившего ресурс;

JobScheduler - планировщик, обеспечиваю щий лодновременное выполнение различных сервисов. Реализован как пул потоков (нитей);

HealthMonitor - сервис, обеспечивающий мо ниторинг, завершение и перезапуск сервисов, Рис. 4. Взаимодействие сервисов и ядра в которых возникли ошибки (микрорестарт);

ServiceManager - сервис, управляющий серви SimulationManager сами групп Application, и Application support, ди Сервис Simulation Manager, входящий в группу намически подключаемыми на этапе загрузки. Application Services, обеспечивает поддержку про ведения имитационных экспериментов. По сути Application support services этот сервис является интерфейсом между ядром Сервисы, входящие в группу Application support, - ASF и SObjectizer. С точки зрения SObjectizer среда прослойка между сервисами уровня приложения ASF представлена агентом system_agent, сообщения и аппратной платформой (операционной систе которого управляют ходом эксперимента. С другой мой). Сюда относятся: стороны, для ASF эксперимент - это результат ра Controller service - сервис, играющий роль боты сервисов.

драйвера Master Controller;

Важная особенность Simulation Manager - под NetProtocol service - сервис, реализующий ин держка пробига. Класс discoverable_agent_t, базо терфейс к стандартныем сетевым протоколам;

вый для всех агентов системы, реагирует на следую CommProtocol service - сервис, реализующий щие сообщения:

интерфейс в последовательному (RS 232) порту;

get_property_list_msg(string, string);

DataModel service - сервис, представляющий get_property_msg(string, string);

собой модель предметной области. set_listener_msg(string, string);

remove_listener_msg(string, string).

Application services Первый аргумент каждого сообщения представ Сервисы, входящие в группу Application services, ляет собой лобратный адрес отправителя. Строки реализуют фукциональность, специфическую для аргументов, запросов и ответов содержат следую конкретного приложения. Сюда входят: щие специальные символы: л.,()\. Если строка 54 БИЗНЕС ИНФОРМАТИКА №2(04)Ц2008 г.

ИНФОРМАЦИОННЫЕ СИСТЕМЫ И ТЕХНОЛОГИИ В БИЗНЕСЕ ответа должна содержать один из этих символов, Создание экземпляров агентов осуществляется при они экранируются с помощью л\. Например: вызове асинхронного метода сервиса. Такое двух ab.c Ц> ab\.c, a\b Ц> a\\b. Все свойства фазное создание агентов призвано обеспечить гиб строковые;

бинарные данные передаются с помо кость при настройке системы и перезапуске экспе щью Base64 кодирования. римента. Перезапуск происходит без перезагрузки Сообщение get_property_list_msg(string, string) (или даже остановки) сервисов. Соответствующая содержит два аргумента. Первый - лобратный ад диаграмма развертывания приведена на рис. 6.

рес, второй - маска. Маска представляет собой строку вида meters.temperature.m1 - специфика ция полного имени свойства (ожидаемый ответ - пустая строка), или meters.temperature.* - специ фикация частичного имени (ожидаемый ответ meters.temperature.(m1, m2, m3), если такие свой ства существуют или meters.temperature, если со ответствующее свойство - лист дерева).

Сообщение get_property_msg(string, string) - за прос на получение значения свойства. Например, meters.temperature.m1. Ожидаемый ответ в этом случае - л123. Или meters.temperature.(m1, m2), meters.humidity.m1. Ожидаемый ответ - л(123,14),100.

Сообщения set_listener_msg(string, string) и remove_listener_msg(string, string) используются для подписки на изменение указанного в аргументе свойства агента. Структура сервиса Simulation Manager приведена на рис. 5.

Рис. 6. Диаграмма развертывания для сервисов агентов Принцип работы Ключевой момент работы SObjectizer - диспет черизация сообщений и событий. Механизм дис петчеризации события рассмотрен ниже.

Кто то вызывает send_msg для отсылки сообще ния. Функции send_msg указывается имя сообщения и, если необходимо, имя получателя. SObjectizer проверяет существование сообщения. Если такое со общение действительно существует, создаёт экзем пляр сообщения. В случае отложенного сообщения экземпляр сообщения отдаётся специальному объ екту таймеру для отсчёта тайм аута. В противном случае начинается диспетчеризация сообщения. Для всех событий, подписанных на сообщение, форми руется список заявок диспетчеру. Если сообщение отсылалось адресно, в список включаются только события агента получателя. Заявки передаются дис петчеру для дальнейшей диспетчеризации. Диспет чер распределяет эти заявки по очередям заявок сво их рабочих нитей. Например, диспетчер с одной ра Рис. 5. Сервис Simulation Manager бочей нитью помещает все заявки в одну очередь.

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

ставлены динамическими библиотеками, содержа Рабочая нить диспетчера извлекает из своей оче щими сервисы ASF. Будучи запущенным, такой реди очередную заявку. Она проверяет, может ли со сервис регистрирует в SObjectizer классы агентов. бытие быть обработано в текущем состоянии агента.

БИЗНЕС ИНФОРМАТИКА №2(04)Ц2008 г. ИНФОРМАЦИОННЫЕ СИСТЕМЫ И ТЕХНОЛОГИИ В БИЗНЕСЕ Если может, то в контексте этой рабочей нити у объ // Имя датчика, инициировавшего данное сообщение.

екта агента вызывается метод обработчик события. std::string m_sensor_name;

В противном случае событие игнорируется. После // Текущие показания датчика.

обработки очередной заявки сама заявка уничтожа float m_current_value;

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

уничтожает экземпляр сообщения (если только со float m_max;

общение не является периодическим). };

Распределённое взаимодействие // А вот так это сообщение должно быть описано для SObjectizer.

SOL4_MSG_START(msg_alarm, msg_alarm) SOL4_MSG_FIELD(m_sensor_name) SOL4_MSG_FIELD(m_current_value) SOL4_MSG_FIELD(m_max) SOL4_MSG_FINISH() Такое описание позволяет SObjectizer на стороне отправителя взять значения полей m_sensor_name, m_current_value и m_max из объекта сообщения и се риализовать их в коммуникационный канал. На при нимающей стороне SObjectizer создаёт объект типа msg_alarm и восстанавливает значения его полей, затем доставляет созданный объект получателю.

SObjectizer вводит понятие коммуникационного канала (экземпляр конкретного IPC соединения или сессии). Коммуникационные каналы обслужи вают специальные транспортные агенты. Напри Рис. 7. Распределённое взаимодействие мер, для организации взаимодействия двух процес сов по TCP/IP в одном из них нужно объявить В SObjectizer агенты взаимодействуют между со транспортного агента, который создаст серверный бой только посредством асинхронных сообщений. TCP/IP сокет, а во втором процессе - транспорт Поэтому несложно обеспечить условия, при которых ного агента, который создаст клиентский TCP/IP агенту получателю неважно, откуда сообщение по сокет. Эти агенты будут устанавливать и обслужи ступило. Необходимо только, чтобы сообщение со вать TCP/IP соединения, объявляя каждую новую держало в себе копию всех необходимых данных. сессию отдельным коммуникационным каналом.

В этом случае сообщение может быть сериализовано, Например, так выглядит создание транспортного передано по какому то IPC (Inter Process Commu агента для серверного сокета:

nication) каналу в другой процесс, десериализовано so_4::rt::comm::a_srv_channel_t a_channel( и доставлено агенту получателю. В SObjectizer для a_channel, этого есть базовые средства. so_4::socket::channels::create_server_channel(ip_address));

В SObjectizer существует т.н. SOP (SObjectizer Protocol), определяющий, как будут сериализованы а вот так - создание транспортного агента для сообщения агентов. SOP позволяет передавать сооб клиентского сокета:

щения, которые содержат поля примитивных типов so_4::sop::std_filter_t * filter = so_4::sop::create_std_filter();

(char, int, short,...) или векторов этих типов, а также filter >insert(a_common_t::agent_name());

std::string и сложных объектов, сериализуемых с по мощью ObjESSty ( so_4::rt::comm::a_cln_channel_t a_channel( Для этого нужно всего лишь описать структуру со a_channel, общения для SObjectizer в виде набора макросов: so_4::socket::channels::create_client_factory(ip_address), // Вот как эта структура описывает сообщение. filter, struct msg_alarm // Вот этот объект будет указывать агенту повторять { попытки 56 БИЗНЕС ИНФОРМАТИКА №2(04)Ц2008 г.

ИНФОРМАЦИОННЫЕ СИСТЕМЫ И ТЕХНОЛОГИИ В БИЗНЕСЕ // установления соединения каждые 5 секунд, и иници нагревают пространство, температура перестаёт ировать быть комфортной, и жуки начинают стремиться уй // повторное соединение после разрыва без задержек. ти от кластера. Для каждого жука на каждом шаге so_4::rt::comm::a_cln_channel_t:: моделирования определяется его несчастливость, create_def_disconnect_handler(5000, 0));

как функция от модуля разницы между текущей температурой среды и идеальной температурой, Над транспортными агентами в SObjectizer стоит к которой данный жук стремится.

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

ционных каналов и проверку их жизнеспособности. st_initial - в нём жук находится сразу после за Одна из задач коммуникатора - пингование кана пуска приложения и при перезапуске модели.

лов, если в них нет активности, и принудительное В этом состоянии жук пытается найти незаня закрытие канала в случае отсутствия ответов на пин тое место на поле, в котором он начнёт свои ги. Вторая задача коммуникатора - отслеживание передвижения;

сообщений, которые должны быть переданы в ком st_sim_run - это основное и единственное со муникационные каналы, и восстановление сообще стояние жука в течение эксперимента. Нахо ний, полученных из коммуникационных каналов. дясь в этом состоянии, жук пытается найти оп Какие именно сообщения коммуникатор будет пе тимальное место. Стоит обратить внимание, редавать в коммуникационный канал, а какие игно что параметры среды жук узнаёт у специально рировать? В SObjectizer существует понятие т.н. гло го агента - a_heat_space;

всё взаимодействие бального агента. Это агент, владеющий только сооб со средой - запросы и перемещения реализо щениями, но не имеющий ни состояний, ни собы ваны как посылка/приём сообщений.

тий. Он даже регистрируется в SObjectizer особым образом. Зато его сообщения коммуникатор отсле живает и рассылает в доступные коммуникационные каналы. Чтобы два процесса могли взаимодейство вать между собой посредством SOP, им необходимо всего лишь зарегистрировать у себя одного и того же глобального агента (отсюда и его название, он как бы существует без оглядки на границы процесса).

После этого любое сообщение глобального агента, порождённое в одном процессе, будет автоматичес ки транслироваться в другой процесс.

Тестовая модель HeatBugs Для демонстрации и испытания возможностей прототипа реализована модель HeatBugs - одна из классических демонстрационных моделей в агент но ориентированных вычислениях.

Модель HeatBugs представляет собой прямоу Рис. 8. Состояния агента a_heat_bug гольное поле, населённое агентами жуками. Одно временно в одной ячейке поля может находиться не Агент a_heat_space отображен на рис. 9. Агент более одного жука. Каждый жук излучает в про может находиться в трёх базовых состояниях, при странство некоторое количество тепла, которое вязанных к управлению экспериментом. В состоя с течением времени рассеивается в пространстве. нии st_initial агент a_heat_space размещает аген Один жук не может обеспечить комфортной темпе тов на поле. После успешного размещения всех ратуры для себя, поэтому он начинает движение агентов жуков, модель переходит в состояние в том направлении, которое ему кажется наиболее st_sim_run, где происходит основная часть взаимо предпочтительным. Выбор предпочтительного на действия в течение эксперимента. Состояние правления осуществляется как выбор ближайшей st_sim_paused введено, чтобы исследователь (или к жуку незанятой точки, где температура ближе среда) мог в любой момент прервать эксперимент к идеальной, чем в текущем местоположении. Если и просмотреть состояние отдельных агентов, участ много жуков сбиваются в одну кучу, вместе они так вующих в эксперименте.

БИЗНЕС ИНФОРМАТИКА №2(04)Ц2008 г. ИНФОРМАЦИОННЫЕ СИСТЕМЫ И ТЕХНОЛОГИИ В БИЗНЕСЕ из различных сервисов, причём переконфигу рирование может происходить в runtime. Под держка скриптинга позволяет держать систе му на кончиках пальцев, и формулировать запросы на языке высокого уровня (Python);

распределённость. Создается виртуальная рас пределённая среда взаимодействия агентов.

Важной отличительной особенностью являет ся то, что агент, не знает и не должен знать, пришло сообщение к нему от агента находя щегося с ним в одном адресном пространстве или с другой машины, возможно находящей Рис.9. Состояния агента a_heat_space ся в тысяче километров от первой;

быстродействие. Язык C++ позволяет вос Реализация графики пользоваться преимуществами современных Одна из основных черт ASF - распределённость. оптимизирующих компиляторов, генерирую В качестве иллюстрации этой концепции в прото щий весьма эффективный код. Отсутствие тип введён еще один сервис HeatBugsGui, обеспечи сборщика мусора, характерного для управляе вающий рендеринг графики. Этот сервис при запус мых (managed) языков, компенсируется ис ке создаёт одного (или пару) из двух агентов: пользованием техник RAII, что позволяет a_hb_gui_sender и a_hb_gui_receiver. Назначение осуществлять контроль не только за памятью, этих агентов в сборе информации о текущем состо но и за другими ресурсами;

янии модели и отображении этой информации. Ни возможность мягкой интеграции с внешними один из агентов не знает, запущен ли его компаньон системами. При условии, что агенты должны локально, в одном адресном пространстве, или же взаимодействовать только сообщениями, мы работает на другой машине. Сообщения этих аген обеспечиваем возможность мягкой интегра тов помещаются на общую информационную шину ции с внешними системами. Например, на и обрабатываются всеми, агентами, подписавшими предприятии существует система поддержки ся на эти сообщения. Если клиент, отображающий принятия решений. Её часть - система имита данные, запущен в другом процессе (и возможно на ционного моделирования, реализованная на другой машине), работу по сериализации/десериа ASF. С точки зрения ASF, интерфейсы лизации сообщений этих агентов берёт на себя к внешним системам - агенты, генерирую SObjectizer. Если модель запущена локально, ника щие свои сообщения в случае изменения кой сериализации не происходит, и данные переда внешних условий. Управляющие сигналы пе ются практически прямым вызовом функции. Под редаются во внешний мир через сообщения.

локальностью понимается, что все агенты запуще ны в рамках одного процесса. Contra Было бы ошибкой утверждать, что выбранная архитектура лишена недостатков. Далее перечисле ны несколько проблем, к которым приводит следо вание архитектуре ASF.

Грамотный подход к выбору модели Распределение вычислительных ресурсов может Рис. 10. Реализация удалённого GUI оказать эффект обратный, планируемому в случае моделей с большим уровнем связности. Если вы числительный эксперимент построен на десяти 5. Анализ архитектуры компьютерах объединённых сетью, и один шаг ра боты системы подразумевает получение реакции Pro ото всех агентов, участвующих в эксперименте, при Анализ работы прототипа показывает, что вы чем каждый отдельных шаг вычислений достаточно бранная архитектура обеспечивает: прост, то накладные расходы по организации сете гибкость. Приложение собирается как кубики вого взаимодействия могут оказаться на несколько 58 БИЗНЕС ИНФОРМАТИКА №2(04)Ц2008 г.

ИНФОРМАЦИОННЫЕ СИСТЕМЫ И ТЕХНОЛОГИИ В БИЗНЕСЕ порядков выше, чем сложность вычислений. Это количество шагов - 10000. ASF затратил на проход приведёт к тому, что общее быстродействие снизит в среднем в 1,3 раза больше времени, чем Swarm.

ся в соответствующее количество раз. Это может показаться странным, но с другой сторо ны Swarm модель использует прямые вызовы для Внутренняя сложность (COM, Corba) определения температуры окружающего мира и вы Внутренняя сложность фреймворка достаточно бора направления движения. Приблизительная велика. Поддержка и развитее ASF требуют от про оценка количества сообщений, обрабатываемых граммиста глубокого знания C++, а также специ ASF и Swarm, показывает разницу на два порядка.

фики работы таких механизмов, как потоки, про Один шаг эмуляции в ASF модели приводит к гене цессы, динамические библиотеки и сети. С точки рации и обработке примерно 500 сообщений, тогда зрения поддержки модульности и асинхронности, а как в Swarm - порядка 3 х. Стоит отметить, что мо также работы в распределенных средах, ASF частич дель HeatBugs - не самая удачная с точки зрения но реализует функциональность CORBA, обеспечи демонстрации преимуществ ASF, однако это клас вая динамическую переконфигурацию, и отказыва сическая модель и авторы решили остановить свой ясь от жесткой привязки к интерфейсам. Похожую выбор на ней.

функциональность в случае среды MS Windows обеспечивают дуальные COM интерфейсы. Однако RePast использование COM ограничило бы список доступ RePast (.NET) на модели HeatBugs при парамет ных платформ для ASF. Использование C++ застав рах, совпадающих с указанными в предыдущей гла ляет строго следить, чтобы настройки компилятора ве, показал производительность в два раза мень для среды и dll расширений в точности совпадали, шую, чем ASF. Отдельно стоит отметить, что модель что делает возможным использование C++ интер RePast построена на прямых вызовах, что теоретиче фейсов через границу модуля [10][14]. ски снижает накладные расходы на синхронизацию.

Асинхронность усложняет реализацию Для некоторых задач навязанная асинхронность 6. Выводы, планы может усложнить и замедлить реализацию. Однако реальный мир асинхронен. Если задача удобнее Созданная архитектура позволяет эффективно решается в синхронных терминах, имеет смысл проводить имитационные эксперименты. Произво рассмотреть альтернативы ASF. дительность системы намного выше, чем у анало гов, но выигрыш в производительности теряется Ненадежность соединения в случае неудачно выбранной модели (в качестве Сетевые соединения ненадёжны. Поэтому при мерила производительности используется количес кладная логика модели должна содержать реакцию тво сгенерированных и обработанных сообщений на выпадение одного или нескольких хостов из об в секунду). Идеальный случай для ASF - модель, щей сети, что усложняет реализацию как сервера, в которой небольшое количество агентов взаимо так и модели. действуют асинхронно в силу природы модели, причём объём вычислений на каждом шаге экспе Сравнение производительности римента сравнительно высок, по сравнению с объ Чтобы получить численную характеристику вы ёмом результатов вычислений.

игрыша в производительности от использования Дальнейшее направление развития системы - ASF, проведено сравнение с распространёнными создание DSL, позволяющего описывать агентов на фреймворками для агентного моделирования высокоуровневом, графическом языке, и кодогене Swarm и RePast (.NET). ратора, для транслирования DSL описания в C++ код. Помимо кодогенератора, в систему должен Swarm входить набор скриптов, содержащий настройки Тестовая модель HeatBugs с параметрами: коли для компиляции расширений ASF, написаных чество жуков (агентов) 100, размер мира 100100, вручную.

Литература 1. Gilbert, N. Terna P, How to Build and Use Agent Base models in Social Science / N. Gilbert, P. Terna. // Mind & Society. 1999. № 1. P.

[57Ц72].

БИЗНЕС ИНФОРМАТИКА №2(04)Ц2008 г. ИНФОРМАЦИОННЫЕ СИСТЕМЫ И ТЕХНОЛОГИИ В БИЗНЕСЕ 2. Tobias, R. Evaluation of Free Java libraries for Social Scientific Agent Based Simulation / R. Tobias, C. Hofmann. // Journal of Artificial Societies and Social Simulation. 2004. № 7. P. [3Ц5].

3. Horling, B. The Soft Real Time Agent Control Architecture / B. Horling, V. Lesser, V. Regis, T. Wagner. // Autonomous Agents and Multi Agent Systems. 2006. № 12. P. [35Ц91].

4. Шутов, А. Создание распределенной системы экономического моделирования на основе RePast и Swarm / А. Шутов А, С. Капус тин. 2006. 10 с.

5. Leow, R. Running C++ model under Swarm Environment / R. Leow, R. Standish. // 2005. 20 p.

6. SObjectizer. Online: 2008.

7. Fowler, M. Patterns of Enterprise Application Architecture / M. Fowler. Addison Wesley Professional: 2002. 560 p.

8. Bulka, D., Mayhew D, Efficient C++ Performance Programming Techniques / D. Bulka, D. Mayhew. Addison Wesley Professional: 1999. 336 p.

9. Bellas, F. An Agent based Architecture for Building CORBA Distributed Systems. / F. Bellas, R. Juanes, N. Rodriguez, A. Viia. // Annual ACM Symposium on Principles of Distributed Computing. 1998.

10. Hofmeister, C. Applied Software Architecture / C. Hofmeister, R. Nord, D. Soni. Addison Wesley: 2000. 432 p.

11. Vandevoorde, D. C++ Templates: The Complete Guide / D. Vandevoorde, N Josuttis. Addison Wesley Professional: 2002. 552 p.

12. Madina, D. A system for reflection in C++ / D. Madina, R. Standish // Proceedings AUUG 2001: Always on and everywhere. № 12. P.

[207Ц207].

13. Jacobson, I. The Unified Software Development Process / I. Jacobson, G. Booch, D. Rumbaugh. Addison Wesley Professional: 1999. 512 p.

14. Russian Software Developer Network. Online: 2008.

15. Karlsson, B. Beyond the C++ Standard Library: An Introduction to Boost / B. Karlsson. Addison Wesley Professional: 2005. 432 p.

16. Boost C++ libraries. Online: 2008.

17. Huston, S. ACE ProgrammerТs Guide, The: Practical Design Patterns for Network and Systems Programming / S. Huston, J. Johnson, U.

Syyid. Addison Wesley: 2003. 544 p.

18. Охотников, Е. Соотношение SObjectizer и FIPA

Abstract

Architecture / Е. Охотников. 2006. 12 с.

19. Охотников, Е. SObjectizer: I Love This Game! / Е. Охотников. // RSDN Magazine. 2005. № 5. С. [19Ц21].

ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ - ВЫСШАЯ ШКОЛА ЭКОНОМИКИ представляет свои периодические издания Журнал освещает теоретические и прикладные проблемы экономи ЭКОНОМИЧЕСКИЙ ЖУРНАЛ ческой науки. В каждом* номере - статьи ведущих российских эко ВЫСШЕЙ ШКОЛЫ ЭКОНОМИКИ номистов. Рецензии, методологические и лекционные материалы.

ЕЖЕКВАРТАЛЬНЫЙ НАУЧНО ИНФОРМАЦИОННЫЙ Эксклюзивные статьи зарубежных экономистов. Данные официаль ной статистики по широкому кругу вопросов.

ЖУРНАЛ Каталог Агентства Роспечать - индекс Издается с 1997 г.

Объединенный каталог Пресса России - индекс Координаты редакции:

Главный редактор - 101990 Москва, ул. Мясницкая, 20, офис Евгений Евгеньевич Гавриленков e mail: redact@hse.ru, тел./факс: (495) 628 Журнал освещает состояние, динамика и дает прогноз основных со РОССИЙСКАЯ ЭКОНОМИКА:

циально экономических индикаторов. В каждом номере - хроника ПРОГНОЗЫ И ТЕНДЕНЦИИ событий экономики. Результаты конъюнктурных опросов предприя ЕЖЕМЕСЯЧНЫЙ СПРАВОЧНО АНАЛИТИЧЕСКИЙ тий. Самые свежие данные. Аналитический материал представлен с использованием таблиц, графиков и диаграмм.

ЖУРНАЛ Каталог Агентства Роспечать - индекс Издается с 1993 г.

Объединенный каталог Пресса России - индекс Координаты редакции:

Главный редактор - 117312 Москва, ул. Вавилова, 7, офис Елена Анатольевна Иванова E maii: id.hse@mail.ru Тел./факс: (495) 772 РАСПРОСТРАНЯЮТСЯ ПО РОССИИ И ДРУГИМ СТРАНАМ СНГ. ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ - НА САЙТЕ: www.hse.ru 60 БИЗНЕС ИНФОРМАТИКА №2(04)Ц2008 г.

   Книги, научные публикации