Файл: Построение имитационное модели распространения нового продукта на рынке.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 29.11.2023

Просмотров: 110

Скачиваний: 4

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.


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

Моделирование месячных расходов

Создадим константу, задающую месячные расходы компании:

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 на холсте диаграммы эксперимента в окне презентации. Таким образом мы скопироали найденные (оптимальные) значения параметров в Буфер обмена.