отчет. Отчет. Построение имитационное модели распространения нового продукта на рынке
Скачать 4.62 Mb.
|
Министерство науки и высшего образования Российской Федерации Санкт-Петербургский горный университет Дир. НЦ ____________ ____________________________ (звание, Ф.И.О) “__” ___________ 20__ г. КВАЛИФИКАЦИОННАЯ РАБОТАпо итогам освоения программы ДПК «Имитационное моделирование средствами AnyLogic. Базовый курс» наименование программы на тему: «Построение имитационное модели распространения нового продукта на рынке» Автор: студент гр. _______ ____________________ /Ревякина А.И. / (шифр) (подпись) (Ф.И.О.) Руководитель _______________ ______________ /Л.А. Николайчук / (должность) (подпись) (Ф.И.О.) Санкт-Петербург 2023 Министерство науки и высшего образования Российской Федерации Санкт-Петербургский горный университет Дир. НЦ ____________ ____________________________ (звание, Ф.И.О) “__” ___________ 20__ г. ЗАДАНИЕна выполнение квалификационной работыпо итогам освоения программы ДПК «Имитационное моделирование средствами AnyLogic. Базовый курс» наименование программы на тему: «Построение имитационное модели распространения нового продукта на рынке» Срок сдачи студентом квалификационной работы: 20.05.2023 Исходные данные к выполнению квалификационной работы: алгоритм построение имитационной модели, финансовая и бухгалтерская отчетность публичных акционерных обществ, открытое программное обеспечение AnyLogic: PersonalLearningEdition. Содержание пояснительной записки квалификационной работы (перечень подлежащих разработке вопросов): составление краткого описания, состоящего из цели моделирования, подхода и факторов, перечень формул, применяемых в диффузии по Бассу, построение и описание структурных элементов имитационной модели. Руководитель _______________ ______________ /Л.А. Николайчук / (должность) (подпись) (Ф.И.О.) Задание принял к исполнению: студент гр.ГТС-19 ____________ /Ревякина А.И. / (шифр) (подпись) (Ф.И.О.) Дата выдачи задания: 03.04.2023 ОглавлениеКВАЛИФИКАЦИОННАЯ РАБОТА 1 наименование программы 1 2023 1 Министерство науки и высшего образования Российской Федерации 2 ЗАДАНИЕ 2 на выполнение квалификационной работы 2 наименование программы 2 Введение 4 Глава 1 5 Глава 2 7 Заключение 25 Список литературы 26 ВведениеМоделирование — это процесс изучения реального объекта путем построения и исследования его модели, которая отображает только те элементы реального мира, которые исследуются, то есть что необходимо включать в модель, определяется целями моделирования. Например, поставлена задача разработки новой эффективной формы для спортсменов-пловцов. При разработке модели этой формы будут учитываться физические параметры спортсменов, физика их движения в воде, но вот состояние их внутренних органов при этом не важно для целей моделирования. В данной работе рассмотрена имитационная модель «Диффузия по Бассу». Модель Басса описывает процесс распространения продукта. Изначально продукт никому не известен, и для того, чтобы люди начали его приобретать, он рекламируется. В итоге определенная доля людей приобретает продукт под воздействием рекламы. Также люди приобретают продукт в результате общения с теми, кто этот продукт уже приобрел. Процесс приобретения нового продукта под влиянием убеждения его владельцев чем-то похож на распространение эпидемии. Глава 1Моделирование является одним из способов решения практических задач. Зачастую решение проблемы нельзя найти путем проведения натурных экспериментов: строить новые объекты, разрушать или вносить изменения в уже имеющуюся инфраструктуру может быть слишком дорого, опасно или просто невозможно. В таких случаях строится модель реальной системы, то есть описывается на языке моделирования. Данный процесс подразумевает переход на определенный уровень абстракции: опуская несущественные детали, учитываетс только то, что считаем важным. Система в реальном мире всегда сложнее своей модели. После создания модели – а иногда и в процессе разработки – начинается исследование структуры и понимание поведения системы, проверка, как она ведет себя при определенных условиях, сравнение различных сценарии и оптимизаия ее. Когда оптимальное решение будет найдено, можно применить его в реальном мире. Типы моделей. Есть много типов моделей, включая ментальные модели, которые помогают понять, как устроен мир вокруг нас: друзья, семья, коллеги, город, в котором мы живем. Все наши решения - что следует сказать своему ребенку, что съесть на завтрак, за кого голосовать и в какой ресторан сходить на выходных, – основаны на ментальных моделях. Мощным инструментом моделирования являются компьютеры, ведь они предоставляют легко управляемый виртуальный мир, в котором можно создать практически все, что способны представить. Конечно, существует множество различных типов компьютерных моделей: от электронных таблиц, позволяющих моделировать расходы, до сложных инструментов имитационного моделирования, которые помогают исследовать динамические системы, например, потребительский рынок или зону боевых действий. Сравнение аналитического и имитационного моделирования. Аналитическая модель (таблица MS Excel). Суть технологии моделирования с использованием электронных таблиц крайне проста: вы вводите данные модели в одни ячейки и получаете выходные данные в других. Входные и выходные данные связаны формулами. Для задания дополнительной логики можно добавить в таблицу макросы. Различные надстройки позволяют вам выполнять эксперименты варьирования параметров, оптимизации или Монте-Карло. Однако существует множество задач, для которых аналитическое (основанное на формулах) решение крайне сложно найти, а иногда оно и вовсе отсутствует. К таким задачам относятся в том числе и динамические системы, которым свойственно: • нелинейное поведение; • "Память"; • неочевидные зависимости между переменными; • причинно-следственные связи; • неопределенность и большое количество параметров. В большинстве случаев практически невозможно найти точные формулы и тем более построить ментальную модель такой системы. Имитационная модель всегда является выполняемой моделью: вы запускаете ее, и она строит для вас траекторию изменений состояния системы. Можно сказать, что имитационная модель – это набор правил, согласно которым система переходит из одного состояния в другое. Правила могут задаваться самыми различными способами, например, дифференциальными уравнениями, диаграммами состояний, диаграммами процессов, расписаниями. Выходные данные модели всегда можно проанализировать прямо по ходу моделирования. Имитационная модель. Имитационные модели разрабатываются с помощью специализированного программного обеспечения, в котором используются различные языки моделирования. Преимущества имитационного моделирования. Можно выделить шесть основных преимуществ имитационного моделирования: 1. Имитационные модели позволяют анализировать системы и находить решения в тех случаях, когда такие методы, как аналитические вычисления и линейное программирование не справляются с задачей. 2. После того, как вы определитесь с уровнем абстракции, разрабатывать имитационную модель будет гораздо проще, чем аналитическую, поскольку процесс создания модели будет инкрементальным и модульным. 3. Структура имитационной модели естественным образом отображает структуру моделируемой системы. 4. Имитационная модель позволяет вам отслеживать все объекты системы, учтенные в выбранном уровне абстракции, добавлять метрики и проводить статистический анализ. 5. Одним из главных преимуществ имитационного моделирования является возможность проигрывать модель во времени и анимировать ее поведение. Анимация будет неоспоримым преимуществом при демонстрации модели и может оказаться полезной для верификации модели и нахождения ошибок. 6. Имитационные модели намного убедительнее электронных таблиц. Если вы используете имитационное моделирование, то при презентации проекта у вас будет явное преимущество перед теми, у кого на руках только цифры и решение, полученное из «черного ящика». Глава 2Шаг 1. Создание новой модели Создаем новую модель: 1. Щелкаем мышью по кнопке панели инструментов Создать . Появится диалоговое окно Новая модель. 2. Задаем имя новой модели. В поле Имя модели вводим Revyakina_A_I. Рисунок 1 – создание модели 3. Выбираем каталог, в котором будут сохранены файлы модели. 4. Выбираем годы в качестве Единиц модельного времени. 5. Щелкаем мышью по кнопке Готово. Шаг 2. Создание накопителей Создаем накопитель для моделирования численности потенциальных потребителей: 1. Вначале открываем палитру Системная динамика в панели Палитра. Чтобы открыть какую-либо палитру, нужно щелкнуть мышью по соответствующей иконке на вертикальной панели слева от палитры. Рисунок 2 – создание накопителя 2. Перетащим элемент Накопитель из палитры Системная динамика на диаграмму типа агентов. 3. На диаграмме появится маленький голубой прямоугольник, обозначающий переменную-накопитель (что соответствует классической нотации системной динамики). 4. В поле Имя вводим новое имя накопителя: PotentialAdopters. 5. Немного увеличим размер значка накопителя. Для этого выделим его щелчком мыши в графическом редакторе и перетащим в сторону появившийся в нижнем правом углу значка маркер. Создаем накопитель для моделирования численности потребителей: 1. Аналогично создаем еще один накопитель. 2. Поместим новый накопитель справа от накопителя PotentialAdopters, как показано на рисунке 3. 3. Назовем его Adopters. Шаг 3. Добавление потока продаж продукта Мы уже создали в нашей модели два накопителя, моделирующие численности потенциальных потребителей и потребителей продукта. Теперь пришло время задать потоки. В нашей простейшей модели есть только один поток - поток продаж продукта, увеличивающий число потребителей продукта и уменьшающий численность потенциальных потребителей. Добавим поток, ведущий из накопителя PotentialAdopters в накопитель Adopters: 1. Делаем двойной щелчок мышью по накопителю, из которого поток вытекает (PotentialAdopters), а затем щелкаем по тому накопителю, в который он втекает (Adopters). 2. AnyLogic создаст новый поток и сделает его исходящим потоком для накопителя PotentialAdopters и входящим - для Adopters. Поток отображается в виде стрелки со значком вентиля посередине. Стрелка показывает направление потока - в данном случае поток будет уменьшать значение накопителя PotentialAdopters и увеличивать значение Adopters. 3. Выделим стрелку созданного потока в графическом редакторе и изменим имя потока на AdoptionRate. В результате диаграмма потоков и накопителей должна будет выглядеть следующим образом: Рисунок 3 – добавление потока продаж продукта Шаг 4. Задание констант Теперь мы зададим константы нашей модели с помощью параметров. Создаем константу, задающую общую численность населения: 1. Перетащим элемент Параметр из палитры Системная динамика на диаграмму типа агентов. 2. В панели Свойства задаем свойства этого параметра. 3. Изменим имя параметра. Введем TotalPopulation в поле Имя. 4. В поле Значение по умолчанию введем 100000. Пусть общая численность населения в нашей модели будет именно такой. Рисунок 4 – константа TotalPopulation Создаем константу ContactRate: 1. Аналогично создаем еще одну константу. Задаем Имя ContactRate. 2. Предположим, что каждый человек в среднем встречается со 100 людьми в год. Введем в поле Значение по умолчанию 100. Рисунок 5 – константа ContactRate В этой модели интенсивность рекламы и вероятность того, что продукт будет приобретен под ее влиянием, полагаются постоянными. Поэтому мы зададим эффективность рекламы константой. Эффективность рекламы определяет, какая доля людей купит продукт вследствие ее влияния. Создаем константу AdEffectiveness, задающую эффективность рекламы: 1. Создаем еще одну константу и назовем ее AdEffectiveness. 2. Задаем значение по умолчанию 0.011. Рисунок 6 – константа AdEffectiveness Создаем константу AdoptionFraction: 1. Создаем еще одну константу и назовем ее AdoptionFraction. 2. Задаем значение по умолчанию 0.015. Рисунок 7 – константа AdoptionFraction Шаг 5. Задание начальных значений накопителей Теперь мы можем задать начальные значения накопителей. Мы хотим задать общую численность людей в нашей модели (заданную параметром TotalPopulation) в качестве начального значения накопителя PotentialAdopters. Чтобы задать связь: 1. Сделаем двойной щелчок по элементу Связь палитры Системная динамика. Значок элемента при этом должен измениться на следующий: . 2. Сразу после этого, щелкнем в графическом редакторе по элементу, который упоминается в выражении начального значения (TotalPopulation). 3. Затем щелкаем по накопителю PotentialAdopters, к которому должна следовать создаваемая связь зависимости. Рисунок 8 – создание связей Задаем начальное количество потенциальных потребителей продукта: 1. В графическом редакторе или в панели Проекты выделяем накопитель PotentialAdopters щелчком мыши. 2. В панели Свойства вводим TotalPopulation в поле Начальное значение. 3. Появится окно Мастера подстановки кода, перечисляющего переменные модели и функции, доступные в текущем контексте. Прокрутим список к имени, которое мы хотим вставить, или вводим первые буквы имени, пока оно не будет выделено в списке. Двойным щелчком мыши по имени добавим его в поле формулы. 4. В результате в поле Начальное значение должно быть добавлено имя параметра TotalPopulation, значение которого и будет определять начальное значение этого накопителя (начальную численность потенциальных покупателей продукта). Рисунок 9 – задание свойств накопителя PotentialAdopters Начальное значение накопителя Adopters, моделирующего потребителей продукта, задавать не нужно, поскольку изначально число потребителей равно нулю, а накопитель по умолчанию и так инициализируется нулем. Шаг 6. Создание динамических переменных Нам нужно создать две динамические переменные, которые будут соответствовать двум составляющим потока приобретения продукта: 1. Приобретениям, совершенным под влиянием рекламы. 2. Приобретениям, совершенным под влиянием общения потребителей продукта с потенциальными потребителями. Создаем динамическую переменную AdoptionFromAd: 1. Перетащитм элемент Динамическая переменная из палитры Системная динамика на диаграмму типа агентов. 2. В панели Свойства вводим новое Имя переменной: AdoptionFromAd. Теперь мы хотим задать формулу для этой динамической переменной. Влияние рекламы моделируется следующим образом: некий постоянный процент потенциальных клиентов AdEffectiveness всё время становятся клиентами. Их доля в AdoptionRate равна, соответственно, PotentialAdopters*AdEffectiveness. Добавим связи от двух переменных к зависимой от них AdoptionFromAd: 1. Добавим связи, ведущие от AdEffectiveness и PotentialAdopters к AdoptionFromAd. 2. Добавим еще одну связь, ведущую от AdEffectiveness к AdoptionFromAd. 3. Задаем формулу, согласно которой будет вычисляться значение переменной. В свойствах переменной AdoptionFromAd, в поле AdoptionFromAd = вводим: AdEffectiveness*PotentialAdopters. Рисунок 10 – задание свойств динамической переменной AdoptionFromAd Создаем динамическую переменную AdoptionFromWOM: 1. Аналогично создаем еще одну динамическую переменную. 2. Назовем ее AdoptionFromWOM. 3. Задаем для этой переменной следующую формулу: ContactRate * AdoptionFraction * PotentialAdopters * Adopters / TotalPopulation. Рисунок 11 – задание свойств динамической переменной AdoptionFromWOM Задаем формулу потока: 1. Выделим поток AdoptionRate щелчком мыши. 2. Перейдем в панель Свойства. 3. Введем правую часть формулы, по которой будет вычисляться значение потока, в поле AdoptionRate= : AdoptionFromAd AdoptionFromWOM 4. Добавим соответствующие связи от этих переменных к потоку AdoptionRate. Рисунок 12 – задание потока AdoptionRate Шаг 7. Настройка запуска модели В панели Проекты эксперименты отображаются в нижней части дерева модели. Один эксперимент, названный Simulation, создается по умолчанию. Это простой эксперимент, позволяющий запускать модель с заданными значениями параметров, поддерживающий режимы виртуального и реального времени, анимацию и отладку модели. Задаем остановку модели по прошествии 8 единиц модельного времени 1. В панели Проекты, выделим эксперимент Simulation:Main щелчком мыши. 2. В секции Модельное время панели Свойства, выберим В заданное время из выпадающего списка Остановить. В расположенном ниже поле введите 8. Модель остановится после того, как истекут 8 единиц модельного времени. Перед тем, как запустить модель, выберем режим ее выполнения. Модель AnyLogic может выполняться либо в режиме виртуального, либо в режиме реального времени. В режиме виртуального времени модель выполняется без привязки к физическому времени – она просто выполняется настолько быстро, насколько это возможно. Этот режим лучше всего подходит в том случае, когда требуется моделировать работу системы в течение достаточно длительного периода времени. В режиме реального времени задается связь модельного времени с физическим, то есть задается количество единиц модельного времени, выполняемых в одну секунду. Это часто требуется, когда вы хотите, чтобы анимация модели отображалась с той же скоростью, что и в реальной жизни. Задаем выполнение модели в режиме реального времени. 1. В панели Проекты, выделим эксперимент Simulation:Main щелчком мыши. 2. Перейдем в секцию Модельное время и выберем опцию Реальное время со скоростью. 3. Зададим скорость выполнения модели, т.e., сколько единиц модельного времени будет соответствовать одной секунде реального времени. Выберем в выпадающем списке справа, скажем, 1. Рисунок 13 – настройка простого экспериманта Шаг 8. Моделирование повторных покупок Созданная модель не учитывает того, что со временем продукт может быть израсходован или прийти в негодность, что вызовет необходимость его повторного приобретения. Мы смоделируем повторные покупки, полагая, что потребители продукта снова становятся потенциальными потребителями, когда продукт, который они приобрели, становится непригоден. Вначале мы определим константу, задающую среднее время жизни продукта. Создадим константу ProductLifeTime: 1. Пусть средняя продолжительность использования нашего продукта равна двум годам. Введите Значение по умолчанию 2. Потребители продукта снова становятся потенциальными потребителями тогда, когда продукт, который они приобрели, расходуется и перестает использоваться. Поэтому поток прекращения использования продукта является ничем иным, как потоком приобретения, задержанным на среднее время пригодности продукта. Создаем поток прекращения использования продукта, ведущий из Adopters в PotentialAdopters 1. Если нарисовать новый поток прямой стрелкой, ведущей от Adopters к PotentialAdopters, то этот поток будет нарисован поверх стрелки существующего потока AdoptionRate. Поэтому давайте нарисуем поток более сложной формы (см. рисунок ниже). Для этого используем другой, более подходящий для данного случая, способ рисования потоков. 2. Сделаем двойной щелчок по элементу Поток в палитре Системная динамика. Значок элемента при этом должен смениться на следующий: . 3. Сразу после этого щёлкнем мышью по накопителю Adopters, потом щёлкнем в промежуточных точках изгиба стрелки потока, и завершим рисование потока, сделав двойной щелчок по накопителю PotentialAdopters, в который этот поток втекает. 4. Назовием поток DiscardRate. 5. Зададим следующую формулу для потока DiscardRate: delay(AdoptionRate, ProductLifeTime). Функция delay() реализует временную задержку; она имеет следующую нотацию: delay(, , ) В нашем случае функция представляет собой AdoptionRate с временной задержкой ProductLifeTime. Пока не истекло время использования первого приобретенного продукта, поток равен нулю. Рисунок 14 – создание потока DiscardRate Шаг 9. Запуск модели 1. Щелкним мышью по кнопке панели инструментов Запустить и выберем из открывшегося списка эксперимент, который мы хотите запустить. Эксперимент этой модели будет называться Revyakia_A_I/Simulation. В дальнейшем по нажатию на кнопку Запустить (или по нажатию F5) будет запускаться тот эксперимент, который запускался вами в последний раз. Чтобы выбрать какой-то другой эксперимент, удет нужно щелкнуть мышью по стрелке, находящейся в правой части кнопки Запустить и выбрать нужный эксперимент из открывшегося списка (или щелкнуть правой кнопкой мыши по этому эксперименту в панели Проекты и выбрать Запустить из контекстного меню). Запустив модель, мы увидим окно модели. Щелкнем по кнопке Запустить . Мы увидим диаграмму потоков и накопителей. Рядом с каждым элементом будет отображаться его текущее значение. Рисунок 15 – запуск модели Шаг 10. Моделирование стратегии рекламной кампании На данный момент эффективность рекламы в нашей модели полагается постоянной. На самом деле, она зависит от текущих расходов компании на рекламу. Мы хотим улучшить нашу модель, чтобы иметь возможность управлять расходами на рекламную кампанию. Изменяя месячные расходы на рекламу, мы сможем повлиять на текущую эффективность рекламы. Моделирование месячных расходов Создадим константу, задающую месячные расходы компании: 1. Создаем параметр MonthlyExpenditures. 2. Задаем Значение по умолчанию: 1100. Рисунок 16 – создание параметра MonthlyExpenditures Заменим параметр AdEffectiveness динамической переменной: 1. Удалим параметр AdEffectiveness. 2. Создадим динамическую переменную AdEffectiveness с формулой: MonthlyExpenditures/10000. Мы полагаем, что именно так эффективность рекламы зависит от текущих рекламных расходов компании. 3. Добавим еще одну связь зависимости, ведущую от параметра MonthlyExpenditures к динамической переменной AdEffectiveness. Рисунок 16 – создание динамической переменной AdEffectiveness Мы хотим вести статистику всех расходов компании. Это может быть сделано созданием специальной переменной для хранения информации о том, сколько денег было потрачено на рекламу продукта. Каждый месяц мы будем обновлять это значение с помощью специального события, добавляя значение запланированных на предстоящий месяц расходов на рекламную кампанию продукта. Добавим переменную для хранения общих расходов компании: 1. Перетащим элемент Переменная из палитры Агент на диаграмму типа агента Main. 2. Назовем переменную TotalExpenditures. Создадим событие, которое будет обновлять значение TotalExpenditures: 1. Перетащим элемент Событие из палитры Агент на диаграмму типа агента Main. 2. Назовем событие monthlyEvent. 3. Сделаем так, чтобы таймер срабатывал каждый месяц. Выберем Циклический из выпадающего списка Режим. Введем 1 в поле Период и выберем месяцы из выпадающего списка справа. 4. Зададим Действие события: TotalExpenditures = MonthlyExpenditures; Этот код будет выполняться каждый раз по истечении таймаута события. Он выполняет сбор статистики, а именно добавляет значение запланированных рекламных расходов на предстоящий месяц к значению переменной TotalExpenditures. Рисунок 17 – создание события MonthlyEvent Рисунок 18 – настройка динамическоей переменной AdEffectivenes Рисунок 19 – настройка параметра SwichTime Моделирование плана рекламной кампании Поскольку реклама играет значительную роль только в начальной стадии процесса завоевания рынка, мы хотим в какой-то момент времени, скажем, через 3 года остановить рекламную кампанию. Этим мы сэкономим средства, бесцельно тратящиеся на рекламу тогда, когда насыщение рынка будет определяться практически исключительно покупками продукта, вызванными общением потребителей с потенциальными потребителями. Добавим константу, задающую время переключения: 1. Добавим параметр SwitchTime. 2. Зададим Значение по умолчанию: 3. Теперь мы визуально зададим поведение системы с помощью диаграммы состояний. Создадим диаграмму состояний для моделирования рекламной стратегии: 1. Начнем задание диаграммы состояний с добавления элемента Начало диаграммы состояний (перетащим этот элемент на диаграмму из палитры Диаграмма состояний). 2. Добавим состояние. Перетащим элемент Состояние из палитры Диаграмма состояний так, чтобы состояние присоединилось к добавленному ранее элементу (см. рисунок ниже). Изменим имя состояния на with_advertising. 3. Добавим еще одно состояние под только что созданным. Назовем его without_advertising. Рисунок 20 – моделирование плана рекламной компании 4. Нам нужно остановить рекламную кампанию в тот момент, когда диаграмма состояний войдет в это состояние. Поэтому напишем в поле свойства Действие при входе этого состояния MonthlyExpenditures=0; Рисунок 21 – настройка состояния without_advertising 5. Добавим переход, ведущий из состояния with_advertising в состояние without_advertising. Сделаем двойной щелчок мышью по элементу Переход в палитре Диаграмма состояний. Затем нарисуем переход, ведущий из состояния with_advertising в состояние without_advertising, щелкнув по границе верхнего состояния, а затем по границе нижнего состояния. 6. Укажем, что этот переход произойдет по истечении времени SwitchTime. Для этого выберем По таймауту из выпадающего списка Происходит и вводим SwitchTime в поле Таймаут. Рисунок 22 – запуск модели Шаг 11. Оптимизация рекламной стратегии Рыночная стратегия в данной модели предельно проста: в определенный момент времени компания прекращает рекламировать продукт. Мы же хотим найти оптимальную рыночную стратегию для достижения требуемого количества потребителей к определенному моменту времени при минимальных затратах на рекламу. Мы можем решить эту проблему, используя оптимизацию, при которой выбранные параметры модели будут систематически изменяться для минимизации или максимизации значения целевого функционала. Создадим оптимизационный эксперимент: 1. В панели Проекты щелкнем правой кнопкой мыши по элементу модели и выберите Создать > Эксперимент из контекстного меню. Откроется диалоговое окно Новый эксперимент. 2. Выберем Оптимизация из списка Тип эксперимента и нажмите Готово. Рисукон 23 – создание эксперимента Мы будем оптимизировать значения параметров MonthlyExpenditures и SwitchTime. Во время оптимизации, значения параметров модели будут систематически изменяться, чтобы найти наименьшее значение переменной TotalExpenditures, выбранной в качестве целевого функционала, при котором достигается насыщение рынка к заданному моменту времени. Зададим оптимизационные параметры: 1. Выделим оптимизационный эксперимент в панели Проекты и перейдем в панель Свойства. 2. Все параметры агента верхнего уровня эксперимента перечислены в таблице Параметры, расположенной в соответствующей секции свойств эксперимента. По умолчанию все они сделаны фиксированными, т.e. они не участвуют в оптимизационном процессе (их значения не меняются). Чтобы включить параметр в процесс оптимизации (то есть, разрешить варьирование его значения для поиска наилучшего значения функционала), нужно выбрать в ячейке Тип соответствующих нужным параметрам строках таблицы другую опцию вместо фиксированный. 3. Сконфигурируем параметр MonthlyExpenditures. Выберем непрерывный в ячейке Тип строки MonthlyExpenditures. Зададим максимально возможное значение параметра в ячейке Макс. равным 10000, а Начальное значение равным 1000. Таким образом мы говорим оптимизатору, что параметр может принимать любые вещественные значения в интервале от 0 до 10000, а начнет оптимизатор процесс оптимизации со значения 1000. 4. Теперь сделаем то же для параметра SwitchTime. Выберем дискретный в ячейке Тип, поскольку мы хотим, чтобы этот параметр принимал только значения, соответствующие определенным временным промежуткам: один месяц, два месяца и т.д. Задайте 0.0833 в ячейке Шаг. Это значение соответствует одному месяцу в нашей модели, так как 1 соответствует одному году, то один месяц равен 1.0/12.0 = 0.0833. В ячейке Макс. выберем 1.5, а в ячейке Начальное 1. Рисунок 24 – настройка свойств оптимизационного эксперимента Создадим интерфейс эксперимента: 1. Щелкним по кнопке Создать интерфейс в панели свойств эксперимента. 2. Тем самым мы создадим заданный по умолчанию интерфейс для эксперимента - набор элементов управления для отображения результатов процесса оптимизации по ходу его выполнения. Рисунок 25 – создание интерфейса Зададим функционал оптимизации: 1. Мы хотим минимизировать деньги, затраченные на рекламу продукта. В панели свойств эксперимента введем root.TotalExpenditures в поле Целевая функция. Здесь мы обращаемся к агенту верхнего уровня эксперимента как к переменной root. 2. Оставим выбранной опцию минимизировать. Сконфигурируем оптимизацию: 1. В панели свойств эксперимента зададим максимальное количество "прогонов" модели, которое будет произведено оптимизатором. Введем 500 в поле Количество итераций. 2. Чтобы процесс оптимизации успешно выполнялся, нужно убедиться в том, что он будет заканчиваться. По умолчанию моделирование не заканчивается, поэтому оптимизатор не получит результат, который должен бы был получить по окончании выполнения каждого отдельного "прогона" модели. Поэтому нужно явно задать условие останова "прогона". Перейдем в секцию свойств эксперимента Модельное время и выберите опцию В заданное время из выпадающего списка Остановить. В поле Конечное время введем 1.5. Теперь "прогоны" модели будут завершаться по прошествии полутора единиц модельного времени (то есть, лет). Задание дополнительного требования (проверка насыщения рынка). Теперь давайте зададим дополнительное требование к результатам оптимизации, которое будет проверяться после выполнения каждого "прогона" модели. Мы хотим, чтобы по прошествии полутора лет модельного времени продукт приобрели 80000 человек. Зададим требование к оптимизационному эксперименту: 1. Выделим оптимизационный эксперимент в панели Проекты и перейдем в секцию свойств Требования. Зададим требование к результатам оптимизации в верхней строке таблицы Требования (проверяются после "прогона" для определения того, допустимо ли найденное решение). 2. Введем root.Adopters в ячейке Выражение. Корневой агент эксперимента доступен здесь по имени root. 3. Выберем >= в ячейке Тип. 4. Введем 80000 в ячейке Граница. 5. Наконец, установим флажок в самом левом столбце таблицы, чтобы активировать это ограничение. Мы закончили задание дополнительного требования к результатам оптимизации. Оно будет проверяться после каждого "прогона" модели. Если это требование не будет выполнено, то полученный в результате данного "прогона" результат будет отброшен. Запуск оптимизации. Теперь модель готова к проведению оптимизации. Запустим оптимизацию: 1. Щелкним правой кнопкой мыши по оптимизационному эксперименту в панели Проекты и выберем Запустить из контекстного меню. Мы увидим окно модели, отображающее презентацию запущенного эксперимента. 2. Запустим процесс оптимизации, щелкнув по кнопке Запустить . 3. AnyLogic запустит модель 500 раз, изменяя значения параметров MonthlyExpenditures и SwitchTime. Итоговая информация о результатах будет отображаться в специальных элементах управления на диаграмме эксперимента в окне презентации. Рисунок 26 – запуск оптимизационного эксперимента Когда процесс оптимизации модели завершится, мы увидим, что Лучшее значение функционала равно семи с лишним тысячам. Эксперимент в итоге выдаст оптимальные значения параметров SwitchTime и MonthlyExpenditures, при которых было достигнуто это значение функционала. Теперь можно обновить модель этими значениями параметров SwitchTime и MonthlyExpenditures. Сохраним полученные значения параметров в эксперименте Simulation, чтобы использовать в нашей модели найденную оптимальную стратегию. Применим результаты оптимизации: 1. После завершения оптимизации, щелкним по кнопке copy на холсте диаграммы эксперимента в окне презентации. Таким образом мы скопироали найденные (оптимальные) значения параметров в Буфер обмена. 2. Закроем окно презентации и выделим эксперимент Simulation в панели Проекты. 3. Вставим скопированные значения параметров из Буфера обмена, щелкнув по кнопке Вставить из буфера в панели свойств эксперимента. Запустим эксперимент Simulation. Теперь модель будет запущена с оптимальными значениями параметров, при которых в процессе оптимизации было получено наилучшее значение функционала. Рисунок 27 – задание оптимальных параметров ЗаключениеПрограмма имитационного моделирования «AnyLogic» поддерживает различные подходы моделирования. Она позволяет создавать комплексные динамические модели, используя стандартную графическую нотацию системной динамики. Моделирование является одним из способов решения практических задач. В данной работе была рассмотрена имитационная модель «Диффузия по Бассу». Модель Басса описывает процесс распространения продукта. Был построен оптимизационный эксперимент, получены данные. После модель была запущена с оптимальными данными. Модель работает без ошибок. Так же были выполнены все поставленные задачи. Целью работы являлось ознакомление с интерфейсом и основными возможностями программы. Список литературы1. Baryannis, G., Validi, S., Dani, S., & Antoniou, G. (2019). Supply chain risk management and artificial intelligence: State of the art and future research directions. International Journal of Production Research, 57(7), 2179-2202. doi:10.1080/00207543.2018.1530476 2. Córdova, E., Mobarec, V., Pizarro, E., & Videla, A. R. (2018). A structured key cost analysis methodology to identify value-contributing activities in mining projects: A case study of the chuquicamata underground project. Journal of the Southern African Institute of Mining and Metallurgy, 118(3), 279-288. doi:10.17159/2411-9717/2018/v118n3a10 3. Duan, Y., Edwards, J. S., & Dwivedi, Y. K. (2019). Artificial intelligence for decision making in the era of big data – evolution, challenges and research agenda. International Journal of Information Management, 48, 63-71. doi:10.1016/j.ijinfomgt.2019.01.021 4. Ivanov, D., Tang, C. S., Dolgui, A., Battini, D., & Das, A. (2021). Researchers' perspectives on industry 4.0: Multi-disciplinary analysis and opportunities for operations management. International Journal of Production Research, 59(7), 2055-2078. doi:10.1080/00207543.2020.1798035 5. The Art of Process-Centric Modeling with AnyLogic/ Arash Mahdavi (July 10, 2019) - 333 с; 6. The The Big Book of Simulation Modeling/ Andrei Borshchev, Ilya Grigoryev URL: https://www.anylogic.com/resources/books/big-book-of-simulation-modeling/#Andrei Borshchev 7. Имитационное моделирование в AnyLogic 7. В 2 ч., ч. 1 : учебное пособие / О. В. Лимановская. — Екатеринбург : Изд-во Урал. ун-та, 2017. — 152 с.; 8. Имитационное моделирование в AnyLogic 7. В 2 ч., ч. 2 : лабораторный практикум / О. В. Лимановская. — Екатеринбург : Изд-во Урал. ун-та, 2017. — 104 с. 9. Моделирование производственных процессов в AnyLogic 8.1 : лабораторный практикум / О. В. Лимановская, Т. И. Алферьева. — Екатеринбург : Изд-во Урал. ун-та, 2019. — 136 с.; |