Имитационное моделирование жизненного цикла товара на примере ООО "Стимул"

КУРСОВАЯ РАБОТА

по курсу

«Имитационное моделирование экономических процессов»



Тема:

"Имитационное моделирование жизненного цикла товара на примере ООО "Стимул""

















Брянск 2010


Введение



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

С помощью имитационных моделей можно проигрывать различные сценарии поведения потребителей, поставщиков, конкурентов, что во многом определяет развитие предприятия в будущем. Модели дают возможность проверить различные идеи, гипотезы и предположения относительно развития бизнеса, проанализировать последствия их реализации. Деятельность предприятия в модели воспроизводится посредством описания движения денежных потоков как событий, происходящих в различные периоды времени.

Моделировать экономические ситуации возможно с помощью программного продукта AnyLogic. Пакет моделирования AnyLogic поддерживает различные подходы моделирования. AnyLogic является одним из инструментов моделирования, позволяющим быстро создавать гибкие модели с агентами, взаимодействующими как друг с другом, так и со своим окружением. AnyLogic поддерживает все возможные способы задания поведения агентов – диаграммы состояний (стейтчарты), синхронное и асинхронное планирование событий.

Актуальность данной темы определяется необходимостью сравнения различных вариантов функционирования недетерминированных экономических процессов с помощью экспериментальных методов исследования.

Цель написания данной курсовой работы: имитационное моделирование деятельности фирмы жизненного цикла товара фирмы ООО «Стимул» с помощью программы AnyLogic.

Задачи написания данной курсовой работы:

Изучить теоретический материал.

Рассмотреть программный продукт AnyLogic.

Построить имитационную модель жизненного цикла товара ООО «Стимул».

Смоделировать несколько экономических ситуаций на рынке.

Провести анализ полученных результатов.

Объектом исследования является деятельность компании ООО «Стимул».

Предметом исследования является изучение жизненного цикла товаров ООО «Стимул».

Методы исследования: монографический и имитационное моделирование.






Теоретические основы имитационного моделирования



Сущность понятия «имитационное моделирование»



Имитационное моделирование – это разработка и выполнение на компьютере программной системы, отражающей структуру и функционирование (поведение) моделируемого объекта или явления во времени. Такую программную систему называют имитационной моделью этого объекта или явления. Объекты и сущности имитационной модели представляют объекты и сущности реального мира, а связи структурных единиц объекта  моделирования отражаются в интерфейсных связях соответствующих объектов модели. Таким образом, имитационная модель – это упрощенное подобие реальной системы, либо существующей, либо той, которую предполагается создать в будущем. Имитационная модель обычно представляется компьютерной программой, выполнение программы можно считать имитацией поведения исходной системы во времени.

В русскоязычной литературе термин «моделирование» соответствует американскому «modeling» и имеет смысл создание модели и ее анализ, причем под термином «модель» понимается объект любой природы, упрощенно представляющий исследуемую систему. Слова «имитационное моделирование» и «вычислительный (компьютерный) эксперимент» соответствуют англоязычному термину «simulation». Эти термины подразумевают разработку модели именно как компьютерной программы и исполнение этой программы на компьютере.

Итак, имитационное моделирование – это деятельность по разработке программных моделей реальных или гипотетических систем, выполнение этих программ на компьютере и анализ результатов компьютерных экспериментов по исследованию повеления моделей. Имитационное моделирование имеет существенные преимущества перед аналитическим моделированием в тех случаях, когда:

отношения между переменными в модели не линейны, и поэтому аналитические модели трудно или невозможно построить.

модель содержит стохастические компоненты.

для понимания поведения системы требуется визуализация динамики происходящих в ней процессов.

модель содержит много параллельно функционирующих взаимодействующих компонентов.

Во многих случаях имитационное моделирование – это единственный способ получить представление о поведении сложной системы и провести ее анализ.

Имитационное моделирование реализуется посредством набора математических инструментальных средств, специальных компьютерных программ и приемов, позволяющих с помощью компьютера провести целенаправленное моделирование в режиме «имитации» структуры и функций сложного процесса и оптимизацию некоторых его параметров. Набор программных средств и приемов моделирования определяет специфику системы моделирования – специального программного обеспечения.

В отличие от других видов и способов математического моделирования с применением ЭВМ имитационное моделирование имеет свою специфику: запуск в компьютере взаимодействующих вычислительных процессов, которые являются по своим временным параметрам – с точностью до масштабов времени и пространства – аналогами исследуемых процессов.

