Шпаргалка: Моделирование работы. Simula
Название: Моделирование работы. Simula Раздел: Рефераты по информатике, программированию Тип: шпаргалка | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Моделирование работы в машинном зале в терминах Simula Постановка задачи. В студенческом машинном зале расположены две мини-ЭВМ и одно устройство подготовки данных (УПД). Студенты приходят с интервалом 8±3 мин. и треть из них хочет испытать УПД и ЭВМ, а остальные только ЭВМ. Допустимое количество студентов в машинном зале 4 чел., включая работающего на УПД. Работа на УПД занимает 9±4 мин. Работа на ЭВМ - 15±10 мин.; 20% работавших на ЭВМ возвращаются для повторного использования УПД и ЭВМ и остаются при этом в машинном зале. Если студент пришел в машинный зал, а там уже есть 4 чел., то он ждет не более 15±2 мин. в очереди в машинный зал и, если нет возможности в течение этого времени начать работать, то он уходит. Смоделировать работу в машинном зале в течение 48 часов. Определить: · загрузку УПД и обеих ЭВМ, · максимальную длину очереди в машинный зал, · среднее время ожидания в очереди в машинный зал, · распределение общего времени работы студента в машинном зале, · количество студентов, которые не дождались возможности поработать и ушли. Решение задачи. Текст программы. Текст программы полностью приведен в конце данного документа. Схема решения в терминах предметной области. Собираясь приступить к работе в машинном зале, студент подходит к нему и проверяет, есть ли очередь в машинный зал. Если таковой нет, то он ищет в последнем свободное место, а если очередь есть, то становится в ее конец. Затем, либо входит в машинный зал, либо создает очередь, состоящую из одного человека (его самого). После этого ждет в течение 15±2 мин. Если за это время место в зале не освобождается, студент уходит, в противном же случае, он покидает очередь и попадает в машинный зал. Работа студента в машинном зале происходит следующим образом. Студент определяет, приступить ли ему к работе УПД, а затем на одной из ЭВМ (по условию задачи, число таких студентов составляет треть от общего числа посетителей) или пройти сразу к ЭВМ (все остальные). После работы на ЭВМ каждый студент может либо покинуть машинный зал, либо приступить к повторной работе (20%), теперь уже точно на УПД и ЭВМ. Схема решения задачи в терминах языка Симула. Глобальные переменные и массивы. M,U,C,P – целые числа, служащие для создания в программе четырех различных потоков независимых величин; I – счетчик цикла FOR (используется для вывода таблицы); MZCap – целое число, обозначающее число мест в машинном зале; Num – число студентов, покинувших очередь; Nmb – число студентов, дождавшихся обслуживания; MAX – максимальная длина очереди; Toz – суммарное время ожидания в очереди; Pupd – время простоя УПД; Pcomp – время простоя обеих ЭВМ; QUEUE – очередь в машинный зал; QUPD – очередь на УПД; QCOMP – очередь на ЭВМ; UPD1 – ссылка на УПД; COMP1 – ссылка на пару ЭВМ; Std – массив действительных чисел из 10 элементов, в которые помещаются данные о числе студентов, проделавших работу за i-й интервал времени [Ti-1,Ti]; Tim – массив действительных чисел, в котором хранятся границы временных интервалов Ti. Процессы. GENER – процесс, имитирующий появление студента у машинного зала; STUDENT – процесс, описывающий действия студента; COMP – процесс, изображающий работу двух мини-ЭВМ; UPD – процесс, изображающий работу УПД; Получение результатов. Для получения результатов используются перечисленные в пункте 2.3.1 глобальные переменные и следующие соотношения: Загрузка УПД = 1 - Pupd/time; Загрузка ЭВМ = 1 - Pcomp/time; Число ушедших студентов = Num; Максимальная длина очереди = MAX; Среднее время ожидания в очереди =Toz/(Num + Nmb) Распределение общего времени работы студента в машинном зале получено в виде массивов std и tim. Комментарии к программе. Подробные комментарии приведены в тексте программы в конце данного документа. Результаты. Загрузка УПД = 33,8%; Загрузка ЭВМ = 82,1%; Число ушедших студентов = 109; Максимальная длина очереди = 3; Среднее время ожидания в очереди = 9,79 мин. Распределение общего времени работы студентов в машинном зале приведено в таблице 2.1. Таблица 2.1
Исследование адекватности модели. Метод исследования. Рассмотренный далее метод не претендует на абсолютную точность, но, тем не менее, позволяет примерно оценить соответствие модели реальной ситуации. Метод заключается в использовании внесения изменений в начальные данные. При этом анализируются изменения получаемых результатов. Применение метода к поставленной задаче. Вся информация по измененным входным данным и полученным результатам представлена в таблице 3.1 Знаком “|” отделяются значения для исходной задачи от значений для задачи, получаемой в результате внесения изменений. Таблица 3.1
Приведенные здесь результаты показывают, что полученная модель с достаточной точностью отображает реальную ситуацию в рамках поставленной задачи. Сравнительный анализ моделей. В приведенной ниже таблице даны искомые значения, полученные при помощи двух моделей: в реализации на GPSS и в реализации на языке Симула. Таблица 4.1
Как видно, приведенные величины отличаются друг от друга несущественно. Это означает, что обе модели с достаточной точностью можно считать адекватными друг другу . SIMULATION begin integer M,U,C,P,I; comment потоки случайных величин и счетчик цикла; integer MZCap; comment вместительность машинного зала; integer Num, comment число студентов, покинувших очередь; Nmb; comment число студентов, дождавшихся обслуживания; integer MAX; comment максимальная длина очереди; integer Toz; comment суммарное время ожидания в очереди; integer Pupd, comment время простоя УПД; Pcomp; comment суммарное время простоя двух ЭВМ; ref (HEAD) QUEUE; comment очередь в машинный зал; ref (HEAD) QUPD; comment очередь на УПД; ref (HEAD) QCOMP; comment очередь на ЭВМ; ref (UPD) UPD1; comment УПД; ref (COMP) COMP1; comment пара мини-ЭВМ; real array std (1:10); comment число студентов в i-м интервале; real array tim (1:9); comment интервалы гистограммы; comment описание работы генератора, имитирующего появление студентов; PROCESS class GENER; begin CREAT: activate new STUDENT; comment студент подходит к машинному залу; hold(randint(5,11,M)); comment интервал перед приходом следующего; goto CREAT; end GENER; comment описание действий студента; PROCESS class STUDENT; begin integer vyb, comment возможность выбора работы: на УПД и ЭВМ (3) или только на ЭВМ (1 и 2); rep, comment возможность повтора работы (5); wat; comment время, до которого студент может ждать в очереди; integer tm; comment фактическое время ожидания или работы; vyb:=randint(1,3,P); comment если 3, то работа на УПД и ЭВМ; rep:=randint(1,5,P); comment если 5, то повторить работу; wat:=time+randint(13,17,P); comment время максимального ожидания; tm:=time; comment засечь время; into(QUEUE); comment встать в очередь в машинный зал; if (QUEUE.cardinal>=MAX) then comment если число людей в очереди больше, чем ранее; MAX:=QUEUE.cardinal; comment записать новое значение; while MZCap>=4 do begin comment пока в машинном зале нет мест; hold(0.1); comment подождать 6 секунд; if time>wat then begin comment если текущее время превысило максимум; out; comment покинуть очередь; Num:=Num+1; comment увеличение числа ушедших студентов; Toz:=Toz+time-tm; comment увеличение суммарного времени ожида- ния; goto STOP; comment завершить все действия; end; end; out; comment покинуть очередь; Toz:=Toz+time-tm; comment увеличение суммарного времени ожидания; Nmb:=Nmb+1; comment увеличение числа студентов, дождавшихся обслуживания; MZCap:=MZCap+1; comment уменьшение числа мест в машинном зале; tm:=time; comment засечь время; if (vyb=3) or (vyb=2) then begin comment если студент собирался работать на УПД; UPD: into(QUPD); comment занять очередь на УПД; activate UPD1 delay 0; comment занять УПД; passivate; comment ждать конца выполнения работы; end; into(QCOMP); comment занять очередь на ЭВМ; activate COMP1 delay 0; comment занять ЭВМ; passivate; comment ждать конца выполнения работы; if rep=5 then comment если работу нужно повторить; begin rep:=1; comment сброс повторения; goto UPD; comment перейти к УПД; end; histo(std,tim,time-tm,1); comment сохранить статистику; MZCap:=MZCap-1; comment освободить место в зале; STOP: comment завершение всех действий; end STUDENT; comment описание работы мини-ЭВМ; PROCESS class COMP; begin ref (STUDENT) S; comment студент, занимающий место; integer Nach; comment время начала простоя; START: S:-QCOMP.first; comment первый студент в очереди; S.out; comment покидает ее,; hold(randint(5,25,C)/2); comment работает на ЭВМ; activate S; comment и переходит к следующему действию; Nach:=time; comment засечь время; passivate; comment ждать следующего студента; Pcomp:=Pcomp+(time-Nach)/2; comment увеличить время общего простоя; goto START; end; comment описание работы УПД; PROCESS class UPD; begin ref (STUDENT) S; comment студент, занимающий УПД; integer Nach; comment время начала простоя; START: S:-QUPD.first; comment первый студент в очереди; S.out; comment покидает ее,; hold(randint(5,13,U)); comment работает на УПД; activate S; comment и переходит к следующему действию; Nach:=time; comment засечь время; passivate; comment ждать следующего студента; Pupd:=Pupd+time-Nach; comment вычислить общее время простоя; goto START; end UPD; comment инициализация потоков случайных чисел; M:=2;U:=1;C:=3;P:=4; QUEUE:-new HEAD; comment создание очереди в машинный зал; QUPD:-new HEAD; comment создание очереди на УПД; QCOMP:-new HEAD; comment создание очереди на ЭВМ; UPD1:-new UPD; comment создание УПД; COMP1:-new COMP; comment создание ЭВМ; comment установка временных интервалов гистограммы; tim(1):=15; tim(2):=30; tim(3):=45; tim(4):=60; tim(5):=75; tim(6):=90; tim(7):=105; tim(8):=120; tim(9):=135; comment создание и запуск генератора студентов; activate new GENER; hold(2880); comment моделирование работы системы в течение 48 часов; comment вывод полученных значений; outfix(1-Pupd/time,3,5);outimage; comment загрузка УПД; outfix(1-Pcomp/time,3,5);outimage; comment загрузка ЭВМ; outfix(Num,0,5);outimage; comment число ушедших студентов; outfix(MAX,0,5);outimage; comment максимальная длина очереди; outfix(Toz/(Num+Nmb),2,5);outimage; comment среднее время ожидания в очереди; comment вывод распределения общего времени работы студентов в машинном зале; for I:=1 step 1 until 9 do begin outint(tim(I),11); comment время работы; outint(std(I),11); comment число студентов; outimage; end; end |