Курсовая работа: Имитационное моделирование группового обслуживания с несколькими этапами и двойной очередью: работа оптового магазина
· время, оставшееся до прибытия следующей заявки из входного потока;
· текущая длина первичной очереди (вычисляемое поле).
Отношения дружественности между классами построены следующим образом: друзьями класса Client являются Clerk и Shop, другом класса Clerk - класс Shop.
2.3 События и методы
Каждому из пяти возможных состояний клерка соответствует событие, в результате которого он покидает это состояние и переходит в другое. Каждому событию, в свою очередь, сопоставлен отдельный метод. Перечислим эти события:
1. Прибытие клерка на склад.
2. Завершение поиска заказанного товара.
3. Прибытие клерка с товаром к ожидающим ею клиентам.
4. Завершение расчетов с очередным клиентом.
5. Принятие заказа у клиентов из первичной очереди.
Подробнее остановимся на реализации последнего метода. Если первичная очередь не пуста и ее длина достигла значения МИГ, объект Shop пытается препоручить как можно больше клиентов одному из свободных клерков. После того как клерк выбран, ему посылается сообщение, соответствующее методу 5, с двумя параметрами: указателем на первичную очередь, чтобы клерк мог скопировать часть ее клиентов во вторичную, и количеством клиентов, заказы у которых магазин предписывает принять клерку. Возвращает же он объекту Shop указатель на клиента первичной очереди, который теперь становится в этой очереди первым, то есть на новую голову связного списка. Первичную очередь Shop продвигает сам. Все эти действия выполняет метод-диспетчер run().
Методы класса Shop:
· прибытие нового клиента из внешнего потока и постановка ею в первичную очередь;
· выбор клерка, который должен принять заказ. Метод выбирает случайным образом одного клерка из числа свободных в данный момент.
3. Реализация модели
3.1 Программная реализация
Имитационное моделирование это процесс конструирования модели реальной системы и постановки экспериментов на этой модели с целью либо понять поведение системы, либо оценить (в рамках ограничений) различные стратегии, обеспечивающие функционирование системы. Имитационное моделирование является экспериментальной и прикладной методологией, которая:
· описывает поведение системы;
· строит теории и гипотезы, которые могут объяснить наблюдаемое поведение;
· использует эти теории для предсказания будущего поведения системы, то есть тех воздействий, которые могут быть вызваны изменениями в системе или изменениями способов ее функционирования.[1]
При выполнении данной программы генерируются число занятых клерков, среднее время периода занятости клерка, средняя длина первичной очереди, среднее число клиентов в магазине, среднее время пребывания клиента в магазине, средний объем одного заказа. Другими словами, в имитационном эксперименте входные данные «пропускаются» через логическую структуру, чей ответ «подражает» ответы реальной системы на входные данные. Требуется составить алгоритм, и реализовать его. Для моделирования системы группового обслуживания с несколькими этапами и двойной очередью (работа оптового магазина), был выбран высокоуровневый язык программирования C++ и написана программа на этом языке, позволяющая в полной мере отразить функционирование системы. Для проведения анализа зависимостей некоторых показателей друг от друга была использована программа gnuplot.
3.2 Построение графиков
3.2.1 Программа gnuplot
Gnuplot портативная программа для визуализации данных и создания графиков функций для операционных систем UNIX, IBMOS/2, MSWindows, DOS, Macintosh, VMS, Atari и многих других. Эта программа защищена авторским правом, но свободна для распространения.
Gnuplot поддерживает множество видов графиков как двух-, так и трехмерных. Он может рисовать, используя линии, точки, боксы, контуры, векторные поля, поверхности и различный связанный текст.[2]
Gnuplot имеет собственную систему команд, может работать интерактивно (в режиме командной строки) и выполнять скрипты, читаемые из файлов. Также используется в качестве системы вывода изображений в различных математических пакетах: GNU Octave, Maxima и других. [3]
Gnuplot поддерживает много различных форматов для выдачи: интерактивные графические терминалы (с мышью и функциями горячих клавиш), прямой вывод на плоттеры и современные принтеры, запись в различные форматы файлов (eps, fig, jpeg, LaTeX, metafont, pbm, pdf, png, postscript, svg и так далее). Gnuplot легко расширяем для включения новых функций. [2]
3.2.2 Использование программы для построения графиков
Для того, чтобы нарисовать график, достаточно указать набор команд в тэгах <plot>...</plot>. Основные команды состоят из задания области определения функции (для одномерных графиков это переменная «x», для двухмерных «x», «y»), и команды отрисовки одномерной или двухмерной функции, заданной в символьном виде. Синтаксис функции интуитивно понятен, «+», «-», «*», «/» обозначают стандартные арифметические операторы (умножение должно быть явным, никаких математических сокращений типа «3x» и т. п.), «**» означает возведение в степень, скобки "(", «)» используются для задания приоритета.
Кроме операторов, есть набор стандартных математических функций:
Тригонометрические функции sin, cos, tan, константа pi, и им обратные asin, acos, atan.