Имитационное моделирование как особая информационная технология состоит из следующих основных этапов:

Структурный анализ процессов. Проводится формализация структуры сложного реального процесса путем разложения его на подпроцессы, выполняющие определенные функции и имеющие взаимные функциональные связи согласно легенде, разработанной рабочей экспертной группой. Выявленные подпроцессы, в свою очередь, могут разделяться на другие функциональные подпроцессы. Структура общего моделируемого процесса может быть представлена в виде графа, имеющего иерархическую многослойную структуру, в результате появляется формализованное изображение имитационной модели в графическом виде. Структурный анализ особенно эффективен при моделировании экономических процессов, где (в отличие от технических) многие составляющие подпроцессы не имеют физической основы и протекают виртуально, поскольку оперируют с информацией, деньгами и логикой (законами) их обработки.

Формализованное описание модели. Графическое изображение имитационной модели, функции, выполняемые каждым подпроцессов, условия взаимодействия всех подпроцессов и особенности поведения моделируемого процесса (временная, пространственная и финансовая динамика) должны быть описаны на специальном языке для последующей трансляций.

Построение модели (build). Обычно это трансляция и редактирование связей (сборка модели), верификация (калибровка) параметров.

Проведение экстремального эксперимента для оптимизации определенных параметров реального процесса.



Система моделирования моделирования AnyLogic TM



Пакет моделирования AnyLogic TM поддерживает различные подходы моделирования. В этой курсовой описывается агентный подход моделирования, успешно применяемый в различных сферах деятельности. При помощи агентов моделируют рынки (агент – потенциальный покупатель), конкуренцию и цепочки поставок (агент – компания), население (агент – семья, житель города или избиратель) и многое другое. Агентные модели позволяют получить представление об общем поведении системы, исходя из предположений о поведении ее элементов, при отсутствии знания о глобальных законах-то есть в наиболее общем случае. AnyLogic TM является единственным инструментом моделирования, позволяющим быстро создавать гибкие модели с агентами, взаимодействующими как друг с другом, так и со своим окружением. AnyLogicTM поддерживает все возможные способы задания поведения агентов – диаграммы состояний (стейтчарты), синхронное и асинхронное планирование событий.

Агентные модели в программе реализуются с помощью специальной Библиотеки агентного моделирования AnyLogic Agent Based Library. Она предоставляет возможность задания функциональности, которая часто требуется в агентных моделях. Библиотека находится в стадии разработки, и на данный момент она содержит только один объект – AgentBase, который, будучи добавлен в класс активного объекта агента, позволяет использовать различные временные и пространственные модели, задавать сети контактов агентов, а также другие важные свойства.

Агенты группируются в популяции. Агенты одной и той же популяции используют одинаковые:

Временную модель.

Пространственную модель.

Сеть.

Тип взаимодействия.

В одной модели может быть несколько популяций, причем каждая популяция может содержать объекты различных классов. Принадлежность агента той или иной популяции определяется параметром PopulationName объекта AgentBase. Популяция создается при создании первого агента, ссылающегося на ее имя. Она использует значения глобальных параметров из настроек объекта AgentBase этого агента. Агенты, созданные позднее, не будут иметь возможность изменять свойства этой популяции, но должны иметь совместимые настройки.

Инициализация сети и расположения агента внутри популяции производится при наступлении специального события, запланированного на момент времени 0; поэтому она затрагивает все объекты, уже созданные к тому времени при инициализации модели. Вот как это происходит:

Если в качестве значения параметра DefaultNetwork не выбран тип ALL IN RANGE, то происходит создание сети

Применяется заданное по умолчанию расположение (дискретное или непрерывное)

Если в качестве значения параметра DefaultNetwork выбран тип ALL IN RANGE, то происходит создание сети.

В случае дискретного времени, первый шаг («тик часов») будет совершен сразу после инициализации модели. Но обратите внимание, что если в модели на момент времени 0 будут запланированы другие события, то неизвестно, какое из действий будет выполнено раньше – инициализация сети и расположения агентов или какие-то из запланированных событий.

Для всех агентов, динамически создаваемых во время выполнения модели, никакие контакты с другими агентами по умолчанию не устанавливаются.

Объект AgentBase поддерживает две временные модели: непрерывную – CONTINUOUS и дискретную – DISCRETE. Непрерывная модель подразумевает, что агенты сами управляют временем, т.e. они могут иметь таймеры, стейтчарты и уравнения, планирующие какие-то индивидуальные активности во времени. Дискретная модель подразумевает, что агенты работают синхронно и пошагово.

