
- •Моделювання систем
- •Передмова
- •Моделі процесів і систем
- •Класифікація моделей
- •Основні визначення та класифікація систем масового обслуговування
- •Характеристики систем масового обслуговування
- •Вхідний потік вимог
- •Стратегії керування потоками вимог
- •Класифікація систем масового обслуговування
- •Метод статистичних випробовувань
- •Генератори випадкових чисел
- •Моделювання випадкових подій та дискретних випадкових величин
- •Моделювання неперервних випадкових величин
- •Моделювання нормально-розподілених випадкових величин
- •Моделювання випадкових векторів
- •Моделювання випадкових функцій
- •Статистична обробка результатів моделювання
- •Визначення кількості реалізацій під час моделювання випадкових величин
- •Основне меню gpss World
- •Меню File
- •Меню Edit
- •Панель інструментів gpss World
- •Вікно моделі у системі gpss World
- •Інтерактивний перегляд значень виразів
- •Налаштування параметрів моделювання
- •4.1. Основне меню gpss World
- •4.2. Подання моделей у вигляді блок-діаграм
- •4.3. Основні складові системи gpssw
- •4.4. Об'єкти обчислювальної категорії
- •4.4.1. Константи
- •4.4.2. Системні числові атрибути
- •4.4.3. Арифметичні і логічні оператори
- •4.4.4. Бібліотечні математичні функції
- •4.4.5. Змінні користувача
- •4.4.6. Вирази в операторах gpss
- •4.4.7. Зберігаючі комірки
- •4.4.8. Матриці зберігаючих комірок. Оголошення та ініціалізація матриць
- •4.4.9. Арифметичні змінні й арифметичні вирази
- •4.4.10. Булеві змінні
- •4.4.11. Типи функцій
- •5.1. Введення транзактів у модель і вилучення їх із неї
- •5.2. Блоки для зміни значень параметрів транзактів
- •5.3. Блоки апаратної категорії зайняття та звільнення одноканальних пристроїв
- •5.4. Блоки перевірки стану та передавання керування в одноканальних пристроях
- •5.5. Блоки статистичної категорії
- •5.6. Блоки для зміни послідовності руху транзактів у моделі
- •5.7. Блоки апаратної категорії для переривань одноканальних пристроїв
- •5.8. Блоки апаратної категорії для переведення одноканальних пристроїв у стан недоступності
- •5.9. Створення і застосування списків користувача
- •Основні етапи моделювання у системі gpssw
- •Команди gpss World
- •Інтерактивні можливості gpss World
- •Відлагодження моделей у gpss World
- •Блоки зайняття та звільнення багатоканальних пристроїв
- •Блоки апаратної категорії для переведення багатоканальних пристроїв у стан недоступності та відновлення доступності
- •Блоки перевірки стану багатоканальних пристрів
- •Моделювання перемикачів
- •Основні елементи мови
- •Побудова виразів
- •Plus-оператори та їх призначення
- •Вбудована бібліотека процедур
- •Генератори випадкових чисел
- •Реалізація методу Ньютона для розв’язування нелінійних рівнянь за допомогою мови Plus
- •Налагодження Plus-процедур
- •Команда integrate і блок integration для моделювання неперервних систем
- •Використання plus-процедур для моделювання неперервних систем
- •Використання функцій в імітаційних моделях
- •Генерування випадкових чисел для дискретних рівномірних розподілів
- •Генерування випадкових чисел для дискретних нерівномірних розподілів
- •Генерування випадкових чисел для неперервного рівномірного розподілу
- •Генерування випадкових чисел для неперервних нерівномірних розподілів
- •Функції типу e, l і м
- •9.1. Основні відомості з теорії планування експериментів
- •9.1.1. Повний факторний експеримент
- •Оцінювання точності результатів моделювання
- •Дисперсійний аналіз
- •Однофакторний дисперсійний аналіз
- •9.2.2. Двофакторний дисперсійний аналіз
- •9.3. Технологія дисперсійного аналізу у gpss World
- •9.4. Технологія регресійного аналізу у gpss World
- •9.5. Організація експериментів користувача у gpss World
- •Initial Rezult_tf,unspecified ;Ініціалізація матриці результатів
- •Загальні положення
- •Завдання для виконання роботи
- •Індивідуальні завдання для моделювання
- •Контрольні запитання
- •Загальні положення
- •Завдання для виконання роботи
- •Контрольні запитання
- •Загальні положення
- •Завдання для виконання роботи
- •Індивідуальні завдання для моделювання
- •Контрольні запитання
- •Загальні положення
- •Завдання для виконання роботи
- •Індивідуальні завдання для моделювання
- •Контрольні запитання
- •Загальні положення
- •Завдання для виконання роботи
- •Індивідуальні завдання для моделювання одноканальних розімкнутих смо
- •Індивідуальні завдання для моделювання одноканальних замкнутих смо
- •Контрольні запитання
- •Загальні відомості
- •Завдання для виконання роботи
- •Індивідуальні завдання для моделювання багатоканальних розімкнутих смо
- •Індивідуальні завдання для моделювання багатоканальних замкнутих смо
- •Контрольні запитання
- •Загальні відомості
- •Завдання для виконання роботи
- •Індивідуальні завдання для моделювання
- •Контрольні запитання
- •Загальні відомості
- •Завдання для виконання роботи
- •Індивідуальні завдання для моделювання роботи транспортного конвеєра
- •Індивідуальні завдання для моделювання роботи ділянки цеху
- •Контрольні запитання
- •Загальні відомості
- •Завдання для виконання роботи
- •Індивідуальні завдання для моделювання роботи еом для оброблення завдань з різними пріоритетами
- •Контрольні запитання
- •Загальні відомості
- •Завдання для виконання роботи
- •Індивідуальні завдання для моделювання роботи вузла комутації повідомлень
- •Контрольні запитання
- •Загальні відомості
- •Завдання для виконання роботи
- •Індивідуальні завдання для моделювання поширення вірусу на системному диску
- •Контрольні запитання
- •Загальні відомості
- •Завдання для виконання роботи
- •Індивідуальні завдання для проведення дисперсійного аналізу для дослідження вагомості впливу змінних користувача на об’єкт моделі
- •Контрольні запитання
- •Загальні відомості
- •Завдання для виконання роботи
- •Індивідуальні завдання для розроблення експерименту користувача
- •Контрольні запитання
- •Загальні відомості
- •Завдання для виконання роботи
- •Індивідуальні завдання проведення регресійного аналізу для оптимізації і кількісного прогнозу поведінки системи
- •Контрольні запитання
- •Елементи стандартного звіту
- •Загальна інформація про результати роботи моделі
- •Інформація про імена
- •Інформація про блоки
- •Інформація про об’єкти типу «пристрій»
- •Інформація про об’єкти типу «черга»
- •Інформація про об’єкти типу «багатоканальний пристрій»
- •Інформація про таблиці
- •Інформація про списки користувача
- •Табличні значення критеріїв
- •Значення t-критерію Ст’юдента
5.6. Блоки для зміни послідовності руху транзактів у моделі
Для зміни маршрутів руху транзактів у моделі застосовуються блоки DISPLACE, LOOP, GATE, TEST і TRANSFER. Розглянемо застосування блоків TRANSFER, DISPLACE, LOOP. Використання блоків GATE і TEST для керування в одноканальних пристроях вже розглянуто. Застосування цих блоків у багатоканальних пристроях показано в наступних розділах.
Блок TRANSFER (Передати) є основним засобом для передавання вхідного в нього транзакта в будь-який інший блок моделі. Він має наступний формат:
TRANSFER [А],[В],[С],[D]
Всі режими блоку TRANSFER, крім безумовного, вибіркові, тобто відрізняються один від одного способом вибору чергового блоку, до якого спрямовується активний транзакт. Операнд А задає цей режим вибору. Існують дев'ять режимів роботи блоку TRANSFER:
( ) – безумовний (за замовчуванням);
(.) – статистичний, випадковий вибір одного із двох блоків;
BOTH – послідовний вибір одного із двох блоків;
ALL – послідовний вибір одного з декількох блоків;
PICK – випадковий вибір одного з декількох блоків;
FN – функціональний;
Р – параметричний;
SBR – підпрограмний;
SIM – одночасний.
Операнд А може приймати зазначені вище значення, а також може бути назвою, додатним цілим числом, виразом у дужках, СЧА, СЧА*параметр.
Операнди В і С задають можливі значення номерів наступних блоків або їхнє положення залежно від режимів роботи. Вони можуть бути такими ж, як і операнд А. Якщо операнд В опущений, то замість нього записується номер блоку, що є наступним за блоком TRANSFER. Блок TRANSFER не може відмовити транзакту у вході.
Розглянемо роботу блоку TRANSFER у різних режимах.
У режимі безумовного передавання операнд А не використовується.
Формат блоку:
TRANSFER ,В
Операнд В вказує назву блоку, в який транзакт спробує ввійти. Наприклад:
TRANSFER ,Flag
Після входу транзакт відразу ж намагається ввійти в блок з міткою Flag. Якщо цей блок відмовляє у вході, транзакт залишається в блоці TRANSFER.
Статистичний режим роботи блоку TRANSFER полягає у передаванні транзакта в один із двох блоків випадковим чином. Операнд А використовується і не є зарезервованим словом.
Формат блоку:
TRANSFER А,[В],C
Значення операнда А, яке записується після крапки, визначається тризначним числом, що показує частку (у частках від тисячі) вхідних у блок транзактів, що спрямовуються у блок С. Інші транзакти направляються з ймовірністю (1–А) у блок В або до наступного за номером блоку, якщо операнд В опущений. Значення А може задаватися у вигляді ймовірності – дробового числа з десятковою крапкою, значення якого є меншим від одиниці.
Числове значення операнда А може бути задане будь-яким СЧА. Можливі наступні випадки.
Обчислене значення операнда А менше або дорівнює нулю, тоді здійснюється безумовне передавання транзакта до блоку В. Якщо значення операнда А більше або дорівнює 1 000, то здійснюється безумовне передавання транзакта до блоку С. Якщо 0 < A < 1000, то блок TRANSFER працює у звичайному режимі.
Розглянемо приклади використання блоку TRANSFER у статистичному режимі:
TRANSFER .370,THIS,THAT
Режим вибору заданий числом 370, зокрема 37% усіх транзактів блоку TRANSFER будуть передаватися на блок з міткою THAT, а 63% - на блок з міткою THIS.
TRANSFER .15,Hid,Stop
Транзакти блоку в 15% випадків будуть спрямовані до блоку з міткою Stop, а в інших 85% випадках – до блоку з міткою Hid.
TRANSFER 250,USEL2,USEL3
Активний транзакт з ймовірністю 250/1000 = 0,25 скеровується до блоку з міткою USEL3, а з з ймовірністю 0,75 – до блоку USEL2.
TRANSFER .95,,BOX20
Активний транзакт з ймовірністю 0,95 скеровується до блоку з міткою BOX20 і з ймовірністю 0,05 скеровується за замовчуванням до наступного блоку згідно порядку.
Блок TRANSFER працює в режимі BOTH, якщо в операнді А використовується ключове слово BOTH (Обоє). У цьому режимі кожний транзакт, що ввійшов у блок TRANSFER, перевіряє два шляхи. Спочатку перевіряється можливість увійти в блок В. Якщо транзакт не може ввійти в цей блок, він намагається ввійти в блок С.
Якщо транзакт не може ввійти у блоки, вказані операндами В і С, то він затримується в блоці TRANSFER. Опитування блоків В і С повторюється для кожної зміни поточного модельного часу доти, поки транзакт не отримає можливість увійти в який-небудь блок. Якщо не використовується операнд В, то перевіряється можливість увійти в наступний блок.
Розглянемо приклад використання блоку TRANSFER в режимі ВОТН.
TRANSFER ВОТН,SAM1,SAM2
. . . . . .
SAM1 SEIZE PR52
SAM2 SEIZE PR84
Транзакт блоку TRANSFER намагається ввійти у блок з міткою SAM1. Якщо відповідний пристрій PR52 зайнятий, то транзакт скеровується у блок з міккою SAM2. Якщо пристрій PR84 теж зайнятий, то транзакт залишається у блоці TRANSFER. Зі зміною поточного стану моделювання спроби виходу транзакта, затриманого у блоці TRANSFER, повторюються.
Таким чином, блок TRANSFER у режимі BOTH виконує роль “диспетчера”, тобто розподіляє транзакти між двома ОКП.
Розглянемо роботу блоку TRANSFER у режимі ALL. Тоді в полі операнда А використовується ключове слово ALL. У цьому режимі транзакт, який увійшов у блок TRANSFER, перевіряє можливість увійти в будь-який блок, починаючи із блоку, зазначеного операндом В, і закінчуючи блоком, зазначеним операндом С. Операнд D визначає крок d зміни номера блоку, що перевіряється. Значення кроку дає можливість опитувати певні блоки, розташовані між тими, які задані операндами В і С. Далі транзакт, що ввійшов у блок TRANSFER, намагається ввійти в блок В. Якщо блок В зайнятий, транзакт намагається ввійти в блоки з номерами v + d, v + 2d, ..., z, де v – номер блоку В, z – номер блоку С. При цьому z = v + nd, де п – деяке ціле додатне число.
Якщо транзакт не може увійти ні в один з даних блоків, то він залишається у блоці TRANSFER і зі зміною поточного часу моделювання повторює вищеописану процедуру.
Зазвичай в операндах В і С записуються мітки блоків. Тому блоки варто розташовувати таким чином, щоб під час присвоєння різниця між номерами блоків, зазначених в операндах В і С, була кратна кроку, визначеному в операнді D. Наприклад:
TRANSFER ALL,Met1,Met2,5
Тут режим ALL допустимий, якщо різниця між номерами блоків Metl і Met2 є кратною 5. У моделі це може виглядати так: нехай вимоги розподіляються за трьома ОКП, а чергова вимога обслуговується першим ОКП, який звільнився (рис. 5.3).
Рис.5.3. Імітаційна модель з використанням блоку TRANSFER, що працює в режимі ALL
Вхід транзакта в блок TRANSFER зумовлює послідовну перевірку можливості входу спочатку в блок SEIZE з міткою Metl. Якщо цей блок не дозволяє ввійти, то перевіряється другий блок SEIZE без мітки, тому що різниця між номером цього блоку й блоку з міткою Metl дорівнює 5. Якщо другий блок SEIZE зайнятий, то перевіряється третій блок SEIZE з міткою Met2. Якщо й у нього транзакт не може ввійти, він залишається в блоці TRANSFER. З кожною зміною поточного модельного часу процедура повторюються спочатку, тобто з входженням транзакту в блок SEIZE з міткою Metl.
У блоці TRANSFER операнди В і С також можуть бути номерами блоків, а не мітками. Тоді для наведеного прикладу блок TRANSFER має вигляд:
TRANSFER ALL,5,15,5
Результат моделювання буде той самий.
Варто зазначити, що транзакт, затриманий у блоках TRANSFER BOTH або TRANSFER ALL, просувається, починаючи із блоку В. Отже, у режимі BOTH, коли можливий перехід до обох блоків В і С, блок В має деяку перевагу. Аналогічно й у режимі ALL, коли можливий перехід до декількох блоків, блоки з меншими номерами мають деяку перевагу над блоками з більшими номерами. Підтвердимо це результатами моделювання розглянутого прикладу (рис. 5.4).
Рис. 5.4. Результати моделювання системи з використанням блоку TRANSFER, що працює в режимі ALL
Результати моделювання показують, що найбільший коефіцієнт використання має ОКП KAN1, а найменший – ОКП KAN3. Це незважаючи на те, що середній час обслуговування ОКП KAN3 менший, ніж ОКП KAN1 і він за той самий час міг би обслужити більше число транзактів.
Блок TRANSFER у режимі ALL також виконує роль “диспетчера”, але на відміну від режиму BOTH він розподіляє транзакти між декількома ОКП.
Робота блоку TRANSFER у режимі PICK передбачає використання ключового слова PICK в операнді А. У цьому режимі з послідовності блоків з номерами v, v + 1, v + 2, ..., п випадковим чином вибирається номер одного блоку, до якого спрямовується транзакт (v – номер блоку, зазначеного операндом В, а п – номер блоку, зазначеного операндом С). Всі блоки, включаючи й ті, що зазначені операндами В і С, вибираються з рівною ймовірністю 1/[п - v + 1]. Транзакт намагається перейти тільки до обраного для нього блоку. Якщо транзакт не може відразу перейти до наступного блоку, то він буде чекати в блоці TRANSFER доти, поки не буде знята умова блокування. Номер блоку С повинен бути більшим або рівним v + 1.
У функціональному режимі блок TRANSFER працює тоді, коли замість операнда А використовується ключове слово FN. Із входом транзакта в блок TRANSFER обчислюється значення функції, назва якої задана операндом В. Якщо результат не цілий, то від нього береться ціла частина. Для визначення номера наступного блоку отримане ціле значення додається до операнда С (значення операнда С може бути рівне нулю). Якщо блок з обчисленим номером зайнятий, тоді транзакт залишається в блоці TRANSFER доти, поки не зможе перейти саме до блоку з обчисленим номером. Наприклад:
TRANSFER FN,Kref,P1
TRANSFER FN,9,Р1
У першому прикладі транзакт скеровується до блоку, номер якого є результатом додавання обчисленого й округленого до цілого значення функції з назвою Kref і значення параметра 1 транзакта, що ввійшов. Робота блоку TRANSFER у другому прикладі є аналогічною, тільки функція задана не назвою, а номером.
Для задання параметричного режиму роботи блоку TRANSFER необхідно в операнді А вказати ключове слово Р. У цьому режимі активний транзакт скеровується до блоку, номер якого визначається як сума значення параметра й значення операнда С. Якщо операнд С не використовується, значення параметра і є номером нового блоку. Наприклад:
TRANSFER P,Kid,6
У даному прикладі транзакт скеровується до блоку, номер якого дорівнює сумі значення параметра з назвою Kid і значення операнда С, тобто 6.
Для задання підпрограмного режиму роботи блоку TRANSFER необхідно в операнді А вказати ключове слово SBR. У режимі SBR активний транзакт завжди скеровується до блоку, номер якого зазначений операндом В. Номер блоку TRANSFER потрапляє в параметр, зазначений операндом С. Наприклад:
TRANSFER SBR,Post,Hid
Транзакт, що надійшов у блок скеровується до блоку з міткою Post, а номер блоку TRANSFER записується в параметр із назвою Hid. Якщо такого параметра нема, то він створюється.
Режим SIM (одночасний) блоку TRANSFER введений для випадку, коли потрібне одночасне виконання декількох умов. Кожний транзакт має свій індикатор затримки SIM, який встановлюється в 0 або 1. У цьому індикаторі записується результат будь-якої спроби транзакта ввійти в наступний блок. Якщо існують умови, що перешкоджають входженню транзакта в блок, індикатор SIM цього транзакта встановлюється в 1. Якщо всі умови переходу до наступного блоку виконуються, то індикатор SIM залишається рівним нулю. Якщо не виконується хоча б одна з умов, індикатор SIM встановлюється рівним 1. У таких випадках операнд С вказує блок, у якому перевірялася перша умова, і транзакт виконує перевірку всіх умов, поки вони не будуть виконані одночасно.
Блок LOOP використовується для організації циклів у моделі. Формат блоку наступний:
LOOP А,В
Операнд А – параметр транзакта (зміна циклу), що визначає число повторень якої-небудь ділянки моделі. Операнд В – мітка блоку, з якого починається цикл. В цей блок переходить транзакт, коли параметр, на який здійснюється посилання операндом А, не дорівнює нулеві. Проходження транзактом одного циклу зменшує значення параметра операнда А на одиницю. Коли значення параметра в операнді А дорівнює нулеві, то транзакт переходить до наступного блоку.
Операнди А і В можуть бути назвою, додатним цілим числом, виразом у дужках, СЧА або СЧА*параметр. Як правило, блок LOOP застосовується у парі з блоком ASSIGN.
Роботу блоку LOOP розглянемо на прикладі:
ASSIGN Krosh,5
Start1 SEIZE PC
. . . . .
RELEASE PC
LOOP Krosh,Start1
Коли транзакт, пройшовши ділянку моделі, що починається блоком з міткою Startl, увійде в блок LOOP, значення його параметра з назвою Krosh зменшується на 1. Початкове значення цього параметра дорівнює 5. Якщо це значення не дорівнює нулю, транзакт переходить до блоку з міткою Startl, тобто цикл повторюється. Якщо ж значення параметра циклу дорівнює нулю, тоді задане число повторень виконано. Транзакт переходить до наступного блоку.
Якщо з входом транзакта в блок LOOP виявиться, що транзакта з назвою Krosh немає, тоді відбудеться зупинка процесу моделювання через помилку “Звертання до неіснуючого параметра”.
Блок DISPLACE призначений для знаходження будь-якого транзакта й переміщення його до нового блоку. Блок DISPLACE має формат:
DISPLACE А,В,[С],[D]
Операнд А – номер транзакта, який необхідно перемістити. Операнд В – мітка блоку, до якого переміщається транзакт, зазначений операндом А. Операнд С – номер параметра транзакта, що переміщується, у який записується час, що залишився до кінця його обслуговування, якщо він перебував у списку майбутніх подій. Операнд D – мітка альтернативного блоку для активного транзакта. Операнди А, В, С і D можуть бути назвою, додатним цілим числом, виразом у дужках, СЧА або СЧА*параметр. Наприклад:
DISPLACE (Р5+20),Теm3,Zalushok,Mit1
Операнд А зазначений виразом у дужках. Цей вираз обчислюється й заокруглюється до цілого. Отриманий результат є номером транзакта, який варто перемістити. Далі блок DISPLACE відшукує цей транзакт. При цьому можливі випадки:
транзакт є в моделі й не перебуває в списку майбутніх подій;
транзакт є в моделі й перебуває в списку майбутніх подій;
транзакта з потрібним номером немає в моделі.
У першому випадку транзакт переміщується до блоку з міткою Теm3. У другому випадку визначається час, що залишився до його повторного введення у процес моделювання. Він записується в параметр із назвою Zalushok. Якщо параметра з такою назвою немає, він створюється. Транзакт також переміщується до блоку з міткою Теm3. У третьому випадку активний транзакт, що ввійшов у блок DISPLACE, направляється до блоку з міткою Mit1. Якщо операнда D нема, активний транзакт переходить до наступного блоку.