Введення транзактів у модель і вилучення їх із неї

За кількістю каналів обслуговування системи масового обслуговування поділяються на одноканальні та багатоканальні системи. Для імітації обслуговування таких систем у GPSSW використовуються об’єкти апаратної категорії. До них відносять одноканальні (ОКП) і багатоканальні (БКП) пристрої, логічні ключі (перемикачі).

Одноканальні пристрої (ОКП) характеризуються такими основними властивостями:

· кожний ОКП у будь-який момент часу може обслужити тільки один транзакт;

· наступний транзакт у процесі обслуговування повинен або зачекати своєї черги обслуговування, або переміститися у будь-яке інше місце;

· наявність вищого пріоритету у транзакта перериває його поточне обслуговування (тільки для блоків PREEMPT, RETURN);

· при надходженні транзакту до ОКП у моделі потрібно врахувати час, необхідний для його обслуговування.

Для опису в моделі різних ОКП використовують символічні назви, які задаються так само, як і назви блоків.

У процесі моделювання можуть використовуватися такі режими організації функціонування ОКП:

· зайняття ОКП та його звільнення;

· переривання обслуговування ОКП;

· недоступність ОКП і відновлення доступності.

Елементи потоків у процесі моделювання систем у GPSSW імітують транзакти. Тому розглянемо блоки для введення і виведення транзактів у модель GENERATE і TERMINATE. Не існує обмежень на число різних блоків GENERATE в одній моделі.

Блок GENERATE (Генерування)генерує транзакти відповідно до заданих правил формування інтервалів між транзактами. Через цей блок транзакти входять у модель. Блок має наступний формат запису:

GENERATE [А],[В],[C],[D],[Е]

Інтервали часу між послідовними появами транзактів блоку GENERATE називають інтервалом надходження. Специфікація розподілу інтервалів надход­ження в блоці GENERATE задається операндами А і В. Наявність квадратних дужок означає, що використання даного операнда є необов’язковим.

Операнд А – середній інтервал часу між послідовними надходженнями транзактів у модель або ймовірнісний розподіл інтервалу із вбудованої бібліотеки процедур, що записується у круглих дужках.

Операнд В – задає модифікатор, що змінює значення інтервалу генерації транзактів у порівнянні з інтервалом, зазначеним операндом А. Є два типи модифікаторів: модифікатор-інтервал і модифікатор-функція.

За допомогою модифікатора-інтервалу задається рівномірний закон розподілу часу між генерацією транзактів.

Операнди А і В можуть бути назвою, додатнім числом, виразом у дужках або безпосередньо СЧА.

Різниця значень (А В), заданих операндами А і В, визначає нижню границю інтервалу, а сума (А + В) – верхню границю рівномірного розподілу. Після генерування чергового транзакта вибирається число з отриманого інтервалу. Це й буде значення часу, через який наступний транзакт вийде із блоку GENERATE.

Коли операнди А і В задають у вигляді констант (В – модифікатор-інтервал), значення з інтервалу рівномірного розподілу повинно бути невід’ємними числами.

Можна вибрати генератор рівномірно розподілених випадкових чисел. Він встановлюється на сторінці Random Numbers (Випадкові числа) у жур­налі настроювань моделі. Потрібно вибрати EditSettings (Виправ­лен­ня ► Настроювання) і сторінку Random Numbers (Випадкові числа), на якій у поле введення GENERATE ввести номер генератора – будь-яке додатне число. За замовчуванням використовується генератор з номером 1.

Операнди А і В не обов'язково повинні бути задані. За замовчуванням передбачається їхнє нульове значення. Наприклад, А = 22.5, В = 0. Оскільки В = 0, то інтервали часу розподілені рівномірно, тобто інтервал часу надходження дорівнює 22.5. Це приклад задання детермінованого значення інтервалів часу.

Більш складні інтервали часу надходження транзактів (не за рівномірним законом) можуть бути задані з використанням модифікатора-функції. Під дією модифікатора-функції значення операнда А множиться на значення функції, заданої операндом В.

Інтервал між транзактами, тобто час настання наступного транзакта, обчислюється після того, як згенерований транзакт залишає блок GENERATE. Якщо після GENERATE знаходиться блок, який може затримувати згенерований транзакт, то час генерування наступного транзакту обчислюється після зняття умови блокування. Тому значення середнього інтервалу між транзактами буде більшим, ніж середнє значення операнда А. Це може зумовити помилку. Для її уникнення необхідно за блоком GENERATE розміщати блок, який не блокує просування транзактів.

Незалежно від способу обчислення інтервалу часу значення операнда В у блоці GENERATE не повинне перевищувати значення операнда А. Від’ємне значення інтервалу часу викличе зупинку процесу моделювання через помилку “Від’ємний час затримування”.

Розглянемо три інші операнди блоку GENERATE.

Операнд С (початкове затримування) – це момент часу, у який у блоці GENERATE повинен з’являється перший транзакт. Тоді всі інші надход­ження транзактів здійснюються відповідно до розподілу інтервалів часу, що задаються операндами А і В. Операнд С можна використовувати як для прискорення, так і для затримування надходження першого транзакту або для задання надходження в потрібний момент часу. Це значення може бути меншим, рівним або більшим від середнього часу, заданого операндом А. Коли операнд С не використовується, інтервали генерування визначаються операндами А і В.

