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


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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



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

1. Создайте параметр MonthlyExpenditures.

2. Задайте Значение по умолчанию: 1100.

Замените параметр AdEffectiveness вспомогательной переменной

1. Удалите параметр AdEffectiveness.

2. Создайте вспомогательную переменную AdEffectiveness с формулой: MonthlyExpenditures/10000.0. Мы полагаем, что именно так эффективность рекламы зависит от текущих рекламных расходов компании.

3. Добавьте еще одну связь зависимости, ведущую от параметра MonthlyExpenditures к динамической переменной AdEffectiveness.

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

Добавьте переменную для хранения общих расходов компании

1. Перетащите элемент Переменная из палитры Агент на диаграмму типа агента Main.

2. Назовите переменную TotalExpenditures.

Создайте событие, которое будет обновлять значение TotalExpenditures

1. Перетащите элемент Событие из палитры Агент на диаграмму типа агента Main.

2. Назовите событие monthlyEvent.

3. Сделайте так, чтобы таймер срабатывал каждый месяц. Выберите Циклический из выпадающего списка Режим. Поскольку одна единица модельного времени в нашей модели соответствует одному году, то одному месяцу будет соответствовать выражение 1.0/12.0. Введите 1.0/12 в поле Таймаут.

4. Задайте Действие события: TotalExpenditures += MonthlyExpenditures;

Этот код будет выполняться каждый раз по истечении таймаута события. Он выполняет сбор статистики, а именно добавляет значение запланированных рекламных расходов на предстоящий месяц к значению переменной TotalExpenditures.

Моделирование плана рекламной кампании

Поскольку реклама играет значительную роль только в начальной стадии процесса завоевания рынка, мы хотим в какой-то момент времени, скажем, через 3 года остановить рекламную кампанию. Этим мы сэкономим деньги, бесцельно тратящиеся на рекламу тогда, когда насыщение рынка будет определяться практически исключительно покупками продукта, вызванными общением потребителей с потенциальными потребителями.

Добавьте константу, задающую время переключения

1. Добавьте параметр SwitchTime.

2. Задайте Значение по умолчанию: 3.

Теперь мы визуально зададим поведение системы с помощью диаграммы состояний.

Создайте диаграмму состояний для моделирования рекламной стратегии

1. Начните задание диаграммы состояний с добавления элемента Начало диаграммы состояний (перетащите этот элемент на диаграмму из палитры Диаграмма состояний).

2. Добавьте состояние. Перетащите элемент Состояние из палитры Диаграмма состояний так, чтобы состояние присоединилось к добавленному ранее элементу (см. рисунок ниже). Измените имя состояния на with_advertising.

3. Добавьте еще одно состояние под только что созданным. Назовите его without_advertising.

4. Нам нужно остановить рекламную кампанию в тот момент, когда диаграмма состояний войдет в это состояние. Поэтому напишите в поле свойства Действие при входе этого состояния MonthlyExpenditures=0.0;

5. Добавьте переход, ведущий из состояния with_advertising в состояние without_advertising. Сделайте двойной щелчок мышью по элементу Переход в палитре Диаграмма состояний. Затем нарисуйте переход, ведущий из состояния with_advertising в состояние without_advertising, щелкнув по границе верхнего состояния, а затем по границе нижнего состояния.

6. Укажите, что этот переход произойдет по истечении времени SwitchTime. Для этого выберите По таймауту из выпадающего списка Происходит и введите SwitchTime в поле Таймаут.

Теперь, когда диаграмма состояний находится в начальном состоянии with_advertising, рекламные расходы кампании определяются переменной MonthlyExpenditures. Как только диаграмма состояний покидает это состояние в момент времени SwitchTime, компания перестает рекламировать продукт.

Запустите модель и убедитесь, что рекламная кампания длится теперь только три года.

Задание 13. Оптимизация рекламной стратегии

Рыночная стратегия в данной модели предельно проста: в определенный момент времени компания прекращает рекламировать продукт.

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

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

Создайте оптимизационный эксперимент

1. В панели Проекты щелкните правой кнопкой мыши по элементу модели и выберите Создать > Эксперимент из контекстного меню. Откроется диалоговое окно Новый эксперимент.