В модели с дискретной временной моделью популяция генерирует события («тики часов») в моменты времени 0, 1, 2… При наступлении каждого такого события выполняется следующая последовательность действий:

Для всей популяции один раз вызывается код параметра OnBeforeStepGlobal (предполагается, что этот код содержит глобальные действия, не связанные с какими-либо отдельными агентами).

У каждого агента популяции вызывается код параметра OnBeforeStep

Для всей популяции один раз вызывается код параметра OnStepGlobal (опять же, предполагается, что этот код содержит глобальные действия, не связанные с какими-либо отдельными агентами)

Справочное руководство по Agent Based Library

У каждого агента популяции вызывается код параметра OnStep

Дискретная временная модель не означает, что у агентов не может быть своих активностей – они могут выполнять любые действия параллельно с дискретными «тиками» часов модельного времени.

Объект AgentBase поддерживает две пространственные модели: непрерывную – CONTINUOUS и дискретную – DISCRETE. В моделях с непрерывным пространством каждый агент имеет кординаты (x, y), и не существует никаких ограничений на плотность или расположение агентов в пространстве. Можно управлять расположением агентов, либо изменяя текущие значения координат (параметры Xdynamic и Ydynamic) (тогда должен быть выбран режим управления местоположением агента DYNAMIC USER DEFINED), или используя функции API, отвечающие за передвижение агентов: moveTo, stop, jumpTo, и т.д. (тогда должен быть выбран режим управления местоположением STATIC OR MOBILE).

Начальное расположение агентов в непрерывном пространстве задается параметром DefaultLayoutContinuous. Использование параметров SpaceWidth и SpaceHeight имеет смысл, только если используется заданное по умолчанию расположение агентов. Если используется дискретная модель пространства, то агенты помещаются в ячейки, причем в каждой ячейке может быть не более одного агента. Количество ячеек задается параметрами SpaceRows (количество строк) и SpaceColumns (количество столбцов). Начальное расположение агентов задается параметром DefaultLayoutDiscrete. В дискретном пространстве существует понятие соседства агентов. Тип соседства задается параметром Neighborhood. При типе соседства EUCLIDIAN функция getNeighbors() возвратит объект типа Vector, содержащий всех агентов, находящихся в ячейках, которые имеют общие границы с данной ячейкой (если таковые имеются). Если же будет выбран тип соседства MOORE, то будут также учитываться агенты и в ячейках, соседних с данной по диагонали, то есть, в ячейках, имеющих общие углы с этой ячейкой.

Если Вы создадите анимацию агента, то на анимации активного объекта, содержащего объект агента, агенты будут расположены согласно их текущим координатам.

Каждый агент может иметь контакты с другими агентами этой же популяции (если значение параметра DefaultNetwork не равно NONE). Список всех агентов, соединенных с этим агентом, можно получить с помощью функции getContacts().

Существует несколько предопределенных типов сетей: RANDOM, SCALE FREE, и т.д. Можно использовать один из предопределенных типов сетей, но можно также соединять агентов «вручную» с помощью функций connectTo/disconnectFrom.

Можно использовать сеть для посылки сообщений соединенным агентам с помощью функций sendToRandomContact и sendToAllContacts. Если у агента создана анимация, то при желании можно отобразить на ней линии, показывающие связи между соединенными агентами.

Стандартный тип сети не означает, что агенты не могут иметь каких-то других соединений. Можно задать любую топологию сети взаимодействий агентов, устанавливая и сохраняя соответствующие связи. Например, можно промоделировать семьи, создав в объекте агента переменные Parent и Children, которые будут хранить ссылки на агента-родителя и агентов-детей соответственно.

Если создается анимацию агента, то можно сделать анимацию интерактивной, задав реакцию на щелчок мышью по анимации агента (для этого нужно установить параметр Clickable в true). Область, чувствительная к щелчку мыши, будет ограничена пунктирной рамкой анимации агента. Действие, которое будет выполняться при совершении щелчка мышью по анимации агента, задается параметром OnClick. В частности, рядом с анимацией агента может показываться любая необходимая информация об агенте (можно изменить содержание отображающегося текста с помощью параметра InfoString).

