Под агентом в агентном моделировании понимается элемент модели, который может иметь поведение, память (историю), контакты и т.д. Агенты могут моделировать людей, компании, проекты, автомобили, города, животных, корабли, товары и т.д.
Вы можете создавать внутри агента переменные, диаграммы состояний, задавать события, потоковые диаграммы системной динамики, а также добавлять внутрь агента объекты библиотек AnyLogic. Вы можете создать в одной модели столько типов агентов, сколько разных типов агентов вам нужно промоделировать.
Создание агента обычно начинается с определения его интерфейса для связи с внешним миром. В случае систем с большим количеством агентов с динамическими связями (например, в моделях социальных сетей) агенты могут взаимодействовать друг с другом путем вызова методов друг у друга.
Начальное состояние и поведение агента могут быть реализованы различными способами. Состояние (накопленная история) агента может быть представлено с помощью переменных, либо состояния диаграммы состояний. Поведение может быть либо пассивным (агенты реагируют только на прибытие сообщений или на вызов методов и не имеют собственных событий, запланированных на будущее) или активным, когда внутренняя динамика агента (события, запланированные через заданные таймауты или процессы системной динамики) является причиной действий, совершаемых агентом. В последнем случае внутри агентов скорее всего должны быть заданы события и/или диаграммы состояний.
В нашей модели мы будем использовать параметры, переменные, коллекции, функции, события, списки вариантов, а также диаграммы состояний.
Создайте новую модель
- Щелкните по кнопке Создать на панели управления. Откроется диалоговое окно Новая модель.
- Задайте имя модели. Введите Maintenance в поле Имя модели.
- Укажите местоположение, где вы хотите хранить файлы модели. Используйте кнопку Выбрать..., чтобы выбрать нужную папку, или введите путь к папке в поле Местоположение.
- В качестве Единиц модельного времени выберите часы.
- Щелкните Готово.
Будет создана новая модель. AnyLogic автоматически создаст тип агента Main и простой эксперимент Simulation.
В центре рабочего пространства вы увидите графический редактор. Он отображает диаграмму типа агента Main. Рамка синего цвета задает область диаграммы, которая будет отображена в окне модели при ее запуске (а также размеры этого окна).
Слева от графического редактора вы можете видеть панель Проекты, объединенную с панелью Палитра. Панель Проекты обеспечивает доступ к моделям AnyLogic, открытым в данный момент в рабочем пространстве. Дерево элементов модели позволяет легко ориентироваться в ее структуре. Панель Палитра содержит все графические элементы, которые вы можете добавлять на диаграмму типа агента, просто перетаскивая их в графический редактор. Элементы сгруппированы в отдельные палитры.
Справа вы можете найти панель Свойства. Панель Свойства отображает и позволяет изменять свойства выбранного в данный момент элемента (группы элементов) модели. Когда вы выделяете какой-либо элемент, например, в панели Проекты или в графическом редакторе, панель Свойства отображает свойства выделенного элемента.
Вы можете открывать и закрывать конкретные панели с помощью меню Вид.
Теперь начнем разрабатывать нашу модель.
Вначале создадим одного агента - сервисный центр, затем пустую популяцию для обслуживающего транспорта, три популяции для моделирования турбин, грузовиков и вертолетов, а также тип агента, представляющего запросы на обслуживание. Далее мы сможем задать процессы внутри типов агентов - на их диаграммах.
Добавьте сервисный центр
- В панели Палитра наведите мышь на вертикальную полосу навигации (она располагается по левому краю панели), и выберите палитру Агент.
- Перетащите элемент Агент из палитры на диаграмму типа агента Main. Окно мастера Создание агентов откроется автоматически.
- Выберите опцию Единственный агент на первом шаге мастера. Нам нужно создать только один сервисный центр, который будет отправлять транспорт к турбинам по запросам на плановое обслуживание или при авариях.
- Мы не будем использовать данные из базы данных, поэтому оставьте выбранным опцию Создать новый тип агента "с нуля". Задайте Имя нового типа: MC и имя самого агента center в поле ниже. Щелкните Далее, чтобы продолжить.
- Выберите тип анимации 3D, затем фигуру анимации Ангар из секции Здания и щелкните Далее.
- Пропустите четвертый шаг по добавлению параметров, просто щелкните Далее.
- Мы хотим, чтобы все наши агенты "жили" в непрерывном пространстве, размерами 1000x600, в сети со случайным расположением агентов. Популяции агентов, которые мы позже так же добавим на диаграмму Main, будут жить в той же среде.
- Щелкните Готово.
После создания нового типа агента MC, вы можете найти его в дереве модели на том же уровне, что и тип агента Main, а сам агент center находится в ветке Main > Агенты.
Фигура анимации агента отображается как на диаграмме его типа, так и на Main. Нам необходимо изменить масштаб всей модели, а также масштаб отображения этой фигуры на анимации.
- Чтобы изменить масштаб модели, сделайте двойной щелчок мышью по типу агента Main в дереве элементов модели, чтобы открыть его диаграмму. Затем передвиньте диаграмму вниз, чтобы видеть элементы, находящиеся над осью X.
- Здесь вы найдете объект Масштаб. Выделите его, чтобы открыть его свойства.
- Установите Масштаб в режиме Задан явно, не изменяя длину линейки шкалы. В свойствах элемента, задайте Масштаб: 5 пикселей на 1 км.
Теперь давайте изменим масштаб фигуры анимации сервисного центра (ангара).
- Сделайте двойной щелчок мышью по типу агента MC в дереве элементов модели, чтобы открыть его диаграмму. Найдите и выделите линейку масштаба этого типа агента.
- Очевидно, что при выбранном масштабе фигура ангара будет отображаться на анимации модели такой крошечной, что мы не сможем ее разглядеть. Поэтому мы зададим для этого типа агента более крупный масштаб, чтобы мы могли легко увидеть его фигуру на сцене анимации нашей модели. В свойствах фигуры анимации ангара снимите флажок Автоматически изменять размер для соответствия масштабу агента.
- Переключите опцию Масштаб в режим Задан явно. Ниже, задайте масштаб: 10 пикселей в км.
- Выберите фигуру анимации сервисного центра и в свойствах задайте Доп. масштабирование: 75%.
Добавьте ветряные турбины
- Перетащите элемент Агент из палитры Агент на диаграмму типа агента Main.
- В этот раз выберите опцию Популяция агентов. Щелкните Далее на шаге 2 (по умолчанию выбрана нужная нам опция Я хочу создать новый тип агента). На следующем шаге мастера создания агентов введите имя нового типа: Turbine и тогда автоматически появится имя популяции: turbines. Щелкните Далее.
- Выберите 3D фигуру анимации Ветряная турбина из секции списка объектов Энергетика.
- Нам не нужно сейчас создавать какие-либо параметры, так что пропустите шаг 5. На шаге 6, задайте количество агентов, которые мы хотим видеть в этой популяции: 10 агентов.
- Вы можете щелкнуть Готово уже на шаге 6. Настройки шага 7, Конфигурация создаваемой среды, будут автоматически заполнены, так как мы добавляем популяцию агентов в тип агента Main, где мы уже задавали среду при создании агента сервисного центра.
- Откройте диаграмму типа агента Turbine и измените масштаб. Поскольку мы хотим, чтобы элементы нашей модели изображались на анимации чуть крупнее, и их можно было разглядеть, зададим чуть увеличенный масштаб. Пусть длина линейки соответствует 10 километрам, и масштаб будет равен 1 км = 10 пикс.
- Вы увеличили масштаб, и фигура анимации перестала отображаться на графическом редакторе. Это произошло потому, что в 3D объектах, входящих в группу, которой является эта фигура, по умолчанию выбрана опция Автоматически изменять размер для соответствия масштабу агента. Чтобы получить доступ к свойствам этих объектов, перейдите в панель Проекты и раскройте папку Презентация агента Turbine.
- В группе wind_turbine вы найдете два 3D объекта: wind_turbine_tower и wind_turbine_blades. В свойствах обоих объектов снимите флажок Автоматически изменять размер для соответствия масштабу агента и выберите в поле Доп. масштабирование: 50%.
-
Поскольку мы отключили автоматическое масштабирование, нам придется вручную настроить расположение элементов, составляющих группу wind_turbine относительно друг друга. Для этого выберите в дереве модели группу wind_blades и в поле свойств Z поместите следующее выражение:
22.25 * Scale.DEFAULT_SCALE.pixelsPerUnit(METER)
Добавьте транспорт
- Перетащите элемент Агент из палитры Агент на диаграмму типа агента Main.
- Снова выберите опцию Популяция агентов. Щелкните Далее на шаге 2 (Я хочу создать новый тип агента). На следующей странице мастера (шаг 3) введите в поле Имя нового типа: Transport, то же введите в поле Имя популяции: transport. Щелкните Далее.
- Это пустая популяция, которой не нужна анимация. Мы будем использовать этот тип агента, чтобы задать логику модели. Выберите Нет для типа анимации, пропустите шаг создания параметров, выберите опцию Я хочу добавить агентов позже, во время выполнения модели, а пока оставить популяцию пустой и щелкните Готово.
Добавьте в модель грузовики и вертолеты
- Перетащите элемент Агент из палитры Агент на диаграмму типа агента Main.
- Снова выберите опцию Популяция агентов. Щелкните Далее на шаге 2 (Я хочу создать новый тип агента). На следующей странице мастера (шаг 3) введите в поле Имя нового типа: Truck, пусть имя популяции автоматически заполнится как trucks. Щелкните Далее.
- Выберите фигуру 3D анимации Грузовик из секции Автодорожный транспорт на следующем шаге. Нам не нужно добавлять сейчас параметры в мастере. Всего в популяции будет 5 агентов, а настройки среды уже будут заполнены.
- После того, как создадите тип агента Truck, выделите Truck в дереве элементов модели и перейдите в панель Свойства. Сначала откройте секцию свойств Размеры и движение. Мы считаем, что грузовики в среднем движутся со скоростью 70 км в час.
- Откройте секцию свойств Специфические и укажите, что тип агента Truck наследуется от типа агента Transport. Для этого выберите в параметре Расширяет тип агента: Transport.
- Зададим для грузовика чуть увеличенный масштаб. Для этого в свойствах элемента масштаб на диаграмме Truck, снимите флажок Унаследовано от родительского класса. Пусть длина линейки соответствует 10 километрам, и масштаб будет равен 1 км = 10 пикс.
- Теперь тип агента Truck полностью задан. Нам необходимо добавить еще одну популяцию для вертолетов. Вернитесь на Main и снова перетащите элемент Агент из палитры Агент и выберите Популяция агентов на первом шаге.
- Введите имя нового типа Helicopter, оставьте имя популяции helicopters. Вы можете найти фигуру 3D анимации Вертолет в секции Военного назначения. Мы хотим использовать 2 вертолета для обслуживания турбин. Эта популяция живет в той же среде, что и все остальные.
- Helicopter также Расширяет тип агента: Transport. Мы предполагаем, что вертолеты движутся со скоростью, равной 200 км в час.
- Зададим для вертолета масштаб 1 км = 5 пикселей (так же, как и чуть ранее, запретив наследование масштаба от родительского класса).
Добавьте запросы на обслуживание
- Перетащите элемент Агент из палитры Агент на диаграмму типа агента Main.
- Выберите опцию Просто создать тип агента. Нам нужен тип агента, чтобы задать логику модели специальными параметрами, которые мы создадим на его диаграмме.
- Введите имя типа ServiceRequest в соответствующем поле и щелкните Далее. Выберите Нет для типа анимации и перейдите на следующий шаг.
- На шаге 4 мы создадим в мастере параметр, а также список вариантов. Список вариантов - это элемент, который позволяет задавать параметры агента, которые имеют ограниченный выбор вариантов. В нашем случае, нам необходимо различать грузовики и вертолеты в общем транспортном парке. Назовите параметр type и выберите его Тип: Список вариантов. Так как в этой модели мы еще не создавали списков вариантов, по умолчанию мастер предложит вам Создать новый список вариантов: введите имя TransportType. Добавьте варианты в таблицу, по одному в каждой строке: AUTO, AVIA.
- Щелкните Готово. Список вариантов не имеет отдельного значка, который можно выбрать щелчком в графическом редакторе. Вы можете найти секцию Список вариантов в дереве модели:
- После того, как вы щелкните Готово, AnyLogic откроет диаграмму типа агента ServiceRequest. Здесь вы можете увидеть параметр type, который мы создали в мастере.
- Добавьте еще один Параметр из палитры Агент. Назовите его turbine и выберите его Тип из выпадающего списка: Turbine. Теперь тип агента ServiceRequest полностью задан.
Все агенты появятся на диаграмме Main. Вы можете заметить, что популяции отмечены символами [..]. Переместите агентов за рамку окна презентации, а центры всех фигур анимации поместите в начало координат.
Вы можете найти настройки среды в секции Пространство и сеть свойств типа агента Main:
Запустите модель
- Постройте свой проект, щелкнув кнопку Построить модель на панели управления. Если в модели есть какие-либо ошибки, то построение будет неудачным, и вы увидите панель Ошибки, в которой будут перечислены все ошибки в модели. Вы можете открыть место ошибки двойным щелчком по ее описанию в списке, чтобы исправить ее. После того, как модель будет успешно построена, вы можете запустить ее. Запуская эксперимент, вы автоматически обновляете модель.
- Выберите эксперимент, который хотите запустить, открыв выпадающий список рядом с кнопкой запуска модели Запуск на панели управления. Ваш эксперимент называется Maintenance/Simulation. Потом вы сможете запускать этот эксперимент, просто щелкая кнопку Запуск , поскольку она будет запускать последний запущенный эксперимент.
- Запустив модель, вы автоматически начнете ее выполнение и увидите окно презентации. На ней отображается презентация агента верхнего уровня модели. Мы только начали разрабатывать модель. В данный момент мы можем видеть сервисный центр, турбины и разные типы транспорта, случайно расположенные в непрерывном пространстве.
Далее давайте зададим местоположение транспорта, грузовиков и вертолетов в сервисном центре.
-
Как мы можем улучшить эту статью?
-