Ученые из Университета Тафтса (Медфорд, Массачусетс, США) представили пакет SWAGES – среду для разработки распределенных агент-ориентированных моделей с возможностью автоматического динамического распараллеливания программного кода. SWAGES представляет пользователям поддержку нескольких языков программирования, а также возможность подключения плагинов для визуализации, статистического анализа и автоматической обработки ошибок. Результаты вычислений могут быть сконвертированы в файлы для последующего использования в общедоступных средствах обработки данных (типа R или Scilab).
Краткий обзор SWAGES
SWAGES содержит несколько компонент клиент-серверной архитектуры, серверные компоненты которой представляют возможности для распределенных вычислений (планировка, распределение, запуск, контроль выполнения, восстановление после сбоев и др.). На сервере определяются наборы экспериментов, отличающиеся начальными состояниями, приоритетом выполнения, а также формируются коллекции выходных данных, результаты дополнительного анализа данных и т.д.
Планировщик отвечает за приоритет выполнения экспериментов из имеющихся наборов, а также динамически подгружает освободившиеся ресурсы для экспериментов из очереди.
В процессе работы приложения поддерживается открытый канал связи между клиентом и сервером с целью отслеживания текущего состояния агентной модели. Этот канал также крайне важен для обнаружения ошибок, возникающих в ходе выполнения программного кода и возможного восстановления последствий в зависимости от причины нарушения (сбой в работе операционной системы, проблема с сетью или непредвиденная ошибка в самом приложении). В случае невозможности продолжения симуляции, серверная часть может возобновить работу приложения с последнего сохраненного состояния.
Помимо этого, в рамках системы функционирует сторожевой таймер (watchdog), который регулярно проверяет состояние отдельных компонент приложения на предмет стабильности их работы и перезапускает их в случае необходимости.
В свою очередь компоненты клиентской части приложения обеспечивают возможность управления запуском определенной симуляции и получают информацию о ходе выполнения приложения (через соответствующий программный модуль SimWorld). SimWorld построен на базе среды SimAgent – специализированного программного обеспечения для разработки агентных моделей, которое создано с использованием кроссплатформенного компилятора Poplog со встроенным интерпретатором OPS5 (Official Production System, Version 5). SimWorld запускается как с использованием графического интерфейса, так и в режиме пакетной обработки и может быть использован для разработки агентных моделей любой степени сложности.
Автоматическое распараллеливание в SimWorld может запускаться в режиме жесткой конфигурации (когда все параллельные процессы обновляются одновременно, в рамках одного цикла) или в асинхронном режиме, когда отдельные процессы обновляются независимо, по мере необходимости. Последний режим используется при реализации агентных моделей, в которых важно пространственное распределение агентов и где агенты могут оказывать влияние на окружающую среду в рамках определенного диапазона.
Так, симуляция S с n агентами может быть распределена по k параллельным процессам S1, S2,…, Sk с n1, n2,…, nk агентами, распределенными по k узлам, которые будут обновляться асинхронно. В рамках текущей реализации SimWorld, каждый процесс Si посылает информацию о состоянии обслуживаемых им агентах серверному приложению, которое хранит эти данные в рамках структуры, доступной всем остальным процессам данной симуляции. Экономия времени расчетов в зависимости от использования различного количества узлов для модели, имитирующей перемещение роя, видно на рис. 1. Результаты были получены на основе прогона 20 симуляций модели со 100 циклами в каждом случае на кластере под управлением Linux с двухъядерными процессорами Xeon (2.4GHz, 1GB RAM).
Рис. 1. Среднее время реализации задачи по максимально быстрому поиску и перемещению агентов к ближайшей точке сбора в рамках агентной модели, имитирующей перемещение роя для 1, 2, 4, 8, 16 узлов
Как уже говорились, в SimWorld реализована поддержка внешних плагинов. К примеру, в качестве демонстрации возможностей авторы подключили к SimWorld открытый физический движок ODE (Open Dynamics Engine), который хорошо подходит для симуляции движущихся объектов в рамках неизменного пространства, и объектно-ориентированный графический движок OGRE (Object-Oriented Graphics Rendering Engine) – кроссплатформенный движок с удобным дизайном и архитектурой.
В рамках каждого цикла, физический движок рассчитывает текущую позицию и направление движения агента и может передать эту информацию для графического движка, причем не требующие визуализации агенты на выбор разработчика могут быть исключены для показа. На рис. 2 показано рабочее окно агентной модели с одновременным отображением SimWorld и OGRE.
Рис. 2. Пример отображения простых агентов-муравьев с помощью OGRE в простом двухмерном графическом интерфейсе SimWorld
Моделирование в SWAGES
Шаг. 1. Разработка агентной модели
Агенты могут быть описаны с использованием любого программного языка, поддерживаемого Poplog (к примеру, Pop11, Prolog, ML, Scheme, C-Lisp). Кроме того, для разработчика предусмотрена возможность вызова внешних функций, написанных на других языках программирования, посредством специального интерфейса.
define :class thing; is sim_object; /* базовый класс */
slot geometry == undef;enddefine;
slot position = undef;
slot heading = undef;
slot mass = undef;
define :class simple_agent; is thing; /* производный класс */
slot speed = 3;enddefine;
slot energy = 1000;
slot maxenergy = 2000;
slot food = undef;
slot intake = 50;
define :ruleset eating_ruleset; /* правила для потребления */
RULE start_eatingenddefine;
[ingest food] [NOT halting_for eating]RULE end_eating
==>
[do halting_for eating]
[do eating]
[STOP]
[NOT ingest food] [halting_for eating]RULE continue_eating
==>
[NOT halting_for eating]
[STOP]
[ingest food] [halting_for eating]
==>
[do eating]
define: method eating(agent:simple_agent);
if energy(agent) >= maxenergy(agent) thenenddefine;
remove([halting_for eating]); /* агент насытился и перестал есть */else /* добавление энергии агенту */
energy(agent) + intake(agent) -> energy(agent);endif;
energy(food(agent)) - intake(agent)
-> energy(food(agent));
Листинг 1. Структура простого агента в SimWorld, реализованная с помощью языка Pop11, включающая базовый класс, производный класс и правила потребления.
Таким же образом возможно определять новые типы агентов, добавлять или удалять агентов в процессе запуска симуляции, а также отслеживать и записывать значения свойств агентов в процессе их функционирования.
Шаг. 2. Настройка и проведение экспериментов.
[initfile ’reactive.p’] /* определения пользователя */[ /*** настройка агентов ***/
[quitif 10000] /* остановка после 10000 циклов */
[world WIDTH 1000 HEIGHT 1000]/* пространственные ограничения */
[simple_agent /* использование данного объекта */[ /*** расписание событий ***/
[startup [variate AGENT from 1 to 10 step 1]][at end [energy]]]
[record [at death [sim_x][sim_y]]
[food /* использование данного объекта */[startup [variate FOOD from 10 to 200 step 10]]]]
[random [[variate PROB from 0.1 to 0.5 step 0.05] [food]]]][ /*** настройка SWAGES ***/
[name ’simple’ ’resultsdir’] /* выбор места для хранения результатов */
[user ’airolab’] /* запуск это имени данного пользователя */
[priority 5] /* запуск с определенным приоритетом */
[parallelize] /* разрешить распараллеливание */
[ranseed 29187] /* начальные условия */
[replicates 40] /* для всех повторов */
[watch 120 30] /* контроль исполнения */
[email ’’] /* уведомить пользователя о выполнении */
[copyimages ’/tmp/’] /* место для хранения информации о симуляции */
[copystats ’statsdir’]]] /* место для хранения статистики */
Листинг 2. Настройка параметров для проведения экспериментов
Настройки экспериментов могут быть произведены через web-интерфейс пакета SWAGES (рис. 3.).
Рис. 3. Настройка расписания запуска набора экспериментов на нескольких узлах
Шаг 3. Анализ полученных результатов.
SWAGES содержит встроенные инструменты для статистического анализа, а также библиотеки для добычи данных (в различных форматах, включая HTML, TeX, простой текст). На рис.4 отображена типовая статистическая операция, проведенная через web-интерфейс SWAGE, а на рис. 5 выходной файл R и результаты динамических скриптов, выполненных в gnuplot и Scilab).
Рис. 4. Выходные результирующие данные после эксперимента для одного агента A0 (слева) и сравнение сводных результатов для среднего числа выживших (справа).
5.1
5.2
5.3
5.4
Рис. 5. Выходной файл R (5.1). Сравнение двух видов агентов по показателям причин смертности (5.2) и динамика популяции агентов и ресурсов (5.3) – оба эти графика получены посредством gnuplot. Сравнение нескольких показателей двух видов агентов (зеленых и синих), реализованное с помощью Scilab (5.4).
Разработчики SWAGES позиционируют свой продукт как проработанную среду для построения крупномасштабных агент-ориентированных моделей, успешно использованную как минимум для несколько десятков научно-исследовательских проектов. Более подробно про SWAGES можно прочитать на сайте лаборатории взаимодействия между человеком и роботом (факультет информатики Университета Тафтса).