BMSTU/02-ipsm-lab-01-report.tex

167 lines
20 KiB
TeX
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

\documentclass[a4paper,fontsize=14bp]{article}
\input{../common-preamble}
\input{../fancy-listings-preamble}
\input{../bmstu-preamble}
%\setcounter{secnumdepth}{0}
\numerationTop
\begin{document}
\thispagestyle{empty}
\makeBMSTUHeader
% номер, тема, предмет, ?а, кто
\makeReportTitle{лабораторной}{1}{Имитационное моделирование архитектурных решений}{Моделирование информационных процессов и систем}{а}{Кадырбаева А.Р.}
\newpage
\thispagestyle{empty}
\tableofcontents
\newpage
\pagestyle{fancy}
\section{Цель работы}
Целью работы является ознакомление с современными средствами имитационного моделирования архитектурных решений.
\textit{В связи с возникшими проблемами с установкой среды, указанной в методических материалах было выдано другое задание, с применением альтернативного инструментария.}
\subsection{Задача}
Промоделировать работу билетных касс. В кассы есть единая очередь, которую обслуживают две основные кассы. Если основные кассы не справляются с потоком покупателей, то открывается третья касса. Поток покупателей меняется в зависимости от времени суток и становится больше в выходные дни. Расписание потока покупателей приведено ниже.
\textbf{Рабочие дни:}
\begin{itemize}
\item [] 8:0013:00 — десять человек в час;
\item [] 13:0016:00 — пятнадцать человек в час;
\item [] 16:0022:00 — двадцать человек в час.
\end{itemize}
\textbf{Выходные дни:}
\begin{itemize}
\item [] 9:0012:00 — двадцать человек в час;
\item [] 12:0021:00 — сорок человек в час.
\end{itemize}
Покупатели, время ожидания покупки у которых превысило час, уходят из касс, не купив билета. Время обслуживания одного покупателя в кассах меняется случайным образом от 2 до 15 минут и в среднем составляет 5 минут. Предусмотреть в модели учет купивших и некупивших билеты.
\subsection{Задача для самостоятельного решения}
\begin{enumerate}
\item Выявите узкие места в модели и предложите решение.
\item Творческий проект. Создайте модель массового обслуживания. Принимаются собственные инициативы. Если таковых нет, то обратитесь к преподавателю.
\end{enumerate}
\subsection{Этапы решения}
\begin{enumerate}
\item Задание логики работы модели:
\begin{enumerate}[label=\asbuk*),ref=\asbuk*]
\item создание модели;
\item моделирование прихода покупателей;
\item моделирование очереди покупателей;
\item моделирование процесса покупки;
\item моделирование ухода покупателей из касс.
\end{enumerate}
\item Уточнение расписаний:
\begin{enumerate}[label=\asbuk*),ref=\asbuk*]
\item задание расписания прихода покупателей;
\item задание расписания работы кассиров;
\item задание расписания перерывов в работе кассиров;
\item привязка расписания покупателей;
\item привязка расписания работы кассиров;
\item привязка расписания перерывов в работе кассиров.
\end{enumerate}
\item Создание резервной кассы и ухода клиентов, чье ожидание покупки превысило час:
\begin{enumerate}[label=\asbuk*),ref=\asbuk*]
\item моделирование резервной кассы и ресурсов;
\item организация ограничения времени ожидания в кассах;
\item проверка работоспособности модели, добавление часов;
\item организация ухода покупателей, не купивших билет.
\end{enumerate}
\item Добавление динамических графиков в модель:
\begin{enumerate}[label=\asbuk*),ref=\asbuk*]
\item создание наборов данных по проданным и непроданным билетам;
\item создание круговой диаграммы по покупателям;
\item создание временн\'{о}го графика;
\item проверка работоспособности модели.
\end{enumerate}
\end{enumerate}
\section{Результаты проведенных опытов и проеланной работы}
\subsection{Создание модели}
\begin{figure}[H]
\centering
\includegraphics[width=16cm]{01-model-draft.png}
\caption{Черновик созданной модели}
\label{pic:model-draft}
\end{figure}
В среде моделирования была создана модель билетных касс (рис. \hrf{pic:model-draft}) с указанием единиц модельного времени - минутами. Из библиотеки моделирования процессов в рабочей области были созданы:
\begin{itemize}
\item Источник заявок (Source-\code{customer}) - блок моделирует появление заявок в модели. В нашем случае покупатели — это заявки. Начальное значение интенсивности заявок было установлено в 10 заявок в час (первый параметр из задания).
\item Очередь покупателей (Queue-\code{queue}) - блок имитирует накопление заявок в модели, фактически моделирует очередь. Был отмечен пункт «Максимальная вместимость», поскольку в задании ничего не сказано об ограничениях длины очереди.
\item Выбор кассы (SelectOutput) - блок осуществляет выбор очереди, поскольку покупатель может пройти на любую из (например, двух) касс. Пусть покупатель идет во вторую кассу, увидев, что в первой кассе собралось более трех человек. Если величина, возвращенная функцией \code{size()} объекта \code{booking1}, будет больше 3, то значит, что в эту кассу покупатель не пойдет \code{booking1.size() < 4}.
\item Ресурсы для обработки заявок (ResourcePool-\code{booking\_clerk}) - блок не связывается ни с каким блоком в модели, так как через него не должны проходить заявки. Поскольку кассиры могут передвигаться от кассы к кассе, тип ресурса был задан как «Движущийся», с указанием скорости в 2 км/ч. Также было указано количество кассиров: 2.
\item Модель обслуживания (Service-\code{booking1,2}) - блок Service, который включает в себя логику работы: захват ресурсов, удержание заявки и ресурсов, освобождение ресурсов. Блокам была задана вместимость собственных очередей 2 и время задержки (задается функцией треугольного распределения со средним значением 5 минут, минимальным значением 2 минуты и максимальным значением 15 минут \code{triangular(2, 5, 15)}). В «Набор ресурсов» модели обслуживания добавлен созданный ресурс \code{booking\_clerk}. Так в первой и во второй кассах будут работать указанные в ресурсах 2 кассира.
\item Уход покупателя (Sink-\code{exit}) - блок, завершающий исполнение заявки, соединён с выходами обеих касс.
\end{itemize}
В результате запуска моделирования поведения чернового варианта модели были получены значения, показанные на рис. \hrf{pic:model-launch}. Модель с ненастроенным расписанием показывает, что в результате обслуживания 303 покупателей кассиры в среднем были заняты 57\% времени, причём вторая касса использовалась только для 14 покупателей ($4,6(2046)\%$).
\begin{figure}[H]
\centering
\includegraphics[width=16cm]{01-model-launch.png}
\caption{Черновик созданной модели}
\label{pic:model-launch}
\end{figure}
\subsection{Уточнение расписаний}
К созданной модели были добавлены следующие компоненты:
\begin{itemize}
\item Расписание прихода покупателей (\code{schedule\_customer}) - тип расписания «Интенсивность», дискретизация задана в часах, расписание составлено на неделю, поскольку в задании было сказано, что интенсивность меняется по будням и выходным дням, полное расписание представлено на рис. \hrf{pic:schedule-customer};
\begin{figure}[H]
\centering
\begin{subfigure}[b]{0.45\textwidth}
\centering
\includegraphics[width=\textwidth]{01-schedule-customer.png}
\caption{Расписание интенсивности покупателей}
\label{pic:schedule-customer}
\end{subfigure}
\hfill
\begin{subfigure}[b]{0.45\textwidth}
\centering
\includegraphics[width=\textwidth]{01-schedule-clerks-timeout.png}
\caption{Расписание перерывов работы кассиров}
\label{pic:sched-clerk-to}
\end{subfigure}
\caption{Расписания в модели}
\label{pic:schedules}
\end{figure}
\item Расписание работы кассиров - установлено в значения 8:00 - 22:00, расписание перерывов в работе кассиров представлено на рис. \hrf{pic:sched-clerk-to}.
\item Объект \code{customer} был изменён так, чтобы прибытие осуществлялось не согласно интенсивности, а по расписанию интенсивности;
\item Объект \code{booking\_clerk} был изменён так, чтобы количество задавалось не константно, а по расписанию, также в раздел «Смены» было добавлено расписание перерывов;
\end{itemize}
\subsection{Создание резервной кассы и ухода клиентов, чье ожидание покупки превысило час}
Для моделирования резервной кассы был использован аналогичный основным кассам блок service. Время обработки было задано чуть меньше, чем в основных кассах (\code{triangular(1, 3, 15)}). К резервной кассе был привязан дополнительный ресурс \code{reserved\_clerk}. Выход резервной кассы ведёт к объекту \code{exit}.
Согласно условиям задачи тайм-ауты в первой и второй кассе равны 30 минутам, а в третьей кассе — 20 минут. Выходы OutTimeout объектов \code{booking1} и \code{booking2} ведут на вход объекта \code{booking3}. Таким образом, покупатели, чье время ожидания в первой и второй кассах превысило 30 минут, идут в резервную кассу. Уход покупателей, не купивших билет, моделируется так же, как и уход покупателей, купивших билет, но в вхыод \code{without\_ticket}.
\section{Анализ полученных результатов и выводы}
Для сбора данных по количеству проданных билетов во время работы модели используется объект Набор данных. Поскольку нас интересует динамика продаж билетов, то по оси Х зададим модельное время. По оси Y будем сохранять количество покупателей, прошедших через выход (\code{exit.count()}). Данные в наборе обновляются каждые три минуты. Для сбора данных по количеству потерянных билетов \code{without\_ticket.count()} (считаем минимальные потери, то есть каждый ушедший покупатель мог купить один билет). Для удобства визуализации были созданы диаграммы (графики) и круговая диаграмма продаж и упущенных покупателей. На круговой диаграмме, видно конечный результат моделирования - финальное количество купленных билетов и упущенных покупателей.
В результате запуска модели были получены значения, представленные на рис. \hrf{pic:model-final}.
\begin{figure}[H]
\centering
\includegraphics[width=15cm]{01-model-final.png}
\caption{Результат запуска модели}
\label{pic:model-final}
\end{figure}
Симуляция идеальных условий для проектирования системы или изменений системы, выявление «узких мест» и возможность рассмотреть разные стороны работы системы. AnyLogic позволяет сымитировать действия системы с достаточной степенью детализации и гибкости, поэтому полученные сведения могут считаться достоверными и подвергаться дальнейшему анализу.
\section{Контрольные вопросы}
\begin{itemize}
\item \textbf{Выявите узкие места в модели и предложите решение.}
\begin{enumerate}
\item Очевидно, что система не удовлетворяет никаким реалистичным требованиям продаж, поскольку количество упущенных покупателей превышает количество проданных в $\approx 3$ раза. Одним из самых простых решений может быть открытие третьей кассы на постоянной основе.
\item Модель не учитывает, что пользователи, стоящие в общей очереди, скорее всего, не будут в ней стоять после завершения работы касс, поэтому общую очередь следует обнулять в 22:01 каждого дня.
\item Расписания, представленные на рис. \hrf{pic:schedules} в модели менять не целесообразно, поскольку рабочий день и статистика посещений касс вряд ли изменятся по желанию системного аналитика. В связи с чем необходимо изменить логику работы модели. А именно - условие перехода от одной кассы к другой. Так, если каждый покупатель будет отправляться на кассу, которая содержит меньше людей, это позволит более равномерно распределить общий поток.
\end{enumerate}
\item \textbf{Творческий проект. Создайте модель массового обслуживания.}
В индивидуальном задании реализована модель обслуживания интернет-магазина. В интернет-магазин с некоторой интенсивностью приходят заказы, несколько человек с разной скоростью могут обрабатывать заказы и отправлять их на доставку. Доставка осуществляется командой курьеров, по понятной причине, работающей медленнее, но у них больший по длительности рабочий день и скорость перемещения. В результате моделирования (рис. \hrf{pic:model-indi}) стало очевидно, что было потеряно $\approx8\%$ заказов. Также поверхностный анализ показывает, что более загруженное работой подразделение - это курьеры ($68\%$ против $21\%$ у сотрудников, обрабатывающих заказы). Более детально рассмотрев полученную статистику, можно увидеть, что отказы из-за задержек происходят в системе \textbf{только} на этапе доставки, то есть сотрудников склада целесообразно переквалифицировать в сотрудников доставки для снижения показателя потерь.
\begin{figure}[h]
\centering
\includegraphics[height=15cm, angle=90]{01-modify-final.png}
\caption{Моделирование работы интернет-магазина}
\label{pic:model-indi}
\end{figure}
\end{itemize}
\end{document}