Объект AgentBase также предоставляет механизм обмена сообщениями между агентами. Функции sendTo… используются для пересылки сообщений различного типа агентам той же популяции. При получении агентом сообщения, начинает выполняться код параметра OnReceive. В этом коде можно задать обработчик события получения сообщения, при этом сообщение будет доступно как встроенная переменная message (типа Object), а агент-отправитель сообщения – как переменная sender (типа ActiveObject).

Как обычно, можно задать любой другой механизм взаимодействия между агентами: они могут вызывать функции друг друга, изменять значения переменных, и т.д.






Разработка имитационной модели жизненного цикла товара ООО «Стимул»



Краткая организационно-экономическая характеристика предприятия ООО «Стимул» и его деятельности



Общество с ограниченной ответственностью «Стимул» (далее ООО «Стимул») создано в 1995 году. Зарегистрировано советом учредителей в г. Брянске в 1995 году. Расположено в северо-восточной части города. Предприятие имеет 0,5 га площади, на которой расположено складское и торговое хозяйство, административно-управленческие помещения.

Целью деятельности предприятия является: получение прибыли путём использования имущества ООО «Стимул», осуществление производственно-хозяйственной, коммерческой и прочей деятельности, в порядке и в соответствии с действующим законодательством Российской федерации. Предметом деятельности ООО «Стимул» является: производство товаров народного потребления и предоставление платных услуг населению.



Разработка имитационной модели жизненного цикла товара ООО «Стимул»



В начале создадим новый проект для модели.

Создаем новый проект:

Щелкнем мышью по кнопке панели инструментов Создать появится диалоговое окно Новый Проект.

Щелкнем мышью по кнопке Выбрать… и выберите директорию, в которой вы будете хранить файлы проекта.

Укажем имя нового проекта Product Stimyl в поле редактирования Имя проекта.

Подтверждаем операцию, нажав кнопку ОК.

Создали новый проект. В центре появилась структурная диаграмма в центре рабочей области AnyLogic, окно Проект – в левой панели, и окно Свойства в правой.





Рис. 1. Структурная диаграмма в центре рабочей области AnyLogic



Первым шагом при создании модели является создание агентов. В AnyLogicTM для создания агентов вначале создали класс активного объекта, который будет задавать внутреннюю структуру агента, а затем создали необходимое количество экземпляров этого класса, каждый из которых будет представлять отдельного агента модели. Создаем новый класс активного объекта, кликаем по кнопке панели инструментов Новый класс активного объекта. В диалоговом окне задаем имя Имя нового класса: Person.





Рис. 2. Создание нового класса активного объекта


Теперь добавим агентов в модель. Откроем структурную диаграмму класса Main, сделав двойной щелчок мышью по элементу Main в окне Проект. Перетащим мышью класс Person из окна Проект на структурную диаграмму класса Main. Назовем объект people. Зададим количество человек в модели. На вкладке Количество окна Свойства зададим Количество объектов: 1000. Автоматически создано 1100 экземпляров класса Person, каждый из которых будет представлять отдельного агента. Зададим характеристики агента. Характеристики агента задаются с помощью параметров класса. Все агенты обладают общей структурой, поскольку все они задаются объектами одного класса. Параметры же позволяют задавать характеристики индивидуально для каждого агента. Зададим подверженность человека влиянию рекламы. Откроем структурную диаграмму класса Person, сделав двойной щелчок мышью по элементу Person в окне Проект. В окне Свойства, кликаем мышью по кнопке Новый параметр. В появившемся диалоговом окне Параметр, задаем свойства параметра. Изменим имя параметра. В поле Имя введем Ad_Effectiveness. Зададим значение параметра. Введем 0.011 в поле По умолчанию.





Рис. 3. Подверженность человека влиянию рекламы




Рис. 4. Среднегодовое количество встреч человека



Зададим среднегодовое количество встреч человека. Аналогично создаем параметр Contact_Rate. Предположим, что человек в среднем встречается со 90 людьми в год. Введем в поле редактирования По умолчанию 90.

Зададим силу убеждения человека, влияющую на то, сколько людей он сможет убедить в необходимости купить продукт. Для этого создаем параметр Adoption_Fraction. Зададим значение 0.014.





Рис. 5. Сила убеждения человека



Создадим вспомогательные переменные. Для этого откроем структурную диаграмму класса Person, сделав двойной щелчок мышью по элементу Person в окне Проект. Щелкнем мышью по кнопке панели инструментов Переменная, а затем щелкнем по диаграмме класса. На диаграмме появится голубой кружок, обозначающий переменную.

