Моделювання роботи в машинному залі в термінах 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