ОСНОВИ МОДЕЛЮВАННЯ НА GPSS/PC
ВСТУП
Процеси функціонування різних систем і мереж зв'язку можуть бути представлені тією чи іншою сукупністю систем масового обслуговування (СМО) - стохастичних, динамічних, дискретно-безперервних математичних моделей. Дослідження характеристик таких моделей може проводитися або аналітичними методами, або шляхом імітаційного моделювання [1-6].
Імітаційна модель відображає стохастичний процес зміни дискретних станів СМО в безперервному часу у формі моделює алгоритму. При його реалізації на ЕОМ проводиться накопичення статистичних даних з тих атрибутів моделі, характеристики яких є предметом досліджень. Після закінчення моделювання накопичена статистика обробляється, і результати моделювання виходять у вигляді вибіркових розподілів досліджуваних величин або їх вибіркових моментів. Таким чином, при імітаційний моделюванні систем масового обслуговування мова завжди йде про статистичного імітаційного моделювання [5; 6].
Складні функції моделює алгоритму можуть бути реалізовані засобами універсальних мов програмування (Паскаль, Сі), що надає необмежені можливості в розробці, налагодженні і використанні моделі. Однак така гнучкість купується ціною великих зусиль, що витрачаються на розробку та програмування дуже складних моделюючих алгоритмів, що оперують з списковим структурами даних. Альтернативою цьому є використання спеціалізованих мов імітаційного моделювання [5-7].
Спеціалізовані мови мають засоби опису структури та процесу функціонування моделюється системи, що значно полегшує і спрощує програмування імітаційних моделей, оскільки основні функції моделює алгоритму при цьому реалізуються автоматично. Програми імітаційних моделей на спеціалізованих мовах моделювання близькі до описами модельованих систем природною мовою, що дозволяє конструювати складні імітаційні моделі користувачам, які не є професійними програмістами. Одним з найбільш ефективних і поширених мов моделювання складних дискретних систем є в даний час мова GPSS [1; 4; 7]. Він може бути з найбільшим успіхом використаний для моделювання систем, формалiзуються, у вигляді систем масового обслуговування. Як об'єкти мови використовуються аналоги таких стандартних компонентів СМО, як заявки, що обслуговують прилади, черги і т.п. Достатній набір подібних компонентів дозволяє конструювати складні імітаційні моделі, зберігаючи звичну термінологію СМО. На персональних комп'ютерах (ПК) типу IBM/PC мова GPSS реалізований в рамках пакета прикладних програм GPSS/PC [8]. Основний модуль пакету являє собою інтегроване середовище, що включає крім транслятора з вхідної мови засоби введення і редагування тексту моделі, її налагодження і спостереження за процесом моделювання, графічні засоби відображення атрибутів моделі, а також засоби накопичення результатів моделювання в базі даних та їх статистичної обробки. Крім основного модуля до складу пакету входить модуль створення стандартного звіту GPSS/PC, а також ряд додаткових модулів і файлів. У даному виданні, що складається з двох частин, викладаються основи моделювання систем та мереж зв'язку з використанням пакета GPSS/PC. У першій частині розглядаються основні поняття і засоби GPSS/PC, прийоми конструювання GPSS-моделей і технологія роботи з пакетом. Виклад матеріалу супроводжується невеликими навчальними прикладами. Щодо детальний розгляд мови GPSS/PC викликано відсутністю в літературі навчального матеріалу з даної версії мови. У другій частині розглядаються приклади GPSS-моделей різних систем і мереж масового обслуговування, що використовуються для формалізації процесів функціонування систем і мереж зв'язку. Наводиться також ряд прикладів моделювання систем та мереж зв'язку з використанням GPSS/PC. Детально коментуються тексти GPSS-моделей і результати моделювання. 1. ЗАГАЛЬНІ ВІДОМОСТІ ПРО GPSS/PC b> Початкова програма на мові GPSS/PC, як і програма на будь-якій мові програмування, являє собою послідовність операторів. Оператори GPSS/PC записуються і вводяться в ПК у такому форматі:
номер _строкі ім'я операція операнди; коментарі Всі оператори вихідної програми повинні починатися з номера 0_строкі - цілого позитивного числа від 1 до 9999999. Після введення операторів вони розташовуються у вихідній програмі відповідно до нумерації рядків. Зазвичай нумерація проводиться з деяким кроком, відмінним від 1, щоб мати можливість додавання операторів в потрібне місце вихідної програми. Деякі оператори зручно вводити, не включаючи їх у вихідну програму. Такі оператори не залежать від номера рядка.
У цьому виданні при описі формату операторів і в прикладах моделей номери рядків будуть опускатися для кращої читання текста.Отдельние оператори можуть мати ім'я для посилання на ці оператори в інших операторах. Якщо такі посилання відсутні, то цей елемент оператора не є обов'язковим.
У полі операції записується ключове слово (назва оператора), що вказує конкретну функцію, виконувану даним оператором. Це поле оператора є обов'язковим. У деяких операторів поле операції включає в себе також допоміжний операнд. У полях операндів записується інформація, уточнююча і конкретизуються виконання функції, визначеної в полі операції. Ці поля в залежності від типу операції містять до семи операндів, розташованих у певній послідовності і що позначаються звичайно першими літерами латинського алфавіту від A до G. Деякі оператори взагалі не мають операндів, а в деяких операнди можуть бути опущені, при цьому встановлюються їх стандартні значення (за замовчуванням). Під час запису операндів використовується позиційний принцип: пропуск операнда відзначається комою. Необов'язкові коментарі у разі їх присутності відокремлюються від поля операндів крапкою з комою. Коментарі не можуть содержатьбукв російського алфавіту.
Оператори GPSS/PC записуються, починаючи з першої позиції, всвободном форматі, тобто окремі поля розділяються довільною кількістю пробілів. Під час введення вихідної програми в інтегрованому середовищі GPSS/PC розміщення окремих полів операторів з певною кількістю інтервалів між ними проводиться автоматично. Кожен оператор GPSS/PC відноситься до одного з чотирьох типів: оператори-блоки, оператори визначення об'єктів, що керують оператори та оператори-команди.
Оператори-блоки формують логіку моделі. У GPSS/PC є близько 50 різних видів блоків, кожен з яких виконує свою конкретну функцію. За кожним з таких блоків стоїть відповідна підпрограма транслятора, а операнди кожного блоку служать параметрами цієї підпрограми.
Оператори визначення об'єктів служать для опису параметрів деяких об'єктів GPSS/PC (про самих об'єктах йтиметься далі). Прикладами параметрів об'єктів можуть бути кількість каналів у багатоканальної системи масового обслуговування, кількість рядків і стовпців матриці і т.п.
Керуючі оператори служать для керування процесом моделювання (прогоном моделі). Оператори-команди дозволяють керувати роботою інтегрованого середовища GPSS/PC. Керуючі оператори та оператори-команди зазвичай не включаються в початкову програму, а вводяться безпосередньо з клавіатури ПК у процесі інтерактивної взаємодії з інтегрованою середовищем.
Після трансляції вихідної програми в пам'яті ПК створюється так звана поточна модель, яка є сукупністю різного типу об'єктів, кожен з яких представляє собою деякий набір чисел у пам'яті ПК, що описують властивості і поточний стан об'єкту.
Об'єкти GPSS/PC можна розділити на сім класів:
динамічні, операційні, апаратні, статистичні, обчислювальні, що запам'ятовують і групуються. Динамічні об'єкти, відповідні заявками в системах масового обслуговування, називаються в GPSS/PC транзактамі. Вони "створюються" і "знищуються" так, як це необхідно за логікою моделі в процесі моделювання. З кожним транзактом може бути пов'язано довільне число параметрів, що несуть в собі необхідну інформацію про це транзакте. Крім того, транзакти можуть мати різні пріоритети.
Операційні об'єкти GPSS/PC, що називаються блоками, відповідають операторам-блокам вихідної програми. Вони, як уже говорилося, формують логіку моделі, даючи транзактам вказівки: куди йти і що робити далі. Модель системи на GPSS/PC можна представити сукупністю блоків, об'єднаних відповідно до логіки роботи реальної системи в так звану блок-схему. Блок-схема моделі може бути зображена графічно, наочно показуючи взаємодію блоків у процесі моделювання.
Апаратні об'єкти GPSS/PC - це абстрактні елементи, на які може бути розчленоване (декомпозіровано) обладнання реальної системи. До них відносяться одноканальні і багатоканальні пристрої та логічні перемикачі. Багатоканальне пристрій іноді називають пам'яттю.
Одноканальний і багатоканальні пристрої відповідають обслуговуючим приладів в СМО. Одноканальне пристрій, який для стислості надалі будемо називати просто пристроєм, може обслуговувати одночасно тільки один транзакт. Багатоканальне пристрій (СКУ) може обслуговувати одночасно кілька транзактов. Логіка перемикачі (ЛП) використовуються для моделювання двійкових станів логічного чи фізичного характеру. ЛП може знаходитися в двох станах: включено і вимкнене. Його стан може змінюватися в процесі моделювання, а також опитуватися для прийняття певних рішень.
Статистичні об'єкти GPSS/PC служать для збору й обробки статистичних даних про функціонування моделі. До них відносяться черги і таблиці. Кожна чергу забезпечує збір і обробку даних про транзактах, затриманих в будь-якій точці моделі, наприклад перед одноканальним пристроєм. Таблиці використовуються для отримання вибіркових розподілів деяких випадкових величин, наприклад часу перебування транзакта в моделі.
До обчислювальним об'єктів GPSS/PC відносяться змінні (арифметичні та Булевського) і функції. Вони використовуються для обчислення деяких величин, заданих арифметичними або логічними виразами або табличними залежностями.
Запам'ятовувальні об'єкти GPSS/PC забезпечують збереження в пам'яті ПК окремих величин, що використовуються в моделі, а також масивів таких величин. До них відносяться так звані зберігаються величини і матриці, що зберігаються величин.
До об'єкти групують класу відносяться списки користувачів та групи. Списки користувача використовуються для організації черг з дисциплінами, відмінними від дисципліни "раніше прийшов - раніше обслужений". Групи в даному виданні розглядатися не будуть.
Кожному об'єкту того чи іншого класу відповідають числові атрибути, що описують його стан в даний момент модельного часу. Крім того, є ряд так званих системних атрибутів, що відносяться не до окремих об'єктах, а до моделі в цілому. Значення атрибутів всіх об'єктів моделі після закінчення моделювання Виводяться в стандартний звіт GPSS/PC. Більша частина атрибутів доступна програмісту і складає так звані стандартні числові атрибути (ВЧА), 0которие можуть використовуватися в якості операндів операторів вихідної програми. Всі ВЧА в GPSS/PC є цілими числами.
Кожен об'єкт GPSS/PC має ім'я та номер. Імена об'єктів даються в різних операторах вихідної програми, а відповідні їм номери транслятор присвоює автоматично. Назва об'єкта є що починається з букви послідовність літер латинського алфавіту, цифр та символу "підкреслення". При необхідності імені будь-якого об'єкта, крім імені блоку, можна поставити у відповідність будь-який номер за допомогою оператора опису EQU, що має такий вигляд:
ім'я EQU номер
Блокам присвоюються їх порядкові номери у вихідній програмі (не плутати з номерами рядків!).
Для посилання 0на якої-небудь стандартний числовий атрибут деякого об'єкта відповідний операнд оператора вихідної програми записується одним із таких способів:
ВЧА $ ім'я
;
ВЧА j
, де ВЧА - системне позначення (назва) конкретного стандартного числового атрибута даного об'єкта, а ім'я - ім'я об'єкта; j - номер об'єкта; $ - символ-розділювач.
Прогон поточної моделі, тобто власне моделювання, виконується за допомогою спеціальної керуючої програми, яку називають симулятором (від англійського SIMULATE b> - моделювати, імітувати). Робота GPSS-моделі під керуванням симулятора полягає у переміщенні транзактов від одних блоків до інших, аналогічно тому, як у моделюється СМО переміщуються заявки, що відповідають транзактам. У початковий момент часу в GPSS-моделі немає жодного транзакта. У процесі моделювання симулятор генерує транзакти в певні моменти часу відповідно до тих логічними потребами, які виникають в моделюється системі. Подібним же чином транзакти залишають модель в певні моменти часу в залежності від специфіки моделюється системи. У загальному випадку в моделі одночасно існує велике число транзактов, однак в кожний момент часу симулятор здійснює просування тільки якого-небудь одного транзакта. Якщо транзакт почав свій рух, він переміщується від блоку до блоку шляхом, визначеним блок-схемою. У той момент, коли транзакт входить в деякий блок, на виконання викликається підпрограма симулятора, що відповідає типу цього блоку, а після її виконання, при якому реалізується функція даного блоку, транзакт "намагається" увійти в наступний блок. Таке просування транзакта продовжується до тих пір, поки не відбудеться одну з таких можливих подій: 1) транзакт входить в блок, функцією якого є видалення транзакта з моделі; 2) транзакт входить в блок, функцією якого є затримка транзакта на якийсь певний час в моделі ; 3) транзакт "намагається" увійти в наступний блок, проте блок "відмовляється" прийняти його. У цьому випадку транзакт залишається в тому блоці, де був, і пізніше буде повторювати свою спробу увійти в наступний блок. Коли умови в моделі зміняться, така спроба може виявитися успішною, і транзакт зможе продовжити своє переміщення по блок-схемі.
Якщо виникло одне з описаних вище умов, обробка даного транзакта припиняється, і починається переміщення іншого транзакта.
Таким чином, виконання моделювання симулятором триває постійно.
Проходячи через блоки моделі, кожен транзакт робить внесок у вміст лічильників блоків. Значення цих лічильників доступні програмісту через ВЧА блоків: W b> - поточний зміст блоку і N b> - загальна кількість входів до блоку.
Кожне просування транзакта в моделі є подією, яка повинна відбутися в певний момент модельного часу. Для того, щоб підтримувати правильну хронологію подій, симулятор має таймер модельного часу, який автоматично коректується відповідно до логіки, запропонованою моделлю.
Таймер GPSS/PC має такі особливості:
b>
1) реєструються тільки цілі значення (всі тимчасові інтервали в моделі зображуються цілими числами);
2) одиниця модельного часу визначається розробником моделі, що задає всі тимчасові інтервали в одних і тих же, обраних ним одиницях;
3) симулятор не аналізує стан моделі в кожен наступний момент модельного часу (віддалений від поточного на одиницю модельного часу), а просуває таймер до моменту часу, коли відбувається найближчим така подія.
Значення таймера доступні програмісту через системні ВЧА C1 (відносний час) і AC1 (абсолютна час).
Центральної завданням, що виконується симулятором, є визначення того, який транзакт треба вибрати такий для просування в моделі, коли його попередник припинив своє просування. З цією метою симулятор розглядає кожен транзакт як елемент деякого списку. У відносно простих моделях використовуються лише два основних списку: список поточних подій і список майбутніх подій.
Список поточних подій включає в себе ті транзакти, плановане час просування яких дорівнює або менше поточного модельного часу (до останніх відносяться транзакти, рух яких було заблоковано раніше). Він організовується в порядку спадання пріоритетів транзактов, а в межах кожного рівня пріоритету - в порядку надходження транзактов.
Список майбутніх подій включає в себе транзакти, плановане час просування яких більше поточного часу, тобто події, пов'язані з просуванням цих транзактов, повинні відбутися в майбутньому. Цей список організовується в порядку зростання планованого часу просування транзактов.
Симулятор GPSS/PC поміщає транзакти залежно від умов в моделі в той чи інший список і переносить транзакти зі списку в список, переглядає списки, вибираючи наступний транзакт для обробки, коректує таймер модельного часу після обробки всіх транзактов у списку поточних подій. 2. ОСНОВНІ БЛОКИ GPSS/PC І ПОВ'ЯЗАНІ З НИМИ ОБ'ЄКТИ
b>
2.1. Блоки, пов'язані з транзактамі
З транзактамі пов'язані блоки створення, знищення, затримки транзактов, зміни їх атрибутів і створення копій транзактов.
Для створення транзактов, що входять в модель, служить блок GENERATE b> (генерувати), що має такий вигляд:
імяGENERATEA, B, C, D, E
b>
У поле A b> задається середнє значення інтервалу часу між моментами надходження в модель двох послідовних транзактов. Якщо цей інтервал постійний, то полі B b> не використовується. Якщо ж інтервал надходження є випадковою величиною, то в полі B b> вказується модифікатор середнього значення, який може бути заданий у вигляді модифікатора-інтервалу або модифікатора-функції.
Модифікатор-інтервал використовується, коли інтервал надходження транзактов є випадковою величиною з рівномірним законом розподілу ймовірностей. У цьому випадку в полі B b> може бути будь-який заданий ВЧА, окрім посилання на функцію, а діапазон зміни інтервалу надходження має межі AB, A + B b>.
Наприклад, блок
GENERATE100, 40 b> створює транзакти через випадкові проміжки часу, рівномірно розподілені на відрізку [60; 140].
Модифікатор-функція використовується, якщо закон розподілу інтервалу надходження відмінний від рівномірного. У цьому випадку в полі B b> повинна бути записана посилання на функцію (її ВЧА), що описує цей закон, і випадковий інтервал надходження визначається, як ціла частина твору поля A b> (середнього значення ) на обчислена значення функції.
У поле C b> задається час вступу до модель першого транзакта. Якщо це поле порожнє або дорівнює 0, то момент появи перших транзакта визначається операндами A і B.
Поле D b> задає загальне число транзактов, яка повинна бути створена блоком GENERATE b>. Якщо це поле порожнім, то блок генерує необмежене число транзактов до завершення моделювання. У поле E b> задається пріоритет, який присвоюється генеруються транзактам. Число рівнів пріоритетів необмежена, причому найнижчий пріоритет - нульовий. Якщо поле E пусто, то що генеруються транзакти мають нульовий пріоритет.
Транзакти мають ряд стандартних числових атрибутів. Наприклад, ВЧА з назвою PR дозволяє посилатися на пріоритет транзакта. ВЧА з назвою M1 містить так зване резидентні час транзакта, тобто час, що минув з моменту входу транзакта в модель через блок GENERATE b>. ВЧА з назвою XN1 містить внутрішній номер транзакта, який є унікальним і дозволяє завжди відрізнити один транзакт від іншого. На відміну від ВЧА інших об'єктів, ВЧА транзактов не містять посилання на ім'я або номер транзакта. Посилання на ВЧА транзакта завжди відноситься до активного транзакту, тобто транзакту, що обробляються в даний момент симулятором.
Важливими стандартними числовими атрибутами транзактов є значення їх параметрів. Будь-який транзакт може мати необмежену кількість параметрів, що містять ті чи інші числові значення. Посилання на цей ВЧА транзактов завжди відноситься до активного транзакту і має вигляд Pj або Р $ ім'я, де j та ім'я - номер та ім'я параметра відповідно. Така посилання можлива тільки в тому випадку, якщо параметр з вказаним номером або вже існує, тобто в нього занесено яке-небудь значення.
Для присвоювання параметрами початкових значень або зміни цих значень b> служить блок b> ASSIGN b> (привласнювати), що має такий вигляд:
ім'я ASSIGNA, B, C
b>
У поле A b> вказується номер або ім'я параметра, в який за носиться значення операнда B b>. Якщо в поле A b> після імені (номери) па раметра стоїть знак + або -, то значення операнда B b> додається або віднімається з поточного вмісту параметра. У поле С b> може бути вказано ім'я або номер функції-модифікатора, що діє аналогічно функції-модифікатори в полі B блоку GENERATE b>.
Наприклад, блок
ASSIGN5, 0 b> записує в параметр з номером 5 значення 0, а блок
ASSIGNCOUNT +, 1 b> додає 1 до поточного значення параметра з ім'ям COUNT.
Для запису поточного модельного часу в заданий параметр транзакта b> служить блок b> MARK b> (зазначити), що має такий вигляд:
ім'я MARKA
b>
У поле A b> вказується номер або ім'я параметра транзакта, в до торий заноситься поточне модельне час при вході цього транзакта в блок MARK. Вміст цього параметра може бути пізніше вико вано для визначення транзитного часу 0пребиванія транзакта в якоїсь частини моделі з допомогою ВЧА з назвою MP.
Наприклад, якщо на вході ділянки моделі помістити блок
MARKMARKER
, b> то на виході цієї ділянки ВЧА MP $ MARKER буде містити різниця між поточним модельним часом і часом, занесеного до параметр MARKER блоком MARK.
Якщо поле A b> блоку MARK пусто, то поточний час заноситься на місце позначки часу входу транзакта в модель, яка використовується при визначенні резидентного часу транзакта за допомогою ВЧА M1.
Щоб змінити пріоритет транзакта b> служить блок PRIORITY b> (Пріо рітет), що має такий вигляд:
імяPRIORITYA, B
b>
У поле A b> записується новий пріоритет транзакта. У полі B b> мо жет міститися ключове слово BU, за наявності якого транзакт, що ввійшов до блоку, поміщається у списку поточних подій після всіх інших транзактов нової пріоритетною групи, і список поточних подій проглядається з початку. Використання такої можливості буде розглянуто нижче.
Для видалення транзактов з моделі b> служить блок TERMINATE b> (за вершити), що має такий вигляд:
імяTERMINATEA
b>
Значення поля A b> вказує, на скільки одиниць зменшується зі держімое так званого лічильника завершений при вході транзакта у цей блок TERMINATE. Якщо поле A b> не визначено, то вона вважається рівним 0, і транзакти, що проходять через такий блок, не зменшують вміст лічильника завершений.
Початкове значення лічильника завершений b> встановлюється управ ляющие оператором START b> (почати), призначеним для запуску про гону моделі. Поле A b> цього оператора містить початкове значення лічильника завершений (див. розд. 3). Прогон моделі закінчується, коли вміст лічильника завершений звертається до 0. Таким чином, в моделі повинен бути хоча б один блок TERMINATE з непустих полем b> A b>, інакше процес моделювання ніколи не завершиться.
Поточне значення лічильника завершений b> є програмісту че рез системний ВЧА TG1 b>.
Ділянка блок-схемимоделі, пов'язаний з парою блоків GENERATE-ТERMINATE b>, називається сегментом b>. Прості моделі можуть складатися з одного сегмента, у складних моделях може бути кілька сегментів. Наприклад, найпростіший сегмент моделі, що складається всього з двох блоків GENERATE b> і TERMINATE b> і наведений на рис. 1, у сукупності з керуючим оператором START b> моделює процес створення випадкового потоку транзактов, що надходять в модель із середнім інтервалом в 100 одиниць модельного часу, і знищення цих транзактов. Початкове значення лічильника завершений одно 1000. Кожен транзакт, що проходить через блок TERMINATE b>, віднімає з лічильника одиницю, і таким чином моделювання завершиться, коли тисячний за рахунком транзакт увійде в блок TERMINATE b>. При цьому точне значення таймера в момент завершення прогону непередбачувано. Отже, у наведеному прикладі тривалість прогону встановлюється не по модельному часу, а за кількістю транзактов, які пройшли через модель.
GENERATE100, 40
TERMINATE 1
START1000
b>
Якщо необхідно управляти тривалістю прогону по модельному часу, то в моделі використовується спеціальний сегмент, званий сегментом таймера.
GENERATE100, 40
TERMINATE
GENERATE100000
TERMINATE 1
START1
b>
Наприклад, у моделі з двох сегментів, наведеною на рис. 2, перший (основний) сегмент виконує ті ж функції, що і в попередньому прикладі. Зауважимо, однак, що поле A блоку TERMINATE b> у першій сегменті порожньо, тобто знищувані транзакти не зменшують вміст лічильника завершений. У другому сегменті блок GENERATE b> створить першу транзакт в момент модельного часу, що дорівнює 100000. Але цей транзакт виявиться і останнім у даному сегменті, тому що, увійшовши в блок TERMINATE b>, він учинить 0 вміст лічильника завершений, встановлене оператором START b> рівним 1. Таким чином, у цій моделі гарантується завершення прогону в певний момент модельного часу, а точна кількість транзактов, які пройшли через модель, непередбачувано. У наведених прикладах транзакти, що входять в модель через блок GENERATE b>, в той же момент модельного часу знищувалися в блоці b> TERMINATE b>. У моделях систем масового обслуговування заявки обслуговуються приладами (каналами) СМО протягом певного проміжку часу, перш ніж покинути СМО. Для моделювання такого обслуговування, тобто для затримки транзактов на певний відрізок модельного часу, служить блок ADVANCE b> (затримати), що має такий вигляд:
імяADVANCEA, B
b>
Операнд в полях A b> і B b> мають таке ж значення, що й у відповідних полях блоку GENERATE. Слід зазначити, що транзакти, що входять до блоку ADVANCE b>, переводяться зі списку поточних подій в список майбутніх подій, а після закінчення обчисленого часу затримки повертаються назад, до списку поточних подій, і їх просування по блок-схемі триває . Якщо обчислена час затримки дорівнює 0, то транзакт в той же момент модельного часу переходить у наступний блок, залишаючись у списку поточних подій.
Наприклад, у сегменті, наведеному на рис. 3, транзакти, що надходять в модель з б лока GENERATE b> через випадкові проміжки часу, які мають рівномірний розподіл на відрізку [60; 140], потрапляють в блок ADVANCE b>. Тут визначається випадкове час затримки транзакта, що має рівномірний розподіл на відрізку [30; 130], і транзакт переводиться в список майбутніх подій. Після закінчення часу затримки транзакт повертається до списку поточних подій і входить до блоку TERMINATE b>, де знищується. Зауважимо, що в списку майбутніх подій, а значить і в блоці ADVANCE b> може одночасно знаходитися довільна кількість транзактов.
GENERATE100, 40
ADVANCE 80,50
TERMINATE 1 b> У розглянутих вище прикладах випадкові інтервали часу підпорядковувалися рівномірному закону розподілу ймовірностей. Для отримання випадкових величин з іншими розподілами в GPSS/PC використовуються обчислювальні об'єкти: змінні і функції. Як відомо, довільна випадкова величина b> пов'язана з випадковою величиною R b>, що має рівномірний розподіл на відрізку [0; 1], через свою зворотну функцію розподілу. Для деяких випадкових величин рівняння зв'язку має явне рішення, і значення випадкової величини із заданим розподілом ймовірностей b> може бути обчислено через R b> за формулою. Так, наприклад, значення випадкової величини E b> з показовим (експоненціальним) розподілом з параметром d b> обчислюється за формулою:
E = - (1/d) * ln (R) b> Нагадаємо, що параметр d має сенс величини, зворотної математичного очікування E, а, отже, 1/d - математичне сподівання (середнє значення) випадкової величини E. Для отримання випадкової величини R з рівномірним розподілом на відрізку [0; 1] в GPSS/PC є вбудовані генератори випадкових чисел. Для отримання випадкового числа шляхом звернення до такого генератора досить записати системний ВЧА RN з номером генератора, наприклад RN1. Правда, вбудовані генератори випадкових чисел GPSS/PC дають числа не на відрізку [0; 1], а цілі випадкові числа, рівномірно розподілені від 0 до 999, але їх неважко привести до вказаного відрізку поділом на 1000.
Найпростіше описані обчислення в GPSS/PC виконуються з використанням арифметичних змінних. Вони можуть бути цілими і дійсними. Цілі змінні визначаються перед початком моделювання за допомогою оператора визначення VARIABLE b> (змінна), що має такий вигляд:
імяVARIABLEвираженіе
b>
Тут ім'я - ім'я змінної, що використовується для посилань на неї, а вираз - арифметичний вираз, що визначає змінну. Арифметичне вираз являє собою комбінацію операндів, як які можуть виступати константи, ВЧА і функції, знаків арифметичних операцій і круглих дужок. Слід зауважити, що знайомий операції множення в GPSS/PC є символ # (номер). Результат кожної проміжної операції в цілих змінних перетвориться до цілого типу шляхом відкидання дробової частини, і, таким чином, результатом операції поділу є ціла частина приватного.
Дійсні змінні b> 0определяются перед початком моделювання за допомогою оператора визначення FVARIABLE b>, що має той же формат, що і оператор VARIABLE b>. Відмінність дійсних змінних від цілих полягає в тому, що в дійсних змінних всі проміжні операції виконуються зі збереженням дробової частини чисел, і лише остаточний результат приводиться до цілого типу відкиданням дробової частини. Арифметичні змінні обох типів мають єдиний ВЧА з назвою V b>, значенням якого є результат обчислення арифметичного виразу, що визначає змінну. Обчислення виразу проводиться при вході транзакта до блоку, що містить посилання на ВЧА V з ім'ям змінної. Дійсні змінні b> можуть бути використані для отримання випадкових інтервалів часу з показовим законом розподілу. Нехай в моделі з прикладу на рис. 3 розподілу часу надходження транзактов і часу затримки повинні мати показовий закон. Це може бути зроблено так, як показано на рис. 4.
TARRFVARIABLE -100 # LOG ((1 + RN1)/1000)
TSRVFVARIABLE -80 # LOG ((1 + RN1)/1000)
GENERATE V $ TARR
ADVANCEV $ TSRV
TERMINATE 1
b>
Рис. 4 Змінна b> з ім'ям TARR b> задає вираз для обчислення інтервалу надходження із середнім значенням 100, друга мінлива b> з ім'ям TSRV b> -- для обчислення часу затримки із середнім значенням 80. Блоки GENERATE b> і ADVANCE містять в поле A b> посилання на відповідні змінні, при цьому полі B b> не використовується, тому що в полі A міститься випадкова величина, не потребує модифікації.
Більшість випадкових величин не може бути отримано через випадкову величину R з допомогою арифметичного виразу. Крім того, такий спосіб є досить трудомістким, оскільки вимагає звернення до математичних функцій, обчислення яких вимагає десятків машинних операцій. Іншим можливим способом є використання обчислювальних об'єктів GPSS/PC типу функція. Функції використовуються для обчислення величин, заданих табличними залежностями. Кожна функція визначається перед початком моделювання за допомогою оператора визначення FUNCTION b> (функція), що має такий вигляд:
імяFUNCTIONA, B b> Тут ім'я - ім'я функції, що використовується для посилань на неї; A b> - стандартний числовий атрибут, що є аргументом функції; B b> - тип функції і число точок таблиці, яка визначає функцію.
Існує п'ять типів функцій. Розглянемо спочатку безперервні числові функції, тип яких кодується буквою C b>. Так, наприклад, у визначенні безперервної числової функції, таблиця якої містить 24 точки, поле B повинно мати значення C24.
При використанні неперервної функції для генерування випадкових чисел її аргументом має бути один з генераторів випадкових чисел RNj b>. Так, оператор для визначення функції показового розподілу може мати такий вигляд:
EXPFUNCTIONRN1, C24 b> Особливістю використання вбудованих генераторів випадкових чисел RNj b> як аргументи функцій є те, що їх значення в цьому контексті інтерпретуються як дробові числа від 0 до 0,999999 .
Таблиця з координатами точок функції розташовується в рядках, що слідують безпосередньо за оператором FUNCTION b>. Ці рядки не повинні мати поля нумерації. Кожна точка таблиці задається парою Xi b> (значення аргументу) і Yi b> (значення функції), відокремлюваних один від одного комою. Пари координат відокремлюються один від одного?? а символом "/" і розташовуються на довільному кількості рядків. Послідовність значень аргументу Xi b> повинна бути строго зростаючою.
Як уже зазначалося, для користування в полі B b> блоків GENERATE b> і ADVANCE b> обчислення інтервалу надходження або часу затримки проводиться шляхом множення операнда A на обчислена значення функції. Звідси випливає, що функція, яка використовується для генерування випадкових чисел з показовим розподілом, повинна описувати залежність y =- ln (x) b>, представлену в табличному вигляді. Оператор FUNCTION b> з такою таблицею, що містить 24 точки для забезпечення достатньої точності апроксимації, має такий вигляд:
EXPFUNCTIONRN1, C24
0,0/.1, .104/.2, .222/.3, .355/.4, .509/.5, .69/.6, .915
.7,1.2/.75,1.38/.8,1.6/.84,1.85/.88,2.12/.9,2.3
.92,2.52/.94,2.81/.95,2.99/.96,3.2/.97,3.5/.98,3.9
.99,4.6/.995,5.3/.998,6.2/.999,7/.9998,8
b>
Обчислення неперервної функції здійснюється в такий спосіб. Спочатку визначається інтервал (Xi; Xi +1), на якому знаходиться поточне значення ВЧА-аргументу (у нашому прикладі - згенероване значення RN1). Потім на цьому інтервалі виконується лінійна інтерполяція з використанням відповідних значень Yi і Yi 1. Результат інтерполяції усікається (відкиданням дробової частини) і використовується в якості значення функції. Якщо функція служить операндом B блоків GENERATE b> або ADVANCE b>, то усікання результату проводиться тільки після його множення на значення операнда A.
Використання функцій для отримання випадкових чисел з заданим розподілом дає хоча і менш точний результат за рахунок похибок апроксимації b>, але зате з меншими обчислювальними витратами (кілька машинних операцій на виконання лінійної інтерполяції). Щоб до похибки апроксимації не додавати занадто велику погрішність усікання, середнє значення при використанні показових розподілів має бути достатньо великим (не менше 50). Ця рекомендація відноситься і до використання змінних.
Опції всіх типів мають єдиний ВЧА b> з назвою FN b>, значенням якого є обчислена значення функції. Обчислення функції проводиться при вході транзакта до блоку, що містить посилання на ВЧА FN з ім'ям функції.
Замінимо в прикладі на мал. 4 змінні TARR і TSRV на функцію EXP (рис. 5).
Оскільки в обох моделях використовується один і той же генератор RN1, інтервали надходження та затримки, обчислюються в блоках GENERATE і ADVANCE, повинні вийти дуже близькими, а може бути і ідентичними. При великій кількості транзактов, пропускаються через модель (десятки і сотні тисяч), різниця у швидкості обчислень повинна стати помітною.
EXPFUNCTIONRN1, C24
0,0/.1, .104/.2, .222/.3, .355/.4, .509/.5, .69/.6, .915
.7,1.2/.75,1.38/.8,1.6/.84,1.85/.88,2.12/.9,2.3
.92,2.52/.94,2.81/.95,2.99/.96,3.2/.97,3.5/.98,3.9
.99,4.6/.995,5.3/.998,6.2/.999,7/.9998,8
GENERATE100, FN $ EXP
ADVANCE 80, FN $ EXP
TERMINATE 1
b>
Рис. 5
Особливістю безперервних функцій є те, що вони приймають "безперервні" (але тільки цілочисельні) значення в діапазоні від Y1 до Yn, де n - кількість точок таблиці. На відміну від них дискретні числові функції, тип яких кодується буквою D b> у операнд b> B b> оператора визначення фу