Когда поместили элемент на структурную диаграмму, этот элемент стал выбранным, и дальше изменили свойства элемента в окне Свойства. В дальнейшем для изменения свойств элемента нужно было вначале щелчком мыши выделить его на диаграмме или в окне Проект. Изменили имя переменной на model в поле редактирования Имя. Задали Тип переменной: Main. Main – это класс корневого объекта нашей модели. Задали начальное значение: (Main) getOwner(). Эта переменная понадобится нам, чтобы упростить доступ к окружению (объекту класса Main) из кода объектов, моделирующих агентов. Аналогично создадим переменную isAdopter: с помощью этой переменной мы будем определять, является ли данный человек владельцем продукта, или нет.

Зададим поведения агента Поведение агента задается визуально с помощью стейтчарта (диаграммы состояний). Для создания откроем структурную диаграмму класса Person, сделав двойной щелчок мышью по элементу Person в окне Проект. Кликнем мышью вначале по кнопке панели инструментов Стейтчарт, а затем по диаграмме. На диаграмме появится значок стейтчарта. Сделаем двойной щелчок мышью по этому значку. Автоматически откроется диаграмма со следующим стейтчартом рис 7.





Рис. 6. Сейтчарт



В окне Свойства, зададим новое Имя стейтчарта: adoption. Щелкнем мышью по состоянию state, нажмем F2 и переименуем состояние в PotentialAdopter. Это начальное состояние, о чем свидетельствует указатель начального состояния, направленный в это состояние. Если стейтчарт будет находиться в этом состоянии, то это будет означать, что этот человек еще не купил продукт. Нарисуем следующий стейтчарт рис 7.

Затем добавили еще одно состояние, щелкнув мышью вначале по кнопке панели инструментов Состояние, а потом по диаграмме под состоянием PotentialAdopter. Назовали его Adopter. Если стейтчарт будет находиться в этом состоянии, это будет означать, что этот человек уже купил продукт. Потом добавили переход из состояния PotentialAdopter в состояние Adopter. Для этого щелкните мышью по кнопке панели инструментов Переход, затем щелкните вначале по границе верхнего состояния, а затем по границе нижнего. Этот переход будет моделировать покупку продукта.





Рис. 7. Сейтчарт



В окне Свойства, выберали По таймауту из выпадающего списка. Время, через которое человек купит продукт, экспоненциально зависит от

эффективности рекламы продукта. Помимо функции экспоненциального распределения exponential(), AnyLogic предоставляет функции и других случайных распределений, таких как нормальное, равномерное, треугольное и т.д.

Посчитаем потребителей продукта. Главная задача модели распространения продукта – изучение того, как быстро люди покупают новый продукт. Поэтому добавили возможность отслеживания того, сколько людей уже купило продукт, а сколько – еще нет. Подсчитывается число потребителей и потенциальных потребителей продукта с помощью специально созданных переменных.

Создали две переменные: adopters и potential_adopters. Изменили стейтчарт. Открыли диаграмму стейтчарта, сделав двойной щелчок мышью по элементу statechart в окне Проект. Щелкнули мышью по состоянию PotentialAdopter. В окне Свойства, задали Действие при входе в состояние и Действие при выходе из этого состояния: при входе в состояние мы будем увеличивать на единицу значение переменной, подсчитывающей количество потенциальных потребителей продукта. При выходе из состояния мы будем уменьшать значение этой переменной. Для того чтобы подтвердить произведенное изменение, вызывали функцию setModified() объекта, моделирующего окружение. Кроме того, измерилои значение переменной isAdopter, чтобы показать, купил ли этот человек наш продукт (если да, то значение переменной равно true, если нет, то false). Аналогично задалисвойства состояния Adopter. Запустим модель. Построим проект с помощью кнопки панели инструментов Построить.

Теперь изучим динамику процесса. С помощью диаграмм можно понаблюдать за динамикой моделируемого процесса. Создадим диаграмму, отображающую динамику изменения числа потребителей и потенциальных потребителей продукта. Подготовили модель к запуску, щелкнув мышью по кнопке панели инструментов Выполнить шаг. Щелкнули мышью по кнопке панели инструментов Новая диаграмма. Появилось окно новой диаграммы. Выбрали переменные, которые должны быть отображены на диаграмме. Щелкнули правой кнопкой мыши по окну диаграммы и выбрали Содержимое диаграмм из контекстного меню. Появилось диалоговое окно Содержимое диаграммы. Добавили переменную potential_adopters, сделав двойной щелчок мышью по значку переменной root.potential_adopters в списке Переменные, параметры, наборы данных.