2. Выберите Оптимизация из списка Тип эксперимента и нажмите Готово.

Вы увидите, что в модели будет создан еще один эксперимент, а в графическом редакторе будет открыта его диаграмма.

Мы будем оптимизировать значения параметров 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.

Создайте интерфейс эксперимента

1. Щелкните по кнопке Создать интерфейс в панели свойств эксперимента.

2. Тем самым мы создадим заданный по умолчанию интерфейс для эксперимента (см. рисунок ниже) - набор элементов управления для отображения результатов процесса оптимизации по ходу его выполнения.

Обратите внимание, что создание интерфейса удаляет все содержимое диаграммы оптимизационного эксперимента, поэтому мы рекомендуем вначале создать предлагаемый по умолчанию интерфейс, а уже потом изменять его.

Задайте функционал оптимизации

1. Мы хотим минимизировать деньги, затраченные на рекламу продукта. В панели свойств эксперимента введите root.TotalExpenditures в поле Целевая функция. Здесь мы обращаемся к агенту верхнего уровня эксперимента как к переменной root.

2. Оставьте выбранной опцию минимизировать.

Сконфигурируйте оптимизацию

1. В панели свойств эксперимента задайте максимальное количество «прогонов» модели, которое будет произведено оптимизатором. Введите 500 в поле Количество итераций.

2. Чтобы процесс оптимизации успешно выполнялся, нужно убедиться в том, что он будет заканчиваться. По умолчанию моделирование не заканчивается, поэтому оптимизатор не получит результат, который должен бы был получить по окончании выполнения каждого отдельного «прогона» модели. Поэтому нужно явно задать условие останова «прогона». Перейдите в секцию свойств эксперимента Модельное время и выберите опцию В заданное время из выпадающего списка Остановить. В поле Конечное время введите 1.5. Теперь «прогоны» модели будут завершаться по прошествии полутора единиц модельного времени (то есть, лет).

Задание дополнительного требования (проверка насыщения рынка)

Теперь давайте зададим дополнительное требование к результатам оптимизации, которое будет проверяться после выполнения каждого «прогона» модели. Мы хотим, чтобы по прошествии полутора лет модельного времени продукт приобрели 80000 человек.

Задайте the requirement for the optimization experiment

1. Выделите оптимизационный эксперимент в панели Проекты и перейдите в секцию свойств Ограничения. Задайте требование к результатам оптимизации в верхней строке таблицы Требования (проверяются после «прогона» для определения того, допустимо ли найденное решение).

2. Введите root.Adopters в ячейке Выражение. Корневой агент эксперимента доступен здесь по имени root.

3. Выберите >= в ячейке Тип.

4. Введите 80000 в ячейке Граница.

5. Наконец, установите флажок в самом левом столбце таблицы, чтобы активировать это ограничение.

Мы закончили задание дополнительного требования к результатам оптимизации. Оно будет проверяться после каждого «прогона» модели. Если это требование не будет выполнено, то полученный в результате данного «прогона» результат будет отброшен.

Запуск оптимизации

Теперь модель готова к проведению оптимизации.

Запустите оптимизацию

1. Щелкните правой кнопкой мыши по оптимизационному эксперименту в панели Проекты и выберите Запустить из контекстного меню. Вы увидите окно презентации, отображающее презентацию запущенного эксперимента.

2. Запустите процесс оптимизации, щелкнув по кнопке Запустить оптимизацию на холсте презентации эксперимента.

3. AnyLogic запустит модель 500 раз, изменяя значения параметров MonthlyExpenditures и SwitchTime. Итоговая информация о результатах будет отображаться в специальных элементах управления на диаграмме эксперимента в окне презентации.

Когда процесс оптимизации модели завершится, Вы увидите, что Лучшее значение функционала равно четырем с лишним тысячам. Эксперимент в итоге выдаст оптимальные значения параметров SwitchTime и MonthlyExpenditures, при которых было достигнуто это значение функционала.

Теперь можно обновить модель этими значениями параметров SwitchTime и MonthlyExpenditures. Сохраните полученные значения параметров в эксперименте Simulation, чтобы использовать в нашей модели найденную оптимальную стратегию.

