Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Моделирование передвижения людейСодержание книги
Поиск на нашем сайте В модели на данный момент люди неподвижно находятся в определенных местах. Чтобы сделать модель более реалистичной, смоделируем передвижение людей по рассматриваемой области. 1) Откройте структурную диаграмму класса Person. 2) Создайте вспомогательные переменные oldx и oldy типа double. Для обеих переменных задайте Начальное значение uniform(300). Создайте переменную tmoved типа double. Задайте Начальное значение -10. 3) Создайте новое Событие. Назовите его moveTimer. Событие должно быть циклическим. Задайте Таймаут uniform(5,10). Задайте Действие при срабатывании таймера: oldx=person.x; oldy=person.y; tmoved=time(); person.x=triangular(0,150,300); person.y=triangular(0,150,300); При срабатывании таймера текущее модельное время, возвращаемое функцией time (), запоминается переменной tmoved. Переменные oldx и oldy запоминают текущие координаты агента x и y. Новые координаты генерируются по треугольному закону распределения с минимальным значением, равным 0, средним – 150 и максимальным – 300. 4) Создайте две алгоритмические функции, которые помогут более плавно рисовать движение людей на анимации. Для этого перетащите соответствующий элемент с палитры Основные на структурную диаграмму. Назовите функцию animationX. Задайте Тело функции: if (time() > tmoved+0.5) return person.x; return oldx + (person.x-oldx)*(time()-tmoved)/0.5; Аналогично создайте алгоритмическую функцию animationY: if (time() > tmoved+0.5) return person.y; return oldy + (person.y-oldy)*(time()-tmoved)/0.5; 5) Откройте свойство Person (рис. 27) и на вкладке Агент укажите: animationX(); animationY();
Рисунок 27 6) Запустите модель и проследите за перемещением людей с помощью анимации. В созданной модели число людей, проживающих в изучаемой нами области, является постоянным. На самом деле всегда происходит миграция людей – они переезжают из одной области в другую, и это тоже необходимо учесть в модели. Смоделируем миграцию людей с помощью таймеров. 7) Откройте структурную диаграмму класса Main и создайте новое Событие. Назовите его inMigration. Событие должно быть циклическим. Задайте Таймаут exponential(20). В среднем в нашу область будут приезжать 20 человек в год (в качестве аргумента функции exponential() задается частота происхождения события). Задайте Действие add_people();. 8) Для моделирования того, как люди уезжают из области, создайте еще одно событие. Откройте структурную диаграмму класса Person и создайте новое Событие. Назовите его outMigration. Событие должно срабатывать только один раз, поэтому установите флажок Срабатывает один раз. Задайте Таймаут exponential(0.02). Задайте Действие: get_Main().remove_people(this); if (isAdopter) get_Main().adopters--; else get_Main().potadopters--; 9) Добавьте на анимацию метку, отображающую число жителей области. Для этого в области просмотра анимации добавьте текстовую метку, отображающую следующий текст: people.size()+” people”. 10) Запустите модель и изучите ее поведение. Окно просмотра анимации показано на рис. 28.
Рисунок 28 Контрольные вопросы 1. Каким образом описываются агенты в среде AnyLogic? 2. Как происходит взаимодействие агентов со средой в системе AnyLogic? 3. Как происходит взаимодействие агентов с другими агентами в системе AnyLogic? 4. В каких случаях нужно строить агентные модели? 5. Какими средствами строится интерфейс агентов в системе AnyLogic? Практическая работа №8 Тема: Разработка многоагентной модели в AnyLogic Цель: - изучить методологию агентного моделирования. Приобрести практические навыки работы c системой AnyLogic при построении агентных моделей. Вид работы: фронтальный Время выполнения: 2 часа Ход работы Задание 1. Создание различных типов агентов Под агентом в агентном моделировании понимается элемент модели, который может иметь поведение, память (историю), контакты и т.д. Агенты могут моделировать людей, компании, проекты, автомобили, города, животных, корабли, товары и т.д. Вы можете создавать внутри агента переменные, диаграммы состояний, задавать события, потоковые диаграммы системной динамики, а также добавлять внутрь агента объекты библиотек AnyLogic. Вы можете создать в одной модели столько типов агентов, сколько разных типов агентов Вам нужно промоделировать. Создание агента обычно начинается с определения его интерфейса для связи с внешним миром. В случае систем с большим количеством агентов с динамическими связями (например, в моделях социальных сетей) агенты могут взаимодействовать друг с другом путем вызова методов друг у друга. Начальное состояние и поведение агента могут быть реализованы различными способами. Состояние (накопленная история) агента может быть представлено с помощью переменных, либо состояния диаграммы состояний. Поведение может быть либо пассивным (агенты реагируют только на прибытие сообщений или на вызов методов и не имеют собственных событий, запланированных на будущее) или активным, когда внутренняя динамика агента (события, запланированные через заданные таймауты или процессы системной динамики) является причиной действий, совершаемых агентом. В последнем случае внутри агентов, скорее всего должны быть заданы события и/или диаграммы состояний. В нашей модели мы будем использовать параметры, переменные, коллекции, функции, события, списки вариантов, а также диаграммы действий и диаграммы состояний. Создание модели
1. Щелкните по кнопке Создать 2. Задайте имя модели. Введите Maintenance в поле Имя модели.
3. Укажите местоположение, где Вы хотите хранить файлы модели. Используйте кнопку Выбрать..., чтобы выбрать нужную папку, или введите путь к папке в поле Местоположение. 4. В качестве Единиц модельного времени выберите часы. 5. Щелкните Готово. Будет создана новая модель. AnyLogic автоматически создаст тип агента В центре рабочего пространства Вы увидите графический редактор. Он отображает диаграмму типа агента
Слева от графического редактора Вы можете видеть панель Проекты, объединенную с панелью Палитра. Панель Проекты обеспечивает доступ к моделям AnyLogic, открытым в данный момент в рабочем пространстве. Дерево элементов модели позволяет легко ориентироваться в ее структуре. Панель Палитра содержит все графические элементы, которые Вы можете добавлять на диаграмму типа агента, просто перетаскивая их в графический редактор. Элементы сгруппированы в отдельные палитры. Справа Вы можете найти панель Свойства. Панель Свойства отображает и позволяет изменять свойства выбранного в данный момент элемента (группы элементов) модели. Когда Вы выделяете какой-либо элемент, например, в панели Проекты или в графическом редакторе, панель Свойства отображает свойства выделенного элемента. Вы можете открывать и закрывать конкретные панели с помощью меню Вид. Теперь начнем разрабатывать нашу модель. Создание агентов Вначале, создадим одного агента - сервисный центр, затем пустую популяцию для обслуживающего транспорта, три популяции для моделирования турбин, грузовиков и вертолетов, а также тип агента, представляющего запросы на обслуживание. Далее мы сможем задать процессы внутри типов агентов - на их диаграммах.
1. В панели Палитра, наведите мышь на вертикальную полосу навигации и выберите палитру Агент.
2. Перетащите элемент Агент
3. Выберите опцию Единственный агент на первом шаге мастера. Нам нужно создать только один сервисный центр, который будет отправлять транспорт к турбинам по запросам на плановое обслуживание или при авариях.
4. Мы не будем использовать данные из базы данных, поэтому оставьте выбранным опцию Создать новый тип агента «с нуля». Задайте Имя нового типа: MC и имя самого агента center в поле ниже. Щелкните Далее, чтобы продолжить.
5. Выберите тип анимации 3D, затем фигуру анимации Ангар из секции Здания и щелкните Далее.
6. Пропустите четвертый шаг по добавлению параметров, просто щелкните Далее. 7. Мы хотим, чтобы все наши агенты «жили» в непрерывном пространстве, размерами 1000x600, в сети со случайным расположением агентов. Популяции агентов, которые мы позже так же добавим на диаграмму
8. Щелкните Готово. После создания нового типа агента
Фигура анимации агента отображается как на диаграмме его типа, так и на 1. Сделайте двойной щелчок мышью по типу агента 2. Здесь Вы найдете объект Масштаб. Выделите его, чтобы открыть его свойства. 3. Установите Масштаб: Задан явно. Затем задайте сам масштаб в поле ниже: 4 пикселя в метре.
1. Перетащите элемент Агент 2. В этот раз выберите опцию Популяция агентов. Щелкните Далее на шаге 2 (по умолчанию выбрана нужная нам опция Я хочу создать новый тип агента). На следующем шаге мастера создания агентов введите имя нового типа: Turbine и тогда автоматически появится имя популяции: turbines. Щелкните Далее.
3. Выберите 3D фигуру анимации Ветряная турбина из секции списка объектов Энергетика.
4. Нам не нужно сейчас создавать какие-либо параметры, так что пропустисте шаг 5. На шаге 6, задайте количество агентов, которые мы хотим видеть в этой популяции: 10 агентов.
5. Вы можете щелкнуть Готово уже на шаге 6. Настойки шага 7, Конфигурация создаваемой среды, будут автоматически заполнены, так как мы добавляем популяцию агентов в тип агента 6. Откройте диаграмму типа агента Turbine, которого мы сейчас создали, и так же измените Масштаб (1 м = 4 пикс.), как мы делали ранее для агента MC.
1. Перетащите элемент Агент 2. Снова выберите опцию Популяция агентов. Щелкните Далее на шаге 2 (Я хочу создать новый тип агента). На следующей странице мастера (шаг 3) введите в поле Имя нового типа: Transport, то же введите в поле Имя популяции: transport. Щелкните Далее. 3. Это пустая популяция, которой не нужна анимация. Мы будем использовать этот тип агента, чтобы задать логику модели.Выберите Нет для типа анимации, пропустите шаг создания параметров, выберите опцию Я хочу добавить агентов позже, во время выполнения модели, а пока оставить популяцию пустой и щелкните Готово. 4. Когда тип агента будет создан, измените его Масштаб на 4 пикселя в одном метре.
1. Перетащите элемент Агент 2. Снова выберите опцию Популяция агентов. Щелкните Далее на шаге 2 (Я хочу создать новый тип агента). На следующей странице мастера (шаг 3) введите в поле Имя нового типа: Truck, пусть имя популяции автоматически заполнится как trucks. Щелкните Далее. 3. Выберите фигуру 3D анимации Грузовик из секции Автодорожный транспорт на следующем шаге. Нам не нужно добавлять сейчас параметры в мастере. Всего в популяции будет 5 агентов, а настройки среды уже будут заполнены. 4. После того, как создадите тип агента
5. Откройте секцию свойств Специфические и задайте типу агента
6. Теперь тип агента 7. Введите имя нового типа Helicopter, оставьте имя популяции helicopters. Вы можете найти фигуру 3D анимации Вертолет в секции Военного назначения. Мы хотим использовать 2 вертолета для обслуживания турбин. Эта популяция живет в той же среде, что и все остальные. 8. 9. Мы не будем менять масштаб агентов Truck и Helicopter. Вы можете проверить объект Масштаб этих агентов: его свойства тоже наследуются от типа агента Transport.
1. Перетащите элемент Агент 2. Выберите опцию Просто создать тип агента. Нам нужен тип агента, чтобы задать логику модели специальными параметрами, которые мы создадим на его диаграмме.
3. Введите имя типа ServiceRequest в соответствующем поле и щелкните Далее. Выберите Нет для типа анимации и перейдите на следующий шаг. 4. На шаге 4 мы создадим в мастере параметр, а также список вариантов.
5. Щелкните Готово. Список вариантов не имеет отдельного значка, который можно выбрать щелчком в графическом редакторе. Вы можете найти секцию Список вариантов в дереве модели:
6. После того, как Вы щелкните Готово, AnyLogic откроет диаграмму типа агента
Все агенты появятся на диаграмме
Вы можете найти настройки среды в секции Пространство и сеть свойств типа агента
Последнее, что нам необходимо сделать на этом шаге разработки модели: задать масштаб типа агента Main:
1. Постройте свой проект, щелкнув кнопку Построить Модель 2. Выберите эксперимент, который хотите запустить, открыв выпадающий список рядом с кнопкой запуска модели Запуск 3. Запустив модель, Вы увидите окно презентации. На ней отображается презентация, созданная для этого эксперимента. AnyLogic автоматически создает заголовок и кнопку запуска модели. 4. Щелкните кнопку Запустить.
5. Мы только начали разрабатывать модель. В данный момент мы можем видеть сервисный центр, турбины и разные типы транспорта, случайно расположенные в непрерывном пространстве.
Далее давайте зададим местоположение транспорта, грузовиков и вертолетов, в сервисном центре. Задание 2. Задание транспортной базы Разрабатывая дальше модель, мы будем задавать логику и процессы модели на диаграммах каждого агента в отдельности. Начнем с конфигурации типа агента Сложное имитационное моделирование не может существовать без возможности задания алгоритмов, обычно выполняющих определенную обработку данных или вычисления. AnyLogic поддерживает диаграммы действий - структурированные блок-схемы, позволяющие задавать алгоритмы графически в стиле структурированного программирования. Мы используем широко известное расширение подхода, предложенного в свое время Дейкстра. Суть подхода состоит в том, что алгоритмы разбиваются в подразделы с одной точкой входа. Утверждается, что трех способов объединения программ — упорядочения, повторения и выбора — достаточно для задания алгоритма любой сложности. Такой стиль сводит понимание целого алгоритма к пониманию составляющих его частностей. Диаграммы действий облегчают задание алгоритмов, делая необязательным знание синтаксиса Java операторов. По сути диаграммы действий используются для визуального задания функций, и Вы можете использовать для этого обычные функции. Но использование диаграмм действий дает еще одно преимущество: с их помощью Вы можете визуализировать алгоритмы, делая их более понятными для других пользователей модели.
1. Перейдите на диаграмму 2. Перетащите элемент Диаграмма действий
3. Назовите диаграмму setTransportBase. Эта диаграмма действий ничего не возвращает, то есть, ее тип - Действие. Далее, добавьте в диаграмму элемент Цикл For
4. Этот цикл for является Итератором по коллекции, где Коллекция - helicopters. Определите Элемент как Helicopter h.
5. Далее, вставьте элемент Код
6. Мы хотим, чтобы вертолеты изначально находились в сервисном центре, то есть, имели те же координаты, что и он:
7. Добавьте еще один блок, состоящий из Цикла For 8. Вы можете изменить размер блоков диаграммы действий, чтобы содержащийся в них код был полностью виден:
Итак, мы создали диаграмму действий под названием setTransportBase, которая представляет функцию, размещающую транспортные средства в сервисном центре. Там мы хотим разместить транспорт при старте модели. Выделите
Снова запустите модель. Вы увидите, что теперь турбины распределены случайно, а транспортные средства находятся «в ангаре». Мы зададим движение транспорта и поведение других агентов в следующих шагах нашего учебного пособия.
Задание 3. Настройка логических процессов транспорта На этом этапе мы зададим начальную конфигурацию типа агента Если у агента можно выделить несколько состояний, выполняющих различные действия при происхождении каких-то событий, или если у агента есть несколько качественно различных поведений, последовательно сменяющих друг друга при происхождении определенных событий, то поведение такого объекта может быть описано в терминах диаграммы состояний. Диаграмма состояний позволяет графически задать пространство состояний алгоритма поведения объекта, а также события, которые являются причинами срабатывания переходов из одних состояний в другие, и действия, происходящие при смене состояний. С помощью диаграмм состояний можно графически задать дискретные поведения объектов любой сложности, куда более разнообразные, чем элементарные состояния свободен/занят (idle/busy), открыт/закрыт (open/closed), исправен/неисправен (up/down) и т.п., предлагаемые большинством блочных инструментов моделирования. Диаграмма состояний представляет собой состояния, соединенные переходами. Переходы могут сработать в результате заданного в качестве условия перехода события - это может быть истечение заданного таймаута, получение диаграммой состояний сообщения, выполнение заданного логического условия и т.д. Срабатывание перехода приводит к переходу управления диаграммы состояний в то состояние, в которое ведет этот переход. Состояния могут быть иерархическими, т.e. содержать другие состояния и переходы.
1. Перейдите в панель Проекты и откройте двойным щелчком тип агента 2. Как Вы помните, мы хотим использовать два вида транспорта: грузовики и вертолеты, для обслуживания турбин. Мы используем переменную type, чтобы различать эти два вида транспорта. Переменная type должна быть типа TransportType, чтобы мы могли использовать варианты AUTO и AVIA. 3. Переменная request является переменной типа ServiceRequest:
1. Мы используем элементы палитры Диаграмма состояний, чтобы задать поведение этого типа агента. Перетащите элемент Начало диаграммысостояний
2. На этом шаге мы создадим «пустую» диаграмму состояний, которая состоит из четырех состояний и трех переходов разных типов. 3. Состояния называются AtCenter (в сервисном центре), MovingToMC (движение к сервисному центру), Servicing (обслуживание турбины), MovingToTurbine (движение к турбине). Это, собственно, все действия и передвижения грузовиков и вертолетов в нашей модели. Пожалуйста, следуйте структуре диаграммы, представленной на рисунке ниже.
4. Внутренние настройки и условия некоторых состояний и переходов ссылаются на элементы модели, которые мы еще не создали. С другой стороны, нам необходима эта диаграмма, поскольку на нее ссылаются некоторые из тех элементов, которые мы зададим позднее. Поэтому сейчас мы продолжим разрабатывать другие типы агентов и закончим логику типа Задание 4. Настройка поведения сервисного центра Мы создадим диаграмму действий, с помощью которой сервисный центр определяет, какой тип транспорта необходимо отправить на обслуживание, грузовик или вертолет, и проверяет, есть ли свободное транспортное средство в сервисном центре.
Агент может содержать переменные. Переменные обычно используются для моделирования изменяющихся характеристик объекта или для хранения результатов работы модели. AnyLogic поддерживает два типа переменных – простые переменные и коллекции. Коллекция представляет собой группу объектов, известных как ее элементы. Некоторые коллекции позволяют хранение нескольких одинаковых элементов, некоторые - нет. Некоторые коллекции упорядочены, некоторые - нет. Коллекция используется для задания объекта данных, объединяющего в себе сразу несколько однотипных элементов. С помощью коллекций Вы можете хранить, извлекать и управлять агрегированными данными. Обычно коллекции представляют элементы данных, которые образуют группу, например, очередь (в этом случае элементы представляют собой людей, ожидающих в очереди) или автопарк (элементы задают автомобили), или телефонный справочник (коллекция хранит соответствие имен и телефонных номеров). 1. Откройте диаграмму 2. Коллекции называются aviaRequests и autoRequests и обе имеют Класс коллекции LinkedList и Тип элементов ServiceRequest.
1. Откройте диаграмму 2. Вначале перетащите элемент Диаграмма действий
3. Назовите диаграмму findTransport. Эта диаграмма действий Возвращает значение, и Типом возвращаемого значения является Transport. Аргументы диаграммы действий задаются ниже в таблице Аргументы: аргумент request Типа ServiceRequest:
4. Далее, вставьте элемент Цикл For
5. Тип этого цикла for: Итератор по коллекции. Укажите поля Элемент и Коллекция как показано на рисунке ниже: необходимость в грузовике или вертолете определяется типом запроса на обслуживание. Вы можете изменить размер элемента для лучшего отображения содержимого.
6. Нам необходимо добавить Решение (If... Else)
7. Вставьте элемент Вернуть значение
8. Эта диаграмма действий будет проверять, есть ли в наличии в сервисном центре запрашиваемый вид транспорта: грузовик или вертолет. В AnyLogic иногда Вам необходимо вводить код в параметрах различных элементов модели. Важно понимать, где именно Вы «находитесь», вписывая код (какому типу агента принадлежит этот элемент), и как получить доступ к другим элементам из этого поля. Элементы модели, принадлежащие тому же типу агента, доступны просто по именам. Чтобы получить доступ к полю вложенного объекта, Вы должны поставить точку «.» после имени объекта и затем написать имя этого поля. Например, мы ссылались на функцию getX() сервисного центра Чтобы получить доступ к «равному по иерархии» агенту (который вложен в тот же контейнер, что и текущий агент), нужно вначале перейти на уровень выше к агенту верхнего уровня, а затем спуститься по иерархии модели вниз, к нужному вложенному агенту. Чтобы получить доступ к контейнеру текущего объекта (того агента, куда вложен текущий), укажите его имя. Обратите внимание на специальный элемент,
Задание 5. Настройка поведения турбин На этом этапе мы зададим поведение турбин с помощью диаграммы состояний: когда и как турби
|
||
|
Последнее изменение этой страницы: 2021-05-12; просмотров: 233; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.156 (0.012 с.) |