Рис. 8. Содержимое диаграммы



Аналогичным способом добавили переменную root.adopters. Затем изменили параметры диаграммы Подготовили модель к запуску. Выбрали Параметры диаграммы… из контекстного меню. В появившемся диалоговом окне задали временной диапазон диаграммы.





Рис. 9. Параметры диаграммы


Затем перезапустили модель, поочередно щелкнув мышью по кнопкам панели инструментов Перезапустить и Запустить. Диаграмма показывает, как изменяются переменные potential_adopters и adopters во время моделирования.





Рис. 10. Диаграмма динамики моделируемого процесса



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

В основном люди приобретают новые продукты именно под влиянием убеждения своих знакомых; этот процесс чем-то похож на распространение эпидемии. Чтобы учесть влияние общения людей, внесем в модель небольшие изменения. Изменим стейтчарт. Откроем диаграмму стейтчарта adoption, сделав двойной щелчок мышью по элементу adoption в окне Проект. Добавим в состояние Adopter внутренний переход. Задаем таймаут, по которому происходит переход.

Этот переход будет моделировать покупку продукта знакомым этого человека. То, насколько быстро этот владелец продукта сумеет убедить своего знакомого в необходимости покупки, будет зависеть от силы убеждения этого человека и от того, сколько знакомых он встречает за год. Задаем действие перехода.

Этот переход генерирует сигнал для стейтчарта какого-то знакомого этого человека. Вследствие этого срабатывает переход стейтчарта, моделирующий покупку продукта этим знакомым.





Рис. 11. Изменение стейтчарта





Рис. 12. Задание таймаута перехода





Рис. 13. Задание действия перехода



Добавим еще один переход из состояния PotentialAdopter в состояние Adopter.




Рис. 14. Переход из состояния PotentialAdopter в состояние Adopter



Этот переход будет срабатывать по сигналу, который будет генерироваться внутренним переходом состояния Adopter. На странице свойств перехода, в поле Происходит выберали По сигналу, и задали вид Сигнала. На странице свойств перехода, в поле Происходит выбрали По сигналу, и задали вид Сигнала. Запустили модель щелчком мыши по кнопке панели инструментов Запустить.

Диаграмма будет иметь такой вид:





Рис. 15. Диаграмма учета влияния общения людей



Теперь смоделируем повторных покупок. Созданная модель не учитывает того, что со временем продукт может быть израсходован или прийти в негодность, что вызовет необходимость его повторного приобретения. Смоделируем повторные покупки, полагая, что потребители продукта снова становятся потенциальными потребителями, когда продукт, который они приобрели, становится непригоден. Вначале зададим срок службы продукта. Для этого откройте структурную диаграмму класса Main, сделав двойной щелчок мышью по элементу Мain в окне Проект. Создаем параметр Discard_Time. Пусть средний срок службы продукта равен полтора года. Сделаем параметр глобальным.





Рис. 16. Параметр срок службы продукта



Изменим стейтчарт. Откроем диаграмму стейтчарта двойным щелчком мыши по элементу adoption в окне Проект. Добавим переход из состояния Adopter в состояние PotentialAdopter. Задим следующие свойства перехода:





Рис. 17. Свойства перехода из состояния Adopter в состояние PotentialAdopte



Запустили модель и проследили динамику изменения числа потребителей продукта.




Рис. 18. Диаграмма динамики изменения числа потребителей



Здесь видим, что насыщение рынка в модели с повторными покупками не достигается. Создадим пространственную модель. Теперь сделаем модель пространственной, чтобы задать места проживания людей. Откроем структурную диаграмму класса Person, сделав двойной щелчок мышью по элементу Person в окне Проект. Создадим переменные x и y типа real. Для обеих переменных задаем начальное значение: uniform(300).С помощью функции равномерного распределения uniform() помещаем человека в точку со случайно выбранными координатами от 0 до 300. Далее создаем функцию, вычисляющую расстояние между людьми. В окне Проект, щелкните правой кнопкой мыши по элементу Person и выбираем Новая математическая функция… из контекстного меню. В появившемся диалоговом окне задаем имя функции: distance. В окне Свойства, оставьте выбранный по умолчанию тип возвращаемого значения функции. Задаем аргументы, передающие функции координаты другого человека:





Рис. 19. Аргументы, передающие функции координаты другого человека


Задаем выражение функции:





