FackOff25/Queury_theory_model
Folders and files
| Name | Name | Last commit date | ||
|---|---|---|---|---|
Repository files navigation
Задание: Требуется разработать программу, реализующую дискретно-событийное моделирование системы, рассмотренной в задании 2 домашнего задания №4. Обратите внимание, что все интервалы времени подчиняются законам распределений, носящим непрерывный характер. Поэтому категорически неверными является выбор целочисленных типов данных для моментов и интервалов времени, и тем более инкремент модельного времени с единичным шагом. Нужно реализовать именно переход от события к событию, как это сделано в GPSS и других проблемно-ориентированных системах. Для упрощения можно ограничиться использованием единственного потока случайных чисел для генерации всех необходимых случайных величин. Результатом работы программы должен быть лог-файл, содержащий записи типа: «В момент времени 12.345 транзакт с идентификатором 1 вошёл в модель», «В момент времени 123.456 транзакт с идентификатором 123 встал в очередь 1», «В момент времени 234.567 транзакт с идентификатором 234 занял устройство 2», «В момент времени 345.678 транзакт с идентификатором 345 освободил устройство 1», «В момент времени 456.789 транзакт с идентификатором 456 вышел из модели». Система из 2 задания: Моделирование будем проводить в течение 1 часа, в качестве единицы времени будем выбирать секунду. Время между приходом покупателей распределено на отрезке [0; R1+G1+B1]. Время обслуживания на первой кассе распределено на отрезке [R1; R1+G1+B1]. Время обслуживания на второй кассе распределено на отрезке [G1; R1+G1+B1]. При принятии решения покупатель сперва проверяет, есть ли свободная касса, и, если есть, направляется к ней. Если же обе кассы заняты, то выбирает кассу, очередь к которой в данный момент короче (очередь понимается с бытовой точки зрения, хотя модель можно было бы упростить, если иначе выбрать расположение блоков DEPART). Если же свободны обе кассы, или очередь к ним одинакова, то выбирается первая касса. Описание входных данных: Отсутсвуют Описание алгоритма: Класс события Event: Информационные поля: Содержит момент времени, когда произойдёт событие, время конца смены (когда события прекращают происходить), номер транзакта, с которым связано событие, строка с самим событием (Например «вошёл в устройство 1»), тип события (В данной программе: 1-вошёл в модель, 2-вышел из модели, 3-занял устройство, 4-освободил устройство, 5-занял очередь, 6-освободил очередь) и необязательное поля устройства с которым связано событие. Методы: «произвести» событие (Заносит событие в переданный логфайл. Если событие происходит после конца смены, то ставится приставка “FEC: “, означающая предсказание события), возвращение значений информационных полей. Класс устройства Device: Информационные поля: идентификатор устройства, время окончания смены (окончание работы устройства), очередь, привязанная к устройству, логическое поле, содержащее занято ли устройство. Методы: получение событий занятия и освобождение через момент занятия/освобождения и номера транзакта, захват и освобождение устройства (переключает лог. поле), проверка, занято ли устройство. Класс очереди Queue: Информационные поля: идентификатор очереди, время окончания смены (все покупатели вынужденно уходят), список транзактов в очереди. Методы: вход и выход из очереди (возвращают событие входа/выхода транзакта из очереди), возвращение длины и проверка пустая ли очередь Основной класс: Создаётся список событий (всегда упорядоченных по времени) и устройства/очереди. Список событий заполняется событиями прихода транзактов в модель до конца смены. Начинается очистка списка с начала следующим образом: из списка берётся первый транзакт, после чего он удаляется из списка. Согласно тому, какого типа событие он воспроизводится вместе с последующими: приход в модель сопровождается выбором куда идти транзакту, выбор осуществляется согласно заданию, используя методы классов, а после занятия в список заносится событие освобождения устройства, выход с устройства сопровождается выходом из модели и, при наличии транзактов в очереди устройства, выходом транзакта из неё с последующим занятием устройства. Остальные события или происходят сразу за другими, т.е. не заносятся в список, а исполняются сразу, либо не влекут за собой событий и просто исполняются. Исполнение происходит пока список не опустеет. Описание выходных данных: Лог-файл, содержащий записи типа: «В момент времени 12.345 транзакт с идентификатором 1 вошёл в модель», «В момент времени 123.456 транзакт с идентификатором 123 встал в очередь 1», «В момент времени 234.567 транзакт с идентификатором 234 занял устройство 2», «В момент времени 345.678 транзакт с идентификатором 345 освободил устройство 1», «В момент времени 456.789 транзакт с идентификатором 456 вышел из модели».