Примените результаты оптимизации

1. После завершения оптимизации, щелкните по кнопке copy на холсте диаграммы эксперимента в окне презентации. Таким образом Вы скопируете найденные (оптимальные) значения параметров в Буфер обмена.

2. Закройте окно презентации и выделите эксперимент Simulation в панели Проекты.

3. Вставьте скопированные значения параметров из Буфера обмена, щелкнув по кнопке Вставить из буфера в панели свойств эксперимента.

Запустите эксперимент Simulation. Теперь модель будет запущена с оптимальными значениями параметров, при которых в процессе оптимизации было получено наилучшее значение функционала. Можете проверить, что к заданному времени (1,5 года) достигается требуемое количество пользователей продукта.

Теперь мы спланировали стратегию завоевания рынка таким образом, чтобы рекламная кампания была наиболее рациональной и эффективной.

Контрольные вопросы

1. Перечислите основные этапы построения динамических моделей в среде AnyLogic.

2. Для чего используются фазовые графики при представлении результатов моделирования?

3. Перечислите типовые звенья, используемые при моделировании линейных динамических систем.

4. Что представляет собой переходный процесс в динамических системах?

5. Дайте характеристику типовым звеньям динамических систем с точки зрения протекания в них переходных процессов.

6. Как строится интерфейс эксперимента AnyLogic для связи с параметрами модели?

7. Как выполняется соединение подсистем при построении динамической модели в AnyLogic?

8. В чем заключается принцип работы динамической системы с отрицательной обратной связью?

Практическая работа №7

Тема: Разработка многоагентной модели в AnyLogic

Цель: - изучить методологию агентного моделирования. Приобрести практические навыки работы c системой AnyLogic при построении агентных моделей.

Вид работы: фронтальный

Время выполнения: 2 часа

Теоретические сведения

В данной практической работе предлагается изучить агентный подход моделирования сложных систем. В ходе работы создается классическая модель распространения инноваций Басса и те ее расширения, которые демонстрируют возможности AnyLogic для создания агентных моделей.

Агенты в AnyLogic

Агент – это некоторая сущность, которая обладает активностью, автономным поведением, может принимать решения в соответствии с некоторым набором правил, может взаимодействовать с окружением и другими агентами, а также может изменяться (эволюционировать). Многоагентные (или просто агентные) модели используются для исследования децентрализованных систем, динамика функционирования которых определяется не глобальными правилами и законами, а, наоборот, эти глобальные правила и законы являются результатом индивидуальной деятельности членов группы. Цель агентных моделей – получить представление, об общем поведении системы исходя из знаний о поведении ее отдельных активных объектов и взаимодействии этих объектов в системе. Агентная модель может содержать десятки и даже сотни тысяч активных агентов.

При помощи агентов моделируют рынки (агент – потенциальный покупатель), конкуренцию и цепочки поставок (агент – компания), население (агент – семья, житель города или избиратель) и мн. др.

В среде AnyLogic можно легко и быстро создавать модели с агентами. Агент естественно реализовывать с помощью базового элемента AnyLogic – активного объекта. В модели можно создавать классы активных объектов и далее использовать в модели любое число экземпляров этих классов. Активный объект имеет параметры, которые можно изменять извне, переменные, которые можно считать памятью агента, а также поведение (рис. 1).

Рисунок 1

Параметры могут указывать пол агента, дату рождения и т.д. Переменными можно, например, выразить возраст агента, его координаты в пространстве, социальные свойства.

Стейтчарты и таймеры могут выражать поведение: состояния агента и изменение состояний под воздействием событий и условий. Например, переходы в разные возрастные или социальные группы, изменения образования или дохода и т.д.

Кроме того, агент может иметь интерфейс для взаимодействия с окружением, который реализуется с помощью интерфейсных объектов: портов и интерфейсных переменных.

Ход работы

Создайте новый проект для будущей модели и сохраните его в своей папке.

Первым шагом при создании агентной модели является создание агентов. Для каждого агента задается набор правил, согласно которым он взаимодействует с другими агентами; это взаимодействие и определяет общее поведение системы. В нашей модели агентами будут люди. Создадим агентную модель с помощью Мастера создания модели.