Рис. 20. Выражение функции sqrt()



Функция sqrt() является предопределенной функцией AnyLogicTM.

Изменим стейтчарт. Откроем диаграмму стейтчарта adoption, сделав двойной щелчок мышью по элементу adoption в окне Проект. Выделим щелчком мыши внутренний переход состояния Adopter и изменим Действие перехода:





Рис. 21. Изменения действия перехода



Люди будут общаться не с любыми своими знакомыми, вне зависимости от места их проживания, а только с теми, кто живет поблизости. Запустим модель.

Создадим анимацию для модели. Теперь необходимо создать наглядную визуализацию исследуемого процесса. AnyLogic TM позволяет создавать интерактивную анимацию с возможностью изменения параметров системы по ходу моделирования процесса.

Вначале создадим переменную, которая понадобится нам для анимации агента. Откроем структурную диаграмму класса Person, сделав двойной щелчок мышью по элементу Person в окне Проект. Создаем переменную color типа Color переменная будет определять цвет, которым агент будет отображаться на анимации. Анимация в AnyLogic TM рисуется на анимационной диаграмме. Создаем анимационную диаграмму. Щелкнем правой кнопкой мыши по элементу Main в дереве модели и выберем Новая анимация… из контекстного меню. В появившемся диалоговом окне зададим имя анимации модели: animation. Автоматически появится окно редактора анимации. Изменим размер анимации. Передвинем рамку анимационной области, чтобы она имела координаты (-20, -20), и измените ее размер на (520, 340). Необходимо показать на анимации людей, проживающих в исследуемой области. Это будет отображаться их точками разных цветов, в зависимости от того, приобрели ли они продукт, или еще нет.

Нарисуем границу исследуемой области. Щелкните мышью по кнопке панели инструментов Прямоугольник. Щелкнем левой кнопкой мыши рядом с точкой (-10, -10) и, не отпуская кнопку, переместим мышь в точку (310, 310). Нарисуем на анимации агентов с помощью маленьких прямоугольников. Щелкнем мышью по кнопке панели инструментов Прямоугольник. В окне Свойства, зададим Имя прямоугольника: agentShape.





Рис. 22. Анимационная область


Зададим размер прямоугольника: ширина – 3, высота – 3. Зададим Количество анимационных объектов. Зададим местоположение фигур агентов на анимации. Зададим цвет фигуры с помощью следующего выражения. Это выражение проверяет, является ли человек владельцем продукта (анализируется значение булевской переменной isAdopter). Если да, то этот человек будет отображаться на анимации синей точкой, если нет - то серой.

Теперь добавим на анимацию индикаторы, с помощью которых будем отслеживать, сколько людей приобрело продукт, а сколько – нет. Добавим индикатор числа потенциальных потребителей продукта. Щелкнем мышью по кнопке панели инструментов Столбцовый индикатор. Поместим индикатор на анимацию, щелкнув мышью справа от прямоугольника исследуемой области. На вкладке Общие окна Свойства, изменим размер индикатора: х – 350, у – 80, ширина – 30, высота 200. На вкладке Столбцовый индикатор окна Свойства, выбирали переменную, которую будет отображать этот индикатор: positional_adopters.

Зададим максимальное отображаемое значение в поле Максимум, изменим цвет индикации и сбросим флажок Отображать шкалу. Добавим индикатор числа потребителей. Добавим подписи к индикаторам. Добавим элемент управления.

Теперь хотим исследовать моделируемый процесс в течение более длительного времени, поэтому сделаем так, чтобы наша модель работала бесконечно. Удалим условие остановки модели. В окне Проект, щелкните мышью по элементу Simulation. На вкладке Дополнительные окна Свойства, сбросили флажок Стоп по времени. Теперь закончили создание анимации. Запускаем модель щелчком мыши по кнопке.






Рис. 23. Анимация модели






Анализ результатов решения задачи



Технология системного моделирования – основа целенаправленной деятельности, смысл которой в обеспечении возможности эффективного выполнения на ЭВМ исследований функционирования сложной системы.

Имитационная модель – специфическое, сложное программное изделие, ее разработка должна вестись с применением высокотехнологичных систем моделирования. Действия исследователя организуются на всех этапах имитационного моделирования, начиная с изучения предметной области и выделения моделируемой проблемной ситуации и кончая построением и реализацией планов машинных экспериментов и обработкой результатов.

Анализ означает, как меняется выходная переменная Y при небольших изменениях различных параметров модели или ее входов X.

