Шаг
7.
Учет
влияния
общения
людей
В
текущей
модели
люди
приобретают
продукт
только
под
влиянием
рекламы.
На
самом
деле,
рекламный
эффект
играет
значительную
роль
только
в
момент
выпуска
продукта
на
рынок. В
дальнейшем
все
большую
роль
будет
играть
общение
людей с
теми
своими
знакомыми,
которые
этот
продукт
уже
приобрели.
В
основном
люди
приобретают
новые
продукты
именно
под
влиянием
убеждения
своих
знакомых;
этот
процесс
чем-то
похож
на
распространение
эпидемии.
Чтобы
учесть
влияние
общения
людей,
мы
должны
внести
в нашу
модель
небольшие
изменения.
Теперь
нам
нужно
задать
еще
пару
новых
параметров.
Задайте
среднегодовое
количество
встреч
человека
- Откройте
диаграмму
класса Person,
сделав
двойной
щелчок
мышью
по
элементу
Person
в
панели Проекты.
- Создайте
новый
параметр.
- Назовите
его ContactRate.
- Предположим,
что
человек
в
среднем
встречается
со 100
людьми
в
год.
Выберите
Тип
int
и
введите
в поле Значение
по
умолчанию
100.
Задайте
параметром
убедительность
человека
- Добавьте
еще
один
параметр,
задающий
силу
убеждения
человека
-
долю
общавшихся
с
владельцем
продукта
людей,
которая
приобретет
этот
продукт
под
влиянием
общения..
- Назовите
этот
параметр
AdoptionFraction.
- Задайте
Значение
по
умолчанию 0.015.
Измените
диаграмму
состояний
агента
- Откройте
диаграмму
класса Person.
- Добавьте
внутренний
переход
в
состояние
Adopter.
В
данном
случае
проще
будет
нарисовать
его,
перейдя
в
специальный
режим
рисования.
Для
того,
чтобы
перейти
в этот
режим,
сделайте
двойной
щелчок
мышью
по
элементу
Переход
в
палитре
Диаграмма
состояний (при
этом
его
значок
должен
поменяться
на этот:
).
Теперь
Вы
можете
рисовать
переход,
последовательными
щелчками
мыши
добавляя
в
нужных
Вам
местах
диаграммы
начальную
точку
перехода,
затем
точки
его
изгиба
и,
наконец,
двойным
щелчком
-
конечную
точку
перехода.
Щелкните
мышью
вначале
по
одной
границе
состояния Adopter,
а затем
сделайте
двойной
щелчок
мышью
по
другой
его
границе.
При
этом
должен
будет
нарисоваться
следующий
переход:
- Это
внутренний
переход
состояния
Adopter.
Этот
переход
будет
моделировать
общение
человека
со
своим
знакомым,
в
результате
тот
может
быть
убежден
в
покупке
нового
продукта.
Интенсивность
срабатывания
этого
перехода будет
зависеть
от
интенсивности
общения
этого
человека.
Выберите
на
странице
свойств
этого
перехода из
выпадающего
списка Происходит С
заданной
интенсивностью и
задайте
новое
значение Интенсивности
срабатывания
этого
перехода:
ContactRate
- Задайте Действие
этого
перехода:
send("Buy!",
RANDOM);
Этот
переход
посылает
сообщение
случайно
выбранному
человеку.
Позднее
мы
сделаем
так, что
вследствие
этого
будет
срабатывать
переход диаграммы
состояния
этого
человека,
моделирующий
покупку
им
продукта.
Метод send()
отсылает
сообщение
другому
агенту.
Первый
аргумент
задает сообщение,
которое
будет
послано,
а
второй
задает
агента,
которому
это
сообщение
будет
адресовано.
В нашем
случае
мы
посылаем
сообщение
какому-то
случайно
выбранному
агенту,
поэтому
в
качестве
значения
этого
аргумента
мы
используем
специальную
константу RANDOM.
Подробное
описание
этого и
других
методов,
используемых
для
организации
взаиомодействия
агентов
смотрите
в сатье
документации
Взаимодействие
агентов.
- Добавьте
еще
один
переход
из
состояния
PotentialAdopter
в
состояние
Adopter.
Этот
переход
моделирует
процесс
приобретения
продукта
под
воздействием
общения
со
знакомым.
- Измените
свойства
этого
перехода.
Не
каждое
обсуждение
достоинств
продукта
со
своим
знакомым
приведет
к
немедленному
решению
о
приобретении
этого
продукта.
Вероятность
такого
развития
событий
будет
зависеть
от того,
насколько
данный
потенциальный
потребитель
подвержен
внушению.
В нашей
модели
данная
характеристика
задается
параметром
AdoptionFraction.
Перейдите
на
страницу
свойств
этого
перехода
и
введите
randomTrue(AdoptionFraction)
в поле Доп.
условие.
Это
дополнительное
условие
приведет
к тому,
что
продукт
будет
приобретаться
с
вероятностью,
задаваемой
параметром
AdoptionFraction.
- Этот
переход
будет
срабатывать,
когда
диаграмма
состояний
этого
агента
получит
сообщение "Buy!"
(то есть,
"Купи") от
другого
агента -
своего
знакомого.
Чтобы
этот
переход
срабатывал
при
получении
сообщения, на
странице
свойств
этого
перехода выберите
из
выпадающего
списка Происходит При
получении
сообщения.
- Теперь
нам
нужно
указать,
что
переход
будет
срабатывать
только
при
получении
сообщения
соответствующего
содержания.
Для
этого
выберите
из
группы
кнопок Тип
сообщения
опцию String,
выберите
ниже
опцию Если
сообщение
равно
и
введите
"Buy!"
в
расположенном
ниже
поле.
Теперь
нам
нужно
изменить
некоторые
свойства
агента,
для
того,
чтобы
получаемые
им
сообщения
от
других
агентов
перенаправлялись
в его
диаграмму
состояний
и
обрабатывались
ею в
соответствии
с
заданной
логикой.
Измените
свойства
агента
- Щелкните
мышью
по
классу Person
в
панели Проекты,
чтобы
открыть
его
свойства
в
панели Свойства.
- Перейдите
на
страницу
свойств
Агент.
- В
поле Действие
при
получении
сообщения
введите
statechart.receiveMessage(msg);
Теперь
когда
агент
получит
сообщение
от
какого-то
другого
агента,
он
будет
перенаправлять
его в
свою
диаграмму
сотсояний,
где оно
будет
обрабатываться
так, как
мы с
вами
это
задали
(а
именно,
вызывать
срабатывание
перехода,
моделирующего
приобретение
продукта
под
влиянием
личного
общения).
Запустите
модель
и
изучите
динамику
процесса
приобретения
продукта.
Вы
можете
увидеть,
что
из-за
учета
влияния
устного
общения
этот
процесс
стал
проистекать
значительно
быстрее.