Создание агентной модел

Шаг 1. Щелкните мышью по кнопке панели инструментов Создать. Появится диалоговое окно Новая модель. Задайте имя новой модели. Щелкните мышью по кнопке Далее.

Шаг 2. Выберите шаблон модели (рис. 2). В связи с тем, что мы хотим создать новую агентную модель, то нужно установить флажок Использовать шаблон модели и выбрать Агентная модель в расположенном ниже списке Выберите метод моделирования. Щелкните мышью по кнопке Далее.

Рисунок 2

Шаг 3. Создайте агентов, т.е. задайте имя класса агента и количество агентов, которое будет изначально создано в нашей модели. Задайте в качестве имени класса Person и введите в поле Начальное количество агентов 1000. Щелкните мышью по кнопке Далее.

Шаг 4. Задайте свойства пространства, в котором будут обитать агенты и выберите фигуру анимации агента. Установите флажок Добавить пространство и выберите ниже тип этого пространства – Непрерывное. Задайте размерности данного пространства: введите в поле Ширина – 600, а в поле Высота – 350. В результате наши агенты будут располагаться каким-то образом в пределах непрерывного пространства, отображаемого на презентации модели областью размером 600×350 пикселей. Не меняйте значения, выбранные в выпадающих списках Начальное расположение и Анимация; пусть агенты изначально расставляются по пространству случайным образом, а анимируются с помощью фигурки человечка. Щелкните мышью по кнопке Далее.

Шаг 5. Задайте сеть взаимосвязей агентов (рис. 3). Установите флажок Использовать сеть и оставьте выбранной опцию Случайное. Ниже можно установите флажок Показывать связи, чтобы отображать на презентации связи между знакомыми (или потенциально могущими встретиться и пообщаться) агентами с помощью линий. Щелкните мышью по кнопке Далее.

Рисунок 3

Шаг 6. Установите флажок Добавить простое поведение. В результате у агента будет создана диаграмма состояний.

Задание характеристик агента

Характеристики агента задаются с помощью параметров класса. Все агенты обладают общей структурой, поскольку все они задаются объектами одного класса. Параметры же позволяют задавать характеристики индивидуально для каждого агента. Создадим параметр, который задает подверженность человека влиянию рекламы.

Откройте структурную диаграмму класса Person. Перетащите элемент Параметр  из палитры Основная на диаграмму класса, в окне свойств параметра задайте имя AdEffectivenes s, значение по умолчанию – 0.011.

Задание поведения агента

Поведение агента обычно описывается в классе этого агента (в нашей модели это класс Person) с помощью диаграммы состояний (стейтчарт).

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

1. Откройте структурную диаграмму класса Person. На диаграмме класса вы увидите следующую диаграмму состояний (рис. 4).

Рисунок 4

2. Откройте свойства верхнего состояния, переименуйте верхнее состояние в PotentialAdopter. Это начальное состояние. Нахождение стейтчарта в данном состоянии означает, что человек еще не купил продукт.

3. Нижнее состояние назовите Adopter (т.е. человек уже купил продукт).

4. Измените свойства перехода из состояния PotentialAdopter в состояние Adopter. Этот переход будет моделировать покупку продукта.

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

5. Удалите переход, ведущий из нижнего состояния в верхнее, поскольку мы пока создаем простейшую модель, в которой человек, однажды приобревший продукт, навсегда остается его потребителем, и соответственно перехода из состояния Adopter в состояние PotentialAdopter пока что быть не должно (рис. 5). Чтобы удалить переход, выделите его на диаграмме и нажмите Del.

Рисунок 5

6. Настройте выполнение модели (рис. 6). В окне свойств эксперимента перейдите на вкладку Модельное время и задайте останов модели после 8 единиц модельного времени.

Рисунок 6

7. Постройте проект с помощью кнопки панели инструментов Построить (клавиша F7). Если ошибок в проекте нет, то запустите модель. Вы увидите, как число потенциальных покупателей (синих) переходит в разряд покупателей (красных).



Поделиться:


Последнее изменение этой страницы: 2021-05-12; просмотров: 107; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.224.37.68 (0.066 с.)