Величины параметров систематически варьируются в некоторых представляющих интерес пределах (Хmin Хmax) и наблюдается влияние этих вариаций на характеристики системы (Ymin Ymax). Если при незначительных изменениях величин некоторых параметров результаты меняются очень сильно, то это основание для затраты большого количества времени и средств с целью получения более точных оценок. И наоборот, если конечные результаты при изменении величин параметров в широких пределах не изменяются, то дальнейшее экспериментирование в этом направлении бесполезно и неоправданно. Поэтому очень важно определить степень чувствительности результатов относительно выбранных для исследования величин параметров.

Исследование чувствительности является предварительной процедурой перед планированием эксперимента и позволяет определить стратегию планирования экспериментов на имитационной модели.

Процедуры верификации и валидации собственно имитационной модели и её программного кода требуют проведения широкого спектра тестовых имитационных экспериментов согласно сценариям, разработанным в процессе как тактического, так и стратегического планирования.

Стратегическое планирование направлено на решение задач анализа чувствительности имитационной модели и определение комбинации оптимизирующих исследуемую систему параметров.

Тактическое планирование позволяет определиться с условиями проведения каждого прогона в рамках составленного плана эксперимента и связано с вопросами эффективности и определением способов проведения испытаний (прогонов), намеченных планом экспериментов.

Тактическое планирование направлено на решение проблемы точностного оценивания имитационных моделей и связано с тем, что в условиях стохастической модели, чтобы достигнуть заданной точности результатов экспериментов, стремятся повторять реализации (проводить многочисленные прогоны). Время на серию машинных прогонов сложного модельного эксперимента может быть большим, а выделенное на эксперимент машинное время ограничивается имеющимися временными и машинными ресурсами. Поэтому необходимо стремиться к получению максимальной информации с помощью небольшого числа прогонов.






Заключение



Имитационное моделированием применяется к процессам, в ход которых может время от времени вмешиваться человеческая воля. Человек, руководящий операцией, может в зависимости от сложившейся обстановки, принимать те или иные решения, подобно тому, как шахматист глядя на доску, выбирает свой очередной ход. Затем приводится в действие математическая модель, которая показывает, какое ожидается изменение обстановки, в ответ на это решение и к каким последствиям оно приведет спустя некоторое время. Следующее текущее решение принимается уже с учетом реальной новой обстановки и т.д. В результате многократного повторения такой процедуры руководитель как бы «набирает опыт», учится на своих и чужих ошибках и постепенно выучиваться принимать правильные решения – если не оптимальные, то почти оптимальные.

Процессы, происходящие в природе и обществе, настолько взаимосвязаны, что их изучение по отдельности невозможно. Только изучение всей системы целиком со всеми петлями причинных связей может привести к корректному пониманию системы. В результате построения имитационной модели жизненного цикла товаров ООО «Стимул» была смоделирована модель поведения потребителей на рынке. Где было выявлена специфика покупателей данной группы товаров. Следует сделать вывод, что если жизненный цикл товаров очень долгий, то происходит пресыщение на этом рынке данной продукцией. Если жизненный цикл становиться более не продолжительным, то происходит полное насыщение товарами. Ну а если все же жизненный цикл товаров очень короткий, то происходит дефицит данного товара на потребительском рынке. Отсюда следует, что надо всегда, варьируя данными подбирать оптимальные сроки жизненного цикла товаров.






Список литературы



	Емельянов А.А. Имитационное моделирование экономических процессов: учеб. пособие / А.А. Емельянов, Е.А. Власова, Р.В. Дума; под ред. А.А. Емельянова. – М.: Финансы и статистика, 2002. – 368 с: ил.

	Карпов Ю. Имитационное моделирование систем. Введение в моделирование с AnyLogic 5. – Спб.: БХВ-Петербург, 2005 – 400 с.: ил.

	Лычкина Н.Н. Имитационное моделирование экономических процессов – М: Академия АйТи, 2005 – 160 с.

	Учебное пособие по моделированию в AnyLogic TM. – Copyright XJ Technologies, 2005 – 55 c.: ил.

	Справочное руководство по Pedestrian Library в AnyLogic TM. – Copyright XJ Technologies, 2005 – 82 c.: ил.

	Кельтон В.Д., Лоу А.М. Имитационное моделирование. Классика CS. 3-е изд. – СПб.: Питер; Киев: Издательская группа BHV, 2004. – 847 с.: ил.