
- •Моделювання систем
- •Передмова
- •Моделі процесів і систем
- •Класифікація моделей
- •Основні визначення та класифікація систем масового обслуговування
- •Характеристики систем масового обслуговування
- •Вхідний потік вимог
- •Стратегії керування потоками вимог
- •Класифікація систем масового обслуговування
- •Метод статистичних випробовувань
- •Генератори випадкових чисел
- •Моделювання випадкових подій та дискретних випадкових величин
- •Моделювання неперервних випадкових величин
- •Моделювання нормально-розподілених випадкових величин
- •Моделювання випадкових векторів
- •Моделювання випадкових функцій
- •Статистична обробка результатів моделювання
- •Визначення кількості реалізацій під час моделювання випадкових величин
- •Основне меню 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-критерію Ст’юдента
Вбудована бібліотека процедур
Існує два типи бібліотек: бібліотека користувача і вбудована бібліотека GPSS World. Бібліотека користувача створюється самим користувачем. Вбудована бібліотека містить готові до використання в будь-якому Plus-виразі наступні процедури:
обслуговуючі;
файлові;
динамічного виклику;
математичні;
ймовірнісних розподілів;
рядкові;
запиту стану транзакту.
Обслуговуючі процедури використовуються для керування імітацією та аналізом експериментів. До них належать:
DoCommand – компілює і виконує оператор GPSS:
DoCommand (CommandString)
де CommandString – рядкове представлення оператора GPSS. Процедура викликається лише з експериментів. Оскільки компіляція рядка здійснюється у глобальній області видимості, змінні та аргументи процедури є недоступними, тому вони не можуть використовуватися у командному рядку;
Anova – здійснює багатофакторний дисперсійний аналіз:
StandartError=Anova(ResultMatrixName,ReplicateDimension, InteractionLimit)
де ResultMatrixName – назва матриці, яка містить дані для дисперсійного аналізу; ReplicateDimension – вимір матриці, яка використовується для реплік; InteractionLimit – обмеження в дисперсійному аналізі щодо взаємодій між факторами, може приймати значення 1, 2, 3. Anova повертає значення Standard Еrror, що є значенням стандартної помилки у дисперсійному аналізі. Якщо знайдена помилка, то повертається 0;
Exit – завершує сеанс роботи з GPSS World:
Exit(ExitCode)
де ExitCode приймає значення-1, 0, і 1, які відповідно означають “не зберігати нічого”, “дати запит на збереження змінених файлів” і “Зберігати все” (відкриті об’єкти “Модель” і “Процес моделювання”).
Файлові процедури використовуються для керування потоками даних у PLUS-процедурах. До них належать:
Open – відкриває файл:
ReturnCode=Open(DataStream,FileNameString)
де DataStream – номер нового файлу, що відкривається (потоку даних); FileNameString – назва файлу, що відкривається; ReturnCode – код результату виконання операції (0 – немає помилки; 10 – довга назва файлу; 11 – помилка читання зовнішнього файлу; 12 – під час спроби відкрити файл був заборонений доступ до пам’яті);
Close – закриває файл і вказує код помилки:
ReturnCode=Close(DataStream)
де DataStream – номер файлу, що закривається (потоку даних); ReturnCode – результат виконання операції (0 – немає помилки, 41 – запис файлу на диск не здійснений через помилку введення-виведення; 42 – файл не був відкритий);
Read – зчитує текстовий рядок з файлу:
ReturnString=Read(DataStream)
де DataStream – номер файлу (потоку даних), з якого здійснюється зчитування; коди результату виконання операції (0 – немає помилки; 21 – під час спроби здійснити читання був заборонений доступ до пам’яті; 22 – файл не був відкритий);
Write – записує текстовий рядок у файл
ReturnCode=Write(DataStream,SourceString)
де DataStream – номер файлу, в який здійснюється запис; SourceString – рядок, який записується у файл; ReturnCode – код результату виконання операції (0 – немає помилки; 31 – під час спроби здійснити запис був заборонений доступ до пам’яті; 32 – файл не був відкритий);
Seek – встановлює позицію поточного рядка файлу:
PreviousLinePosition=Seek(DataStream,NewLinePosition)
де DataStream – номер файлу, в якому встановлюється нова позиція поточного рядка; NewLinePosition – нове значення позиції поточного рядка; PreviousLinePosition – попереднє значення поточного рядка; 51 – код помилки: файл не був відкритий;
Процедури динамічного виклику використовуються для виклику функцій, що зберігаються на зовнішніх виконавчих файлах, включаючи бібліотеку DLL:
Call – викликає зовнішню CDECL-функцію без аргументів:
ReturnCode=Call(ExecutabFileName,FunctionName)
Call_Integer викликає зовнішню CDECL-функцію з цілочисельним аргументом:
ReturnCode=Call_Integer(ExecutabFileName,FunctionName,Argument)
Call_String викликає зовнішню CDECL-функцію з одним символьним аргументом (char):
ReturnCode=Call_String(ExecutabFileName,FunctionName,Argument)
Call_Real викликає зовнішню CDECL-функцію з одним дійсним аргументом (double):
ReturnCode=Call_Real(ExecutabFileName,FunctionName,Argument)
Тут всюди ExecutableFileName – назва модуля (.DLL або .EXE файлу), що містить функцію, яка викликається; FunctionName – назва функції, яка викликається.
Математичні процедури:
ABS – абсолютне значення: ABS(Expression);
ATN – арктангенс: ATN(Expression);
COS – косинус: COS(Expression);
EXP – експонента: EXP(Expression);
INT – виділяє цілу частину з відкиданням дробової частини: INT(Expression);
LOG – натуральний алгоритм: LOG(Expression);
SIN – синус: SIN(Expression);
SQR – здобуває квадратний корінь: SQR(Expression);
TAN – тангенс: TAN(Expression), де всюди Expression – Plus-вираз.
Рядкові процедури виконують операції з рядками:
Align – вставляє один рядок у інший з вирівнюванням за правим краєм
ReturnString=Align(InsertString, SourceString,Offset)
де InsertString – рядок, який потрібно вставити; SourceRtring – рядок, в який буде вставлений перший рядок; Offset – зміщення у рядку SourceString для першого символа рядка InsertString, починаючи з якого буде вставлятись рядок. Процедура повертає значення Return String, що є результатом запису рядка Insert String у рядок SourceString зі зміщенням Offset;
Catenate – об’єднує два рядки String 1 i String 2:
ReturnString=Catenate(String1,String2)
Copies – створює один рядок із декількох копій вихідного рядка:
ReturnString=Copies(SourceString,Count)
де SourceString – рядок, який буде розмножений; Count – кількість копій;
Datetype – визначає тип даних аргумента;
ReturnString=Datatype(Datum),
де Datum – дані, типи яких необхідно визначити;
Find – обчислює зміщення одного рядка, що міститься в іншому рядку:
ReturnInteger=Find(TestString, SourceString)
де TestString – рядок для пошуку; SourceString – рядок, в який буде здійснений пошук рядка TestString;
Left – повертає ліву частину заданого рялдка:
ReturnString=Left(SourceString,MaxCount)
де SourceString – вихідний рядок; MaxCount – максимальна кількість символів у кінцевому рядку.
Length – підраховує кількість символів у рядку:
ReturnInteger=Length(SourceString)
де SourceString – вихідний рядок;
Lowercase – переводить усі прописні літери у рядкові:
ReturnString=Lowercase(SourceString)
де SourceString – вихідний рядок;
Place – вставляє один рядок у інший з вирівнюванням по лівому краю:
ReturnString=Place(InsertString,SourceString,Offset)
де InsertString – рядок, який потрібно вставити; SourceString – рядок, в який буде вставлений перший рядок; Offset – зміщення у рядку SourceString для найлівішого символа рядка InsertString, починаючи з якого буде вставлятись рядок;
PolyCatenate здійснює об’єднання двох і більше рядків в один рядок:
ReturnString=PolyCatenate(String1,...)
де String1, ... – рядки, які об’єднуються послідовно;
Right –повертає праву частину заданого рядка:
ReturnString=Right(SourceString,MaxCount)
де SourceString –вихідний рядок; MaxCount – максимальна кількість символів у кінцевому рядку
String – перетворює дані у їх рядковий еквівалент:
ReturnString=String(Datum)
де Datum – вихідні дані;
StringCompare – порівнює два рядка:
ReturnInteger=StringCompare(String1,String2)
де String1,String2 – рядки, що порівнюються;
Substring – повертає частину рядка:
ReturnString=Substring(SourceString,Offset,MaxCount)
де SourceString – вихідний рядок; Offset – зміщення першого символу підрядка; MaxCount – максимальна кількість символів у підрядку, що виділяється;
Trim – видалення пробілів з початку і з кінця рядків:
ReturnString=Trim(SourceString)
де SourceString –вихідний рядок;
Uppercase – перетворює рядкові літери у великі:
ReturnString=Uppercase(SourceString)
де SourceString –вихідний рядок;
Value – перетворює рядок у числовий еквівалент:
ReturnReal=Value(Datum)
де Datum – елемент даних, які підлягають перетворенню;
Word – виймає слово із рядка:
ReturnString=Word(SourceString,WordNumber)
де SourceString – вихідний рядок; WordNumber – порядковий номер слова в рядку SourceString.
Процедури запиту стану транзакта повертають інформацію про стан транзакта, що є у моделі:
QueryXNExist – повертає 1, якщо транзакт є в моделі, інакше – 0:
QueryXNExist(TransactionNumber);
QueryXNParameter – повертає значення параметра транзакту:
QueryXNParameter (TransactionNumber,Parameter);
де Parameter – номер або назва параметра транзакту;
QueryXNAssemblySet – повертає номер сімейства транзакту:
QueryXNAssemblySet (TransactionNumber);
QueryXNPriority – повертає пріоритет транзакту:
QueryXNPriority (TransactionNumber);
QueryXNМ1– повертає час входу транзакту в систему:
QueryXNМ1(TransactionNumber)
Всюди TransactionNumber – це номер транзакта.