Имитационное моделирование жизненного цикла товара

Автор работы: Пользователь скрыл имя, 26 Ноября 2012 в 14:03, курсовая работа

Краткое описание

Цель написания данной курсовой работы: имитационное моделирование деятельности фирмы жизненного цикла товара фирмы с помощью программы AnyLogic.
Задачи написания данной курсовой работы:
Изучить теоретический материал.
Рассмотреть программный продукт AnyLogic.

Прикрепленные файлы: 1 файл

моделирование ивс.doc

— 586.00 Кб (Скачать документ)

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

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

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

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

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

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

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

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

Разработка  имитационной модели жизненного цикла  товара

  • Краткая деятельности предприятия

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

  • Разработка имитационной модели жизненного цикла товара

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

    • Создаем новый проект:
    1. Щелкнем мышью по кнопке панели инструментов Создать появится диалоговое окно Новый Проект.
    1. Щелкнем мышью по кнопке Выбрать… и выберите директорию, в которой вы будете хранить файлы проекта.
    2. Укажем имя нового проекта Product Stimyl в поле редактирования Имя проекта.
    3. Подтверждаем операцию, нажав кнопку ОК.

    Создали новый проект. В центре появилась структурная  диаграмма в центре рабочей области 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. Пусть средний срок службы продукта равен полтора года. Сделаем параметр глобальным.

    Информация о работе Имитационное моделирование жизненного цикла товара