SWAGES — расширяемая распределенная среда для крупномасштабного агент-ориентированного моделирования

SWAGES - расширяемая распределенная среда для крупномасштабного агент-ориентированного моделирования

Ученые из Университета Тафтса (Медфорд, Массачусетс, США) представили пакет 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).

Swages1.JPG

Рис. 1. Среднее время реализации задачи по максимально быстрому поиску и перемещению агентов к ближайшей точке сбора в рамках агентной модели, имитирующей перемещение роя для 1, 2, 4, 8, 16 узлов

Как уже говорились, в SimWorld реализована поддержка внешних плагинов. К примеру, в качестве демонстрации возможностей авторы подключили к SimWorld открытый физический движок ODE (Open Dynamics Engine), который хорошо подходит для симуляции движущихся объектов в рамках неизменного пространства, и объектно-ориентированный графический движок OGRE (Object-Oriented Graphics Rendering Engine) – кроссплатформенный движок с удобным дизайном и архитектурой.

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

Swages2.JPG

Рис. 2. Пример отображения простых агентов-муравьев с помощью OGRE в простом двухмерном графическом интерфейсе SimWorld

Моделирование в SWAGES

Шаг. 1. Разработка агентной модели

Агенты могут быть описаны с использованием любого программного языка, поддерживаемого Poplog (к примеру, Pop11, Prolog, ML, Scheme, C-Lisp). Кроме того, для разработчика предусмотрена возможность вызова внешних функций, написанных на других языках программирования, посредством специального интерфейса.

В листинге 1 показан пример кода простого агента, который получает энергию, потребляя продукты питания. SimWorld позволяет модифицировать программный код во время работы приложения. К примеру, в процессе запуска симуляции, в коде, приведенном в листинге 1, можно заменить метод eating, реализующий определенное поведение пустым методом (для возможного изучения последствий отказа от еды), т.е. на такую строчку ’define :method eating(a:simple agent); enddefine’.

define :class thing; 
    is sim_object; /* базовый класс */

    slot geometry == undef;
    slot position = undef;
    slot heading = undef;
    slot mass = undef;
enddefine;

define :class simple_agent; 
    is thing; /* производный класс */

    slot speed = 3;
    slot energy = 1000;
    slot maxenergy = 2000;
    slot food = undef;
    slot intake = 50;
enddefine;

define :ruleset eating_ruleset; /* правила для потребления */

    RULE start_eating
    [ingest food] [NOT halting_for eating]
    ==>
    [do halting_for eating]
    [do eating]
    [STOP]

    RULE end_eating
    [NOT ingest food] [halting_for eating]
    ==>
    [NOT halting_for eating]
    [STOP]

    RULE continue_eating
    [ingest food] [halting_for eating]
    ==>
    [do eating]

enddefine;

define: method eating(agent:simple_agent);

    if energy(agent) >= maxenergy(agent) then
        remove([halting_for eating]); /* агент насытился и перестал есть */
    else
        /* добавление энергии агенту */
        energy(agent) + intake(agent) -> energy(agent);
        energy(food(agent)) - intake(agent) -> energy(food(agent));
    endif;

enddefine;

 

Листинг 1. Структура простого агента в SimWorld, реализованная с помощью языка Pop11, включающая базовый класс, производный класс и правила потребления.

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

Шаг. 2. Настройка и проведение экспериментов.

После построение агентной модели, можно настроить порядок проведения экспериментов. В листинге 2 приведен пример настройки параметров для проведения множественных экспериментов с целью выяснения живучести агентов. Как видно, определяется число агентов модели (количество объектов типа «AGENT»), объем еды (количество объектов типа «FOOD») и вероятность («PROB») появления объектов типа «FOOD» в случайном месте пространства размерности 1000×1000. Таким образом, в рамках трехмерного параметрического пространства настройки экспериментов AGENT×FOOD×PROB мы получим 10×20×10×40 = 80 000 уникальных экспериментов.

[[ /*** настройка среды моделирования ***/
    [initfile ’reactive.p’] /* определения пользователя */
    [quitif 10000] /* остановка после 10000 циклов */
    [world WIDTH 1000 HEIGHT 1000] /* пространственные ограничения */

    /*** настройка агентов ***/
    [simple_agent /* использование данного объекта */
        [startup [variate AGENT from 1 to 10 step 1]]
        [record [at death [sim_x][sim_y]] [at end [energy]]]
    ]
    
    [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.).

Swages3.JPG
Рис. 3. Настройка расписания запуска набора экспериментов на нескольких узлах

Шаг 3. Анализ полученных результатов.

SWAGES содержит встроенные инструменты для статистического анализа, а также библиотеки для добычи данных (в различных форматах, включая HTML, TeX, простой текст). На рис.4 отображена типовая статистическая операция, проведенная через web-интерфейс SWAGE, а на рис. 5 выходной файл R и результаты динамических скриптов, выполненных в gnuplot и Scilab).

Swages4.JPG
Рис. 4. Выходные результирующие данные после эксперимента для одного агента A0 (слева) и сравнение сводных результатов для среднего числа выживших (справа).

Swages5.1.JPG5.1

Swages5.2.JPG5.2

Swages5.3.JPG5.3

Swages5.4.JPG5.4

Рис. 5. Выходной файл R (5.1). Сравнение двух видов агентов по показателям причин смертности (5.2) и динамика популяции агентов и ресурсов (5.3) – оба эти графика получены посредством gnuplot. Сравнение нескольких показателей двух видов агентов (зеленых и синих), реализованное с помощью Scilab (5.4).

Разработчики SWAGES позиционируют свой продукт как проработанную среду для построения крупномасштабных агент-ориентированных моделей, успешно использованную как минимум для несколько десятков научно-исследовательских проектов. Более подробно про SWAGES можно прочитать на сайте лаборатории взаимодействия между человеком и роботом (факультет информатики Университета Тафтса).

 

Агент-ориентированность Искусственные общества Суперкомпьютеры