
- •Содержание
- •Введение
- •1.Теоретические основы имитационного моделирования экономических процессов
- •1.1.Понятие имитационного моделирования экономических процессов
- •1.2.Классификация моделируемых систем
- •1.3. Распространение инновации
- •2. Разработка имитационной модели
- •2.1. Краткая характеристика объекта исследования
- •2.2 Разработка имитационной модели
- •2. Подсчет потребителей продукта
- •3.Учет влияния общения людей
- •4.Моделирование повторных покупок
- •3.Анализ результатов решения задачи
- •3.1 Анализ результатов имитационного эксперимента
- •Заключение
- •Литература
2. Подсчет потребителей продукта
Главная задача модели распространения продукта – изучение того, как быстро люди покупают новый продукт. Поэтому сейчас мы добавим возможность отслеживания того, сколько людей уже купило продукт, а сколько – еще нет. Мы будем подсчитывать число потребителей и потенциальных потребителей продукта с помощью специальных функций сбора статистики по агентам.
Открываем диаграмму Main в панели «Проекты». Выделяю вложенный объект People. В панели «Свойства» на странице «Статистика» добавляем «Функцию сбора статистики». В поле имя ввожу potentialAdopters (являются потенциальными потребителями продукта), задаем условие item.statechart.isStateActive(item.PotentialAdopter). Эта функция будет вести подсчет количества агентов, для которых выполняется заданное условие, т.e. тех агентов, которые находятся в текущий момент времени в состоянии PotentialAdopter. Аналогично создаем еще одну функцию сбора информации. Назовем ее adopter. Задаем условие: item.statechart.isStateActive(item.Adopter) (рисунок 8).
Рисунок 8.-Добавление функций сбора статистики для объекта People
С помощью диаграмм можно понаблюдать за динамикой моделируемого процесса. Сейчас создадим диаграмму, отображающую динамику изменения числа потребителей и потенциальных потребителей продукта. В диаграмме класса Main добавляем элемент из палитры «Статистика» (рисунок 9).
Рисунок 9.- Добавление элемента «Временной график» на диаграмму Main
Теперь необходимо добавить элемент данных. Щелкаем по кнопке «Добавить элемент данных». Называем его «Potential adopters ».В поле значение указываю: people.potentialAdopters(). Ставим синий цвет. Аналогично добавляем еще один элемент данных «Adopters». Задаем здесь значение: people.adopters().Устанавливаем красный цвет. Задаю «Временной диапазон» 8 (рисунок10).
Рисунок 10.- Изменение свойств временного графика
После изменений свойств, временной график приобрел вид, изображенный на рисунке 11.
Рисунок 11.- Изменение временного графика после изменения свойств
Запускаем модель. С помощью диаграммы можно понаблюдать за динамикой моделируемого процесса. Видно, что под влиянием рекламы каждую единицу времени постоянная доля от общей численности потенциальных потребителей продукта приобретает изучаемый нами продукт (рисунок 12).
Рисунок 12.- Результат моделирования «Подсчета потребителей продукта»
3.Учет влияния общения людей
В текущей модели люди приобретают продукт только под влиянием рекламы. На самом деле, рекламный эффект играет значительную роль только в момент выпуска продукта на рынок. В дальнейшем все большую роль будет играть общение людей с теми своими знакомыми, которые этот продукт уже приобрели. В основном люди приобретают новые продукты именно под влиянием убеждения своих знакомых; этот процесс чем-то похож на распространение эпидемии. Чтобы учесть влияние общения людей, мы должны внести в нашу модель небольшие изменения. Теперь нужно задать еще пару новых параметров.
Открываем диаграмму класса Person. Создаем новый параметр «ContactRate» (рисунок 13).
Рисунок 13.- Добавление элементов «Параметр» на диаграмму Person
В свойствах меняю тип. Устанавливаю «int». Значение по умолчанию ввожу 300 (рисунок 14). То есть человек в среднем встречается с 300 людьми в год.
Рисунок 14.- Изменение свойств параметра «ContactRate»
Добавляем еще один параметр под названием «AdoptionFraction». Устанавливаю тип «double». Значение по умолчанию ввожу 0.015 (рисунок 15). Этот параметр задает силу убеждения человека - долю общавшихся с владельцем продукта людей, которая приобретет этот продукт под влиянием общения.
Рисунок 14.- Изменение свойств параметра «AdoptionFraction»
Теперь добавляем элемент «Переход- transition» из диаграммы состояний. Установить его нужно в состояние «Adopter». В свойствах задаю действие: send("Buy!", RANDOM). В поле «Происходит» выбираем «С заданной интенсивностью» (рисунок 15).
Рисунок 15.- Добавление элемента «Transition» и изменение свойств
Добавляем еще один элемент «Переход - Transition» в состояние «Adopter» (рисунок 16).
Рисунок 16.- Добавление элемента «Transition»
В свойствах в поле «тип сообщения» устанавливаю «String». Чтобы этот переход срабатывал при получении сообщения, на странице свойств этого перехода нужно выбрать из выпадающего списка «Происходит»: При получении сообщения. Далее выбрать ниже опцию «Если сообщение равно» и ввести "Buy!" в расположенном ниже поле. В поле «Дополнительное условие» будет: randomTrue(AdoptionFraction) (рисунок 17).
Рисунок 17.- Изменение свойств элемента «Transition»
Переходим в класс Person в панели «Проекты». В панели свойств во вкладке «Агент» в поле «Действие при получении сообщения» ввожу: statechart.receiveMessage(msg) (рисунок 18). Теперь, когда агент получит сообщение от какого-то другого агента, он будет перенаправлять его в свою диаграмму состояний, где оно будет обрабатываться так, как я это задала (а именно, вызывать срабатывание перехода, моделирующего приобретение продукта под влиянием личного общения).
Рисунок 18.- Изменение свойств объекта Person
Запустив модель и изучив динамику процесса приобретения продукта, можете увидеть, что из-за учета влияния устного общения этот процесс стал проистекать значительно быстрее (рисунок 19).
Графики переменных представляют собой классические S-образные кривые – динамика процесса в чем-то напоминает динамику распространения заболевания. Итак, можно сказать, что мы практически абсолютно точно воспроизвели результаты, которые выдавала для данной постановки задачи системно-динамическая модель. Сейчас люди в данной модели случайно располагаются в прямоугольном пространстве. И наша модель допускает общение любого человека с каждым, вне зависимости от того, на каком расстоянии друг от друга они находятся. Обычно же у человека есть определенный круг знакомых, которые живут в непосредственной близости к нему, и именно с ними он и общается. Поэтому можно сделать, чтобы в нашей модели общались только те люди, которые находятся не далее определенного расстояния друг от друга. Сделаем модель более реалистичной, допустив возможность общения только тех людей, которые находятся друг от друга на расстоянии, не превышающем 25 километров.
Рисунок 19.- Результат моделирования «Учета влияния общения людей»
Свойства формирования сетей контактов агентов, как и многие другие свойства агентной модели, задаются в объекте «Среда».
Открываем диаграмму класса Main. Выделяем объект «environment». Этот объект задает среду, в которой обитают агенты. В свойствах переходу в вкладку «Дополнительные». В поле « тип сети» выбираю «Согласно расстоянию». В «Радиус соединения » ввожу 25 (рисунок 20).
Рисунок 20.-Изменение свойств объекта «Enviromnent»
Теперь нужно изменить диаграмму состояний агента, чтобы сообщение "Купи продукт!" отсылалось не случайно выбранному агенту, а только тому агенту, который является знакомым данного агента.
Открываем диаграмму класса Person. Изменяем свойства внутреннего перехода состояния Adopter. Изменяем действие на send("Buy!", RANDOM_CONNECTED). В поле «С заданной интенсивностью» ввожу ContactRate (рисунок 21).
Рисунок 21.- Изменение свойств элемента «Transition»
Запускаем модель. Видно, что теперь агенты соединены только с теми, которые находятся от них на расстоянии, не превышающем 25 единиц, а сам процесс распространения продукта происходит медленнее (рисунок 22).
Рисунок 22.- Результат модели после изменения свойств