Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЖЦ программгоно обеспечения на примере ООО Этал...docx
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
1.06 Mб
Скачать

2.2 Порядок построения имитационной модели

Перед созданием модели «Жизненного цикла программного обеспечения (на примере ООО Вектор)» мы выбираем тип модели, в данном случае мне подойдет агентная модель. Модель будет содержать созданные Мастером создания модели классы активных объектов Main и Person. Активные объекты являются основными строительными блоками модели AnyLogic. Активные объекты могут моделировать любые объекты реального мира: машины, людей, здания, аппаратное обеспечение, программное обеспечение и т.д. В нашем случае активный объект Person будет моделировать агентов (людей). Этот класс активного объекта был автоматически объявлен агентом (тем самым он получил доступ к специальной функциональности агента). После конфигурирования шаблона создаваемой модели появится окно (Рисунок 2). В левой части расположены панель «Проекты». Панель «Проекты» обеспечивает навигацию по элементам моделей, открытым в текущий момент времени. В центре рабочей области AnyLogic расположен графический редактор. В правой части рабочей области отображается панель Палитра, а внизу - панель Свойства. Панель Палитра содержит разделенные по категориям элементы, которые могут быть добавлены на графическую диаграмму класса активного объекта или эксперимента. Панель Свойства используется для просмотра и изменения свойств выбранного в данный момент элемента (или элементов) модели.

Рисунок 2.-Диаграмма Main

1.Моделирование продаж под влиянием рекламы

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

Открываем диаграмму класса Person и добавляем элемент «Параметр» из палитры «Основная». Называем AdEffectiveness (Рисунок 3). В панели свойство во вкладке «Основные» в поле «Значение по умолчанию» устанавливаем 0.011.

Рисунок 3.- Изменение свойства элемента «Параметр»

Затем открываем диаграмму класса Person (рисунок 4). Меняем имя верхнего и нижнего состояния.

Рисунок 4.- Диаграмма Person

Левую стрелку удаляем. Правой стрелки изменяем свойство: в поле «происходит» устанавливаю параметр «С заданной интенсивностью» и в поле вводим AdEffectiveness (рисунок 5).

Рисунок 5.- Изменение свойств элемента «Transition»

В панели «Проекты», выделяем эксперимент Simulation. На странице «Модельное время» панели Свойства, выбираем «В заданное время» из выпадающего списка «Остановить». В расположенном ниже поле ввожу 8 (рисунок 6). Модель остановится после того, как истекут 8 единиц модельного времени.

Рисунок 6.-Настройка запуска модели

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

Рисунок 7.- Результат моделирования продаж под влиянием рекламы

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.- Результат модели после изменения свойств

4.Моделирование повторных покупок

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

Вначале мы зададим срок службы продукта. Предположим, что средний срок службы нашего продукта - 1 год.

Открываем диаграмму класса Person. Создаем параметр с названием «DiscardTime». Устанавливаем тип «int». Значение по умолчанию устанавливаю 1 (рисунок 23).

Рисунок 23.- Добавление элемента «Параметр – DiscardTime»

Добавляем элемент «Переход - Transition». Этот переход будет срабатывать по прошествии срока службы нашего продукта, заданного параметром DiscardTime, после того, как управление диаграммы состояний перейдет в состояние Adopter. Поэтому нужно оставить в свойстве «Происходит по» принятое по умолчанию значение Таймауту и ввести в поле «Таймаут» get_Main().DiscardTime. Метод get_Main() здесь возвращает экземпляр класса Main, в котором мы задали параметр DiscardTime (рисунок 24).

Рисунок 24.- Добавление элемента «Transition»

В панели «Проекты», выделяем эксперимент Simulation:Main. На странице «Модельное время» панели «Свойства», выбираю «Нет» из выпадающего списка «Остановить» (рисунок 25).

Рисунок 25.- Изменение свойств модельного времени

Запускаем модель и с помощью диаграммы можно проследить динамику изменения числа потребителей продукта. Видно, что насыщение рынка в модели с повторными покупками не достигается (рисунок 26).

Рисунок 26.- Результат моделирования жизненного цикла программного обеспечения