Моделирование систем. Практикум_AnyLogic_8_zo3. Практикум Моделирование систем в среде AnyLogic 8
Скачать 474.5 Kb.
|
Практикум «Моделирование систем в среде AnyLogic 8» Заочное отделение Часть 3 МОСКОВСКИЙ АВТОМОБИЛЬНО-ДОРОЖНЫЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ(МАДИ) ©Мезенцев К.Н Доцент кафедры автоматизированных систем управления Москва 2022 3. Мультиагентное моделирование Требуется построить динамическую модель реализации продукции, используя технологию агентного моделирования. Создайте новую модель ModelAgBuy. При создании модели единицы модельного времени задайте как дни. 3.1. Популяция агентов Далее следует создать популяцию агентов внутри корневого агента Main. Для этого нужно открыть вкладку «Агент» и использовать инструмент «Агент». С помощью мыши экземпляр агента перетаскивается в поле корневого агента. Будет открыт диалог для создания популяции агентов. Нужно выбрать «Популяцию агентов» (рисунок 3.1.) Рис. 3.1. Популяция агентов Затем нужно указать, что создается новый агент популяции. Агенту нужно задать имя Peoples (рисунок 3.2). Название популяции формируется автоматически. Рис. 3.2. Выбор типа агента Затем нужно нажать кнопку «Далее». На третьем шаге выбирем пиктограмму агента популяции (рисунок 3.3). Для нашей популяции выберем 3D фигуру «Человек». Рис. 3.3. Выбор фигуры агента Что бы завершить создание популяции нужно нажать кнопку «Готово». В результате в поле агента Main будет создана популяция агентов ( рисунок 3.4). Рис. 3.4. Популяция агентов Выберите агента Peoples на дереве объектов проекта модели. В презентации агента его нельзя сдвигать с его оси симметрии (рисунок 3.5). Задайте агенту коэффициент масштабирования равный 125% в режиме автоматического масштабирования (рисунок 3.6). Рис. 3.5. Оси симметрии агента Рис. 3.6. Масштаб агента При построении мультиагентых моделей следует также настроить параметры среды обитания агентов. Для нашей модели средой обитания является агент Main. Откройте поле презентации агента, найдите секцию свойств агента «Пространство и сеть». Укажите параметры среды (рисунок 3.7) : Ширина и высота 500 на 500 единиц. Тип расположения «Пружинящая масса». Тип сети «Случайное». Рис. 3.7. Задание свойств пространства агентов Далее следует определить численность популяции. Выделите в поле агента Main пиктограмму популяции и задайте параметр «Начальное количество агентов» равным 30 (рисунок 3.8). Рис. 3.8. Популяция агентов 3.2. Просмотр созданной популяции Для корректного вывода популяции агентов при работе модели следует выделить в поле агента Main пиктограмму агента Peoples, выбрать секцию свойств агента «Специфические» и указать режим вывода агентов «Рисовать со сдвигом от данной точки» (рисунок 3.9). Рис. 3.9. Настройка визуализации агентов Далее следует в проекте модели выбрать эксперимент Simulation и настроить его так, чтобы генератор случайных чисел при каждом запуске модели формировал различные последовательности случайных чисел, это необходимо для случайного расположения агентов в популяции. Настройка выполняется с помощью секции параметров «Случайность», нужно вы режим «уникальные прогоны», рисунок 3.10. Рис. 3.10. Настройка эксперимента. Так как агенты популяции представлены 3D фигурами, то для просмотра в трехмерном пространстве агентов нужно разместить в презентацию агента Main 3D окно. Инструмент создания окна находится в палитре «Презентация», секция «3D». Окно размещают обычно за границами видимой области агента в нижней части (рисунок 3.11). Рис. 3.11. Окно 3D представления Рис. 3.12. Популяция анентов, 2D вид Сохраните модель и выполните запуск модели. Вид агентного пространства показан рисунке 3.12. Рис. 3.13. Выбор 3D окна При правильной настройке эксперимента модели конфигурация будет меняться для разных экспериментов. Для трехмерного просмотра среды обитания агентов нужно открыть 3D вид с помощью навигатора (рисунок 3.13,14). Рис. 3.14. Фрагмент популяция агентов, 3D вид 3.3. Гетерогенная популяция Созданная популяция агентов гомогенная, создадим гетерогенную популяцию, состоящую из мужчин и женщин. Соотношение мужчин и женщин в популяции случайное, и подчиняется равномерному закону распределения. Откройте презентацию агента Peoples. Разместите на пиктограмму агента женскую пиктограмму «Женщина 1» из палитры 3D объекты, секция «Люди» (рисунок 3.15). Задайте фигуре масштаб 125%. Рис. 3.15. Варианты пиктограмм В результате агент получит две пиктограммы для визуализации person и woman1_1 (рисунок 3.16) Рис. 3.16. Пиктограммы агента Что бы управлять визуализацией агента пиктограммы следует объединить в коллекцию. Для этого их следует выделить на дереве проекта, вызвать контекстное меню и выполнить команду «Создать коллекцию». Коллекции присвоить имя collecPeoples (рисунок 3.17).
Рис. 3.17. Коллекция пиктограмм агента Затем в состав агента нужно добавить функцию funChangeAvatar. Аргументом функции является параметр idx целого типа, значение которого определяет пол агента. Мужской пол код 1, женский код 0. В зависимости от кода скрывается или отображается соответствующая пиктограмма агента. Вид презентации агента и код функции показаны на рисунке 3.18.
Рис. 3.18. Функция смены пиктограммы агента Для смены пиктограммы агента в соответствии с половой принадлежностью нужно в секцию свойств агента «Действия при запуске» поместить код случайной генерации пола с помощью функции равномерного распределения uniform: int idx = (int)uniform(0,2); funChangeAvatar(idx); Сохраните модель, выполните тестирование модели (рисунок 3.19). Рис. 3.19. Гетерогенная популяция агентов, фрагмент 3.4. Поведение агентов Поведение агента определяется его конечным автоматом – стейтчартом. На дереве проекта выберите агента Peoples. Постройте конечный автомат, так как это показано на рисунке 3.20. Рис. 3.20. Автомат поведения агента Стейтчарт агента состоит из двух состояний: PotentialAdopter – состояние потенциального покупателя товара; Adopter – состояние покупки товара. Цвет заливки состояния PotentialAdopter – синий, а состояния Adoter – красный. Введите параметр агента adEffectiveness – интенсивность совершения покупок агентом под действием рекламы, переход Ad. Параметр задается равным 0,01 покупок в день. Что бы показать состояние агента в процессе совершения покупок разместите в презентацию агент Peoples фигуру круг. Фигуры разместите с помощью инструмента «Овал» палитры «Презентация». Фигуру нужно расположить вместе с фигурами пиктограмм агента на его оси симметрии на заднем плане (рисунок 3.21). Рис. 3.21. Размещение фигуры. Задайте фигуре имя agState, а в секции свойств «Местоположение и размер» задайте значение «Z-Высота» равным нулю. Фигура – индикатор состояния агента в популяции. Введите код для стейтчарта. Действие при входе для состояния PotentialAdopter: agState.setFillColor(blue); Потенциальным потребителям будет соответствовать синий цвет. Действие при входе для состояния Adopter: agState.setFillColor(red); Потребителям товара будет соответствовать красный цвет. Протестируйте работу модели (рисунки 3.22, 23). Рис. 3.22. Покупка товара, 2D вид Рис. 3.23. Покупка товара 3D вид, фрагмент Далее следует добавить в популяцию агентов peopleses функции для вычисления статистических показателей. В поле агента Main выберите популяцию peopleses и введите статистические функции для вычисления число потенциальных потребителей и числа потребителей товара (рисунок 3.24). Рис. 3.24. Статистические функции Описание созданных статистических функций приводится в таблице 1. Таблица 1 Функции сбора статистики
Подсчет количества выполняется при входе в активности соответствующего состояния объекта statechart методом: public boolean inState(short state) Где: item – указатель на текущий реплицированный объект, который используется при подсчете AnyLogic статистического показателя. Рис. 3.25. Временной график модели; Потенц. потр. – число потенциальных потребителей товара; Потребители – число потребителей товара; Разместите в поле корневого объекта временной график для вывода статистических показателей (рисунок 3.25). Масштаб графика – временной диапазон один год. Единица измерения обновления данных дни. Период обновления один день, отображать 365 дней. Настройте эксперимент модели так, что бы остановка произошла при достижении значения равного 365 дней. Вид графика, после запуска модели показан на рисунке 3.26. Рис. 3.26. Продажа под действием рекламы 3.5. Учет влияния общения между потребителями Требуется учесть в модели продаж влияния общения между потребителями продукта на покупку товара. Откройте агент Peoples и измените его стейтчарт в соответствии с рисунком 3.27. Рис. 3.27. Учет общения потребителей Для учета общения потребителей нужно добавить в модель два параметра contactRate=5 (интенсивность контактов), adoptionFraction=0.01 (вероятность покупки потенциальными потребителями продукта). Переход Contact моделирует общение потребителей. Он происходит с интенсивностью равной contactRate. При этом должно формироваться сообщение о желании купить продукт. Такое действие моделируется с помощью оператора AnyLogic sendToRandom("buy"); Единица измерения интенсивности срабатывания перехода – дни. Выполнение перехода WOM моделирует покупка товара потенциальным покупателем, он происходит при получении сообщения "buy" символьного типа String. Что бы моделировать случайный характер покупок введем дополнительное условие по параметру adoptionFraction, используя функцию randomTrue(adoptionFraction). Функция возвращает значение true с заданной вероятностью adoptionFraction. Рис. 3.28. Учет общения потребителей Протестируйте модель. график динамических процессов должен соответствовать рисунку 3.28. 3.6. Учет повторных покупок агентами Дополните модель покупок, таким образом, чтобы в ней учитывались повторные покупки товара по истечению контрольного срока его службы discardTime=2 (месяца). В рамках модели поведения агентов, повторная покупка это переход потребителя в разряд потенциальных покупателей c интенсивностью discardTime. Вид динамических процессов должен соответствовать рисунку 3.29 Рис. 3.29. Динамика процессов с учетом повторных покупок 3.7. Статистический анализ популяции Проведем статистический анализ клиентов в процессе совершения покупок. Определим следующие показатели популяции: Общее число в популяции мужчин и женщин. Покупатели: число мужчин и женщин. Потенциальные потребители: число мужчин и женщин. Результаты представим в виде столбиковых диаграмм. Изменим структуру агента Peoples. Включите в структуру агента две переменные: vPol – переменная целого типа, признак пола; flagAdopter – логическая переменная, состояние агента. Тогда код действий агента при запуске изменится: vPol = (int)uniform(0,2); funChangeAvatar(vPol); Переменная flagAdopter получает значение true когда агент оказывается в состоянии Adopter и получает значение false когда агент оказывается в состоянии PotentialAdopter. Разместите в неотображаемой области презентации агента три столбиковых диаграммы из палитры статистика (рисунок 3.30). Диаграммы поместите в область просмотра с помощью инструмента палитры «Презентация». Задайте заголовок области просмотра как «Статистика». Рис. 3.30. Диаграммы области просмотра статистики Время первого обновления и период обновления диаграмм равен одному дню. Для настройки цвета фона используется секция свойств «Область диаграммы», настройка расположения обозначений столбцов выполняется с помощью секции «Легенда». Что бы проанализировать состав популяции применим статистическую функцию count, функция возвращает число агентов, отвечающих заданному условию: count(agents,iterator -> expr) Где: agents – популяция агентов; Iterator – указатель на агента; expr – логическое выражения для отбора агентов Тогда данные гистограмм примут вид. Женщины и мужчины: count(peopleses,p -> p.vPol==0) count(peopleses,p -> p.vPol==1) Покупатели, женщины и мужчины: count(peopleses,p -> (p.vPol==0 && p.flagAdopter)) count(peopleses,p -> (p.vPol==1 && p.flagAdopter)) Данные для потенциальных покупателей задайте самостоятельно. Выполните тестирование модели, вид диаграмм в процессе работы моделей показан на рисунке 3.31. Для перехода на область просмотра статистики используйте пункт меню навигатора.
Рис. 3.31. Статистика покупателей |