Операнд D задає граничне значення загальної кількості транзактів, які можуть увійти в модель через блок GENERATE протягом часу моделювання. Коли це значення досягнуте, блок GENERATE перестає бути активним. Якщо операнд D не використовується, то блок GENERATE залишається активним протягом усього часу моделювання і може генерувати необмежену кількість транзактів.

Операнд Е встановлює клас пріоритету кожного із транзактів, що входять у модель через блок GENERATE. Для задання пріоритетів використовується послідовність цілих чисел. Чим більше число, тим вищий пріоритет. Якщо операнд Е не використовується, то пріоритет транзактів, що генеруються блоком GENERATE, дорівнює нулю за замовчуванням.

У GPSSW операнди А, В і С можуть бути дійсними числами, а операнди D i E приймають значення тільки цілих додатних і цілих чисел відповідно.

Незважаючи на це, що операнди А і D є необов’язкові, у будь-якому блоці GENERATE обов'язково задається або операнд А або операнд D. Як операнд не можна використовувати параметри транзактів. Зазначимо, що транзакт не повинен входити в блок GENERATE. Якщо транзакт намагається це робити, виникає помилка виконання.

Наведемо приклади використання блоків GENERATE:

GENERATE 28 – інтервал часу між згенерованими транзактами є величина детермінована і дорівнює 28, а кількість згенерованих транзактів є необмеженою.

GENERATE,,, 28 – операнди А, В, С не використовуються, їх значення за замовчуванням дорівнює нулеві; це означає, що у початковий момент модельного часу будуть згенеровані 28 транзактів.

GENERATE 55, 7 – інтервал часу між транзактами є випадкова величи­на, рівномірно розподілена в інтервалі (55–7, 55+7).

GENERATE 28, FN$Evlany – інтервал часу між транзактами є випадкова величина, рівномірно розподілена за законом, що заданий у вигляді табличної функції Evlany.

GENERATE 28,10,100,250,5 – інтервал часу між транзактами є рівномірно розподілена величина в інтервалі (18, 38); момент формування першого транзакта дорівнює 100 одиницям модельного часу; всього за час моделювання даним блоком буде згенеровано 250 транзактів; всім згене­рованим транзактам присвоюється значення пріоритету, що дорівнює 5.

GENERATE (Exponential (1, 0, 50)) – інтервал часу між транзактами є випадкова величина, розподілена за експоненціальним законом з середнім значенням 50; параметри процедури мови PLUS Exponential мають такий зміст: перший параметр – номер вбудованого генератора рівномірно розподілених в інтервалі (a, b) випадкових чисел (може мати значення від 1 до 999); другий і третій параметри відповідно характеризують зміщення (мінімальне значення) і середнє значення (математичне сподівання) випадкових величин.

Наведені приклади демонструють різні способи задавання операндів блоку GENERATE.

Зазначимо, що у початковий момент часу в кожному блоці GENERATE здійснюється підготовка до виходу одного транзакта. На цій стадії модель ще повністю не ініціалізована. Тому всі СЧА, описані в блоці GENERATE, повинні бути вже визначені. Для цього у моделі блоку GENERATE повинні передувати команди визначення EQU, INITIAL, FUNCTION, VARIABLE, FVARIABLE.

Розглянемо ще приклад використання блоку GENERATE.

GENERATE 100,FN$EXPON,,100

Тут транзакти створюються через інтервал часу, що дорівнює добутку числа 100 на значення функції EXPON.

Транзакти видаляються з моделі за допомогою блоку TERMINATE (Завершити). Блок має наступний формат запису:

TERMINATE [A]

Значенням операнда А є число одиниць, на яке блок TERMINATE зменшує вміст лічильника завершення, який визначає момент закінчення моделювання. Операнд А може бути назвою, додатним цілим числом, виразом у дужках, СЧА або СЧА*<параметр>. За замовчуванням значення операнда А дорівнює нулю. У цьому випадку транзакт знищується, а значення лічильника завершення не міняється.

Лічильник завершення являє собою комірку пам'яті, що зберігає додатнє ціле число, вказане до початку процесу моделювання командою START (Почати). Це число задає час моделювання.

У процесі моделювання транзакти потрапляють у блок TERMINATE і у відповідності зі значенням операнда А віднімають певне число з лічильника завершення. Досягнення лічильником нуля означає завершення процесу моделювання. Число блоків TERMINATE у моделі не обмежені, але лічильник завершення є тільки один.

Розглянемо приклади:

TERMINATE 1 – транзакт, який поступає у блок, вилучається з моделі, а лічильник завершення, початкове значення якого встановлюється командою START, зменшується на 1.

TERMINATE – транзакт вилучається з моделі, а лічильник завершення процесу моделювання не змінюється.

Для керування часом моделювання з врахуванням завершення інтервалу часу необхідно:

· включити в модель сегмент із блоків GENERATE і TERMINATE;

· у всіх інших блоках TERMINATE моделі використати операнд А за замовчуванням;

· у команді START операнду А надати значення 1.

Такий спосіб можна реалізувати за допомогою сегмента


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: