145
Рис. 93. Диаграмма состояний
Рис. 94.
Состояние PotentialAdopter
Рис. 95. Состояние Adopter
146
Рис. 96. Переход
На вкладке «Проекты» (рис. 97) в свойствах объекта «Model»
задать
единицу модельного времени – дни, в свойствах объекта «Simulation» задать
модельное время (рис. 98).
Рис. 97. Вкладка «Проекты»
Рис. 98. Модельное время
Из палитры «Статистика» добавить элемент «Временной график».
Определить для него свойства, согласно рис. 99.
147
Рис. 99. Временной график
Запустите модель и проследите, как
будет изменяться количество
потенциальных покупателей и покупателей.
В текущей модели люди приобретают продукт только под влиянием
рекламы. На самом деле рекламный эффект играет значительную роль только в
момент выпуска продукта на рынок. В дальнейшем все большую роль будет
играть общение людей со своими знакомыми,
которые этот продукт уже
приобрели. В основном люди приобретают новые продукты именно под
влиянием убеждения своих знакомых; данный процесс чем-то схож с
распространением эпидемии.
Чтобы учесть влияние общения людей, внесем в нашу модель небольшие
изменения.
Откройте диаграмму класса «Main» и создайте два новых параметра:
1.
параметр ContactRate – среднегодовое количество встреч человека.
Значение по умолчанию – 100. Тип – int. Предположим, что человек
в среднем встречается со 100 людьми в год;
2.
параметр AdoptionFraction – сила убеждения человека, влияющая на
то, сколько людей он сможет убедить в
необходимости купить
продукт. Значение по умолчанию – 0.015. Тип – double.
Измените стейтчарт агента:
1) перейдите к классу «Person»;
2) добавьте в состояние Adopter внутренний переход (рис. 100). Для этого
щелкните перетащите элемент «Переход», затем поочередно перенесите его
концы на любые две стороны состояния Adopter;
148
Рис. 100. Диаграмма состояний
3) в свойствах перехода (рис. 101) задайте интенсивность, по
которому
происходит переход, – get_Main().ContactRate * get_Main().AdoptionFraction.
Данный переход будет моделировать покупку продукта знакомым этого
человека. От того, насколько быстро владелец продукта сумеет убедить своего
знакомого в необходимости покупки, будет зависеть от силы убеждения этого
человека и от того, сколько знакомых он встречает за год;
Рис. 101. Свойства перехода
4) задайте Действие перехода: deliver( "Buy!", RANDOM ); Такой переход
посылает сообщение случайно выбранному человеку. Метод deliver() отсылает
сообщение другому агенту. Первый аргумент задает сообщение, которое будет
послано, а
второй задает агента, которому сообщение будет адресовано. В
данном случае сообщение посылается какому-то случайно выбранному агенту
(рис. Х). Данный переход генерирует сигнал для стейтчарта какого-то
знакомого. Затем срабатывает переход стейтчарта, моделирующий покупку
продукта
этим знакомым;
5) добавьте еще один переход из состояния PotentialAdopter в состояние
Adopter (рис. 100). Он будет срабатывать по сигналу, который будет
генерироваться внутренним переходом состояния Adopter;
149
6) измените свойства этого перехода (рис. 102).
Вероятность принятия
решения о покупке продукта будет зависеть от силы убеждения человека.
Переход будет срабатывать, когда диаграмма состояний этого агента получит
сообщение "Buy!" («Купи!») от другого агента – своего знакомого.
Рис. 102. Свойства перехода.
Запустите модель. Изучите динамику изменения числа потребителей и
потенциальных потребителей продукта.
Графики переменных должны
представлять собой S-образные кривые.