Шаг 6. Учет общения потребителей друг с другом

В этой фазе агенты начнут общаться друг с другом. Нас интересует общение пользователей продукта с потенциальными пользователями. Для этого мы добавим циклический переход внутрь состояния UsesA. Переход будет срабатывать периодически и при каждом своем срабатывании агент-пользователь будет посылать сообщение случайно выбранному агенту, говоря тому, что продукт A стоит того, чтобы его приобрести. Если этот случайно выбранный агент будет являться потенциальным пользователем (т.e. будет находиться в состоянии PotentialUser), то он отреагирует на получение такого сообщения переходом в состояние WantA. Для этого, очевидно, нужно будет добавить еще один переход из PotentialUser в WantA, который будет срабатывать по получениии соответствующего сообщения.

  1. Перейдите в редактор класса Consumer и нарисуйте переход внутри состояния UsesA так, чтобы он начинался и заканчивался на границе этого состояния и полностью находился внутри этого состояния. Назовите его ContactA. Оставьте без изменения свойства срабатывания этого перехода: По таймауту с таймаутом 1. Задайте Действие: send( "Buy A!", RANDOM );
Внутренний переход является циклическим переходом, который не выводит диаграмму состояний из того состояния, в котором он задан. 

В действии этого перехода потребитель случайно выбирает другого потребителя (не обязательно потенциального пользователя!) и посылает тому текстовое сообщение “Buy A!” (т.е."Купи продукт А!").

Переход ContactA сработает по истечении заданного таймаута. Мы предполагаем, что в течение дня пользователь убеждает одного человека. При желании Вы можете сделать этот переход срабатывающим с заданной интенсивностью. Вы можете непосредственно моделировать все контакты, тогда в случае, например, 5 контактов в день, интенсивность контактов будет равна 5. Поскольку не все контакты успешны, т.е. убеждают потенциальных пользователей приобрести продукт A, то Вы можете моделировать только “успешную долю” этих контактов и сделать их более редкими, умножив их интеннсивность на коэффициент, задающий силу убеждения, скажем, 0.015. Мы же используем срабатывающий по таймауту переход, потому что такой подход нам кажется проще.


  1. Перейдите на страницу свойств Агент класса Consumer. В таблице Перенаправлять сообщение в выберите флажок в строке, соответствующей диаграмме состояний statechart:


На предыдущем шаге мы сделали так, что агенты-пользователи продукта теперь периодически контактируют с другими потребителями, отсылая им сообщения “Buy A!” (т.е."Купи продукт А!"). В секции свойств агента Перенаправлять сообщение в мы выбираем диаграммы состояний, которые будут получать и обрабатывать получаемые агентом сообщения. То есть мы перенаправляем полученное сообщение в диаграмму состояний statechart. Для реакции на это сообщение мы добавим в нашу диаграмму состояний еще один переход.

  1. Добавьте еще один переход в диаграмму состояний класса Consumer: из состояния PotentialUser в состояние WantA, назовите его WomA. Пусть этот переход срабатывает По получении сообщения, типом сообщения пусть будет String, а само сообщение должон соответствовать строке “Buy A!”
Мы закончили моделирование общение людей, в результате которого происходит убеждение в необходимости покупки продукта. Сообщение, приходящее от другого агента, перенаправляется в диаграмму состояний, и если диаграмма находится в состоянии PotentialUser, то в результате получения такого сообщения произойдет мгновенный переход в состояние WantA. Если потребитель будет находиться в каком-то другом состоянии, то сообщение будет проигнорировано.


  1. Запустите модель.

Вы увидите, что насыщение рынка теперь происходит намного быстрее. Диаграмма показывает широко известную кривую распространения продукта S-формы. Неудовлетворенный спрос во время пикового интереса к продукту довольно незначителен.


Контрольная модель: AB Market and SD Supply Chain - Phase 6


          Шаг 5. Визуализация динамики спроса и пользовательской базы

          Шаг 7. Добавление повторных покупок продукта