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

167 lines
20 KiB
TeX
Raw Normal View History

2023-01-27 22:32:16 +03:00
\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}