Исходя из постановки задачи, мы зададим поведение потребителя как последовательность трех состояний: PotentialUser, WantA, UsesA. Мы полагаем, что продукт будет всегда в наличии, поэтому переход из состояния WantA в состояние UsesAбудет мгновенным и не будет требовать выполнения каких-либо условий для срабатывания. Эффект от рекламы будет моделироваться как связанная с переходом из состояния PotentialUser в состояние WantA стохастическая задержка. На данном этапе мы не будем учитывать ни повторные покупки продукта, ни общение людей друг с другом.
Нарисуйте в редакторе класса Consumer три состояния (расположите их снизу вверх в следующем порядке): PotentialUser, WantA, UsesA. Добавьте элемент Начало диаграммы состояний, чтобы он указывал на состояние PotentialUser.
Состояния диаграммы альтернативны друг другу: в каждый отдельный момент времени агент (в нашем случае – потребитель) может находиться только в одном состоянии. Начало диаграммы состояний указывает на начальное состояние диаграммы, которым, очевидно, является PotentialUser (то есть, потенциальный пользователь). Имя начала диаграммы состояний играет роль имени диаграммы в целом. В одном активном объекте может быть задано сразу несколько диаграмм состояний, но в данной модели нам достаточно одной.


Срабатывающий
с заданной интенсивностью переход в AnyLogic представляет собой по сути
переход, срабатывающий по экспоненциально распределенному таймауту.
Когда управление диаграммы состояний переходит в состояние PotentialUser,
происходит генерация значения согласно экспоненциальному распределению,
которое и присваивается таймауту этого перехода. Поэтому у потребителей
будут различные времена принятия решения о покупке продукта под
влиянием рекламы, но при этом в одну единицу модельного времени (день) в среднем решение о покупке будет принимать 1.1% потенциальных пользователей продукта.
Задайте следующие свойства для перехода BuyA: Происходит: По таймауту, Таймаут: 0.
Поскольку мы подразумеваем, что продукт всегда доступен (есть в наличии), то все, кто хочет приобрести продукт, могут это сделать сразу же – поэтому, как только управление диаграммы состояний перейдет в состояние WantA, оно тут же, с нулевой задержкой, перейдет дальше, в состояние UsesA.
В поле Действие при входе состояния WantA
введите: person.setFillColor(
pink );
В поле Действие при входе состояния UsesA
введите: person.setFillColor(
red );
Таким способом мы изменяем цвет фигуры анимации потребителя, чтобы визуально отобразить смену его состояния. Как Вы можете видеть, все элементы модели и презентации класса активного объекта доступны один из другого. person здесь - это имя кривой, автоматически нарисованной для задания агента Мастером создания модели. Обратите внимание, что если Вы зададите другую фигуру в качестве презентации объекта класса Consumer, то Вам нужно будет здесь ссылаться уже на ее имя.
Вы сможете увидеть, как фигурки потребителей постепенно закрашиваются красным цветом – таким образом виден производимый рекламой эффект. Хотя каждый потребитель проходит через состояние WantA, которому соответствует розовый цвет, фигурок розового цвета не видно, поскольку потребители мгновенно покидают это состояние, чтобы перейти в состояние UsesA.

Поскольку наша модель стохастична (как Вы помните, источниками случайности в ней являются срабатывающие с заданной интенсивностью переходы AdA в диаграммах состояний потребителей), то результаты моделирования будут зависеть от генератора случайных чисел. Выбрав опцию Случайное начальное число, Вы говорите Anylogic, что для каждого "прогона" модели должны использоваться различные последовательности случайных чисел.
Вы увидите, что в конечном счете все потребители приобретут продукт.
Контрольная модель: AB Market and SD Supply Chain - Phase 2