Моделирование работы в машинном зале в терминах 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 Число студентов Интервалы
времени 14 0 – 15 86 15 – 30 56 30 – 45 20 45 – 60 19 60 – 75 24 75
– 90 12 90 – 105 9 105 – 120 8 120 – 135 Исследование адекватности
модели. Метод исследования.
Рассмотренный далее метод не претендует на абсолютную точность, но,
тем не менее, позволяет примерно оценить соответствие модели
реальной ситуации. Метод заключается в использовании внесения
изменений в начальные данные. При этом анализируются изменения
получаемых результатов. Применение метода к поставленной
задаче.
Вся информация по измененным входным данным и полученным
результатам представлена в таблице 3. 1 Знаком “|” отделяются
значения для исходной задачи от значений для задачи, получаемой в
результате внесения изменений. Таблица 3. 1 Параметр Загрузка УПД,
% Загрузка ЭВМ, % Максимальная длина очереди, чел. Среднее время
ожидания, мин. Число ушедших студентов, чел. Время работы системы
48 | 100 часов 33, 8 | 32, 0 81, 2 | 83, 1 3 | 3 9, 79 | 9, 72 109
| 324 Число мини-ЭВМ 2 | 1 шт. 33, 8 | 21, 4 81, 2 | 81, 0 3 | 3 9,
79 | 12, 12 109 | 229 Число человек в зале 4 | 2 33, 8 | 31, 8 81,
2 | 83, 6 3 | 3 9, 79 | 9, 76 109 | 149 Интервал между приходами
студентов 8±3 | 1 33, 8 | 34, 0 81, 2 | 83, 2 3 | 18 9, 79 | 14, 36
109 | 2650 Число желающих использовать УПД и ЭВМ 33 | 66 % 33, 8 |
47, 1 81, 2 | 76, 6 3 | 3 9, 79 | 11, 17 109 | 192
Приведенные здесь результаты показывают, что полученная модель с
достаточной точностью отображает реальную ситуацию в рамках
поставленной задачи. Сравнительный анализ моделей.
В приведенной ниже таблице даны искомые значения, полученные при
помощи двух моделей: в реализации на GPSS и в реализации на языке
Симула. Таблица 4.
1 Величина GPSS Симула Загрузка УПД 55, 2 33, 8
Загрузка ЭВМ 96, 5 81, 2 Число ушедших студентов 78 109
Максимальная длина очереди 4 3 Среднее время ожидания 9, 02 9,
79
Как видно, приведенные величины отличаются друг от друга
несущественно. Это означает, что обе модели с достаточной точностью
можно считать адекватными друг другу . 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
Моделирование работы. Simula
139
0
6 минут
Понравилась работу? Лайкни ее и оставь свой комментарий!
Для автора это очень важно, это стимулирует его на новое творчество!