Графики
переменных
представляют
собой
классические
S-образные
кривые
–
динамика
процесса
в чем-то
напоминает динамику
распространения
заболевания.
Итак,
можно
сказать,
что мы
практически
абсолютно
точно
воспроизвели
результаты,
которые
выдавала
для
данной
постановки
задачи
системно-динамическая
модель.
Сейчас люди
в нашей
модели
случайно
располагаются
в
прямоугольном
пространстве
650x300
километров
(или
других
условных
единиц
расстояния).
И наша
модель
допускает
общение
любого
человека
с
каждым,
вне
зависимости
от того,
на
каком
расстоянии
друг от
друга
они
находятся. Обычно
же у
человека
есть
определенный
круг
знакомых,
которые живут
в
непосредственной
близости
к нему, и
именно
с ними
он
и общается.
Поэтому
мы
хотим,
чтобы в
нашей
модели
общались
только
те люди,
которые
находятся
не
далее
определенного
расстояния
друг от
друга.
Давайте
сделаем
нашу
модель
более
реалистичной,
допустив
возможность
общения
только
тех
людей,
которые
находятся
друг от
друга
на
расстоянии,
не
превышающем 25
километров.
Свойства
формирования
сетей
контактов
агентов,
как и
многие
другие
свойства агентной
модели,
задаются
в
объекте
среда.
Измените
свойства
среды
- Откройте
диаграмму
класса Main.
- Выделите
на
диаграмме
объект environment
,
задающий
настройки
среды,
в
которой
обитают
агенты.
- Перейдите
на
страницу
свойств Дополнительные.
- Нам
нужно
изменить
тип
сети
контактов.
Выберите
Согласно
расстоянию
из
выпадающего
списка Тип
сети
и
введите
25
в
расположенном
ниже
поле Радиус
соединения.

Теперь
нам
нужно
изменить
диаграмму
состояний
агента,
чтобы
сообщение
"Купи
продукт!"
отсылалось
не
случайно
выбранному
агенту,
а
только
тому
агенту,
который
является
знакомым
данного
агента.
Измените
диаграмму
состояний
агента
- Откройте
диаграмму
класса Person.
- Измените
свойства внутреннего
перехода
состояния
Adopter.
- Измените Действие
этого
перехода
на:
send("Buy!",
RANDOM_CONNECTED);
- В
нашем
случае
мы
посылаем
сообщение
какому-то
случайно
выбранному
агенту
из
числа
тех, с
которым
данный
агент
знаком,
поэтому
в
качестве
значения
последнего аргумента
метода send
мы
теперь
используем
специальную
константу RANDOM_CONNECTED.
Теперь
этот
переход
посылает
сообщение
случайно
выбранному
знакомому
этого
человека.
Давайте
теперь
запустим
модель
и
посмотрим,
как
изменилась
динамика
приобретения
продукта:

Можно
увидеть,
что
теперь
агенты
соединены
только
с теми,
которые
находятся
от них
на
расстоянии,
не
превышающем
25 единиц,
а сам
процесс
распространения
продукта
происходит
медленнее.
Шаг
6.
Добавление
диаграммы
Шаг
8.
Моделирование
повторных
покупок