1.Заданіе
2. Формалізація концептуальної моделі
2.1. Побудова формальної схеми функціонування системи
2.2. Визначення параметрів і змінних моделі
2.3. Визначення одиниці модельного часу
2.4. Визначення закону функціонування системи
3. Алгоритмізація моделі і її машинна реалізація
3.1. Вибір програмних засобів моделювання
3.2. Опис моделює програми
3.3. Перевірка достовірності програми
3.4. Моделювання випадкових впливів
3.4.1. Моделювання випадкових впливів, що мають
рівномірний розподіл
3.4.1.1. Апаратний спосіб
3.4.1.2. Програмний спосіб
3.4.1.3. Вибір генератора РРПСЧ
3.4.2. Моделювання випадкових впливів, що мають
нерівномірний розподіл
3.5. Опис моделює програми для стохастичної
моделі
4. Отримання та інтерпретація результатів моделювання
5. Література
2. Формалізація концептуальної моделі
2.1. Побудова формальної схеми функціонування
системи
Побудуємо формальну схему (Q-схему) заданої обчислювальної системи.
И1
Про
И2 До
І3
Рис. 1 Q - схема обчислювальної системи
Тут:
К - ЕОМ
О - Черга
И1 - і3 - Мережеві машини
2.2.Определеніе параметрів і змінних моделі
tp - інтервал між парафіями користувачів
tgz1 - час підготовки завдання 1-им користувачем
tgz2 - час підготовки завдання 2-им користувачем
tgz3 - час підготовки завдання 3-ім користувачем
tm - час виконання завдання на ЕОМ
k - кількість промоделювати на ЕОМ завдань
nz - наявність заявки на вході системи:
nz = 0 - немає заявок ___
nz = i - наявність заявки на i-ої мережевий машині (i = 1-3)
pz1 - підготовка завдання мережевий машині 1
pz1 = 1 - йде підготовка завдання на мережевій машині 1
pz1 = 0 - мережна машина 1 не зайнята
pz2 - підготовка завдання мережевий машині 2
pz2 = 1 - йде підготовка завдання на мережевій машині 2
pz2 = 0 - мережна машина 2 не зайнята
pz3 - підготовка завдання мережевий машині 3
pz3 = 1 - йде підготовка завдання на мережевій машині 3
pz3 = 0 - мережна машина 3 не зайнята
znw - наявність заявки на виконання завдання
znw = 0 - заявки відсутні ___
znw = i - наявність заявки від мережевої машини i (i = 1-3)
wz - виконання завдання на ЕОМ
wz = 0 - ЕОМ вільна
wz = i - ЕОМ виконує заявку i
ocher [50] - черга
в черзі зберігаються номери мережних машин з яких отримано
заявки
n - індекс вільного елемента в черзі
w2 - кількість вип. завдань від 2-го користувача
На першому етапі імітаційного моделювання створимо детерміновану модель заданої обчислювальної системи, замінюючи стохастичні потоки їх математичними очікуваннями:
- Інтервал між парафіями користувачів 10 хв
- Імовірність приходу кожного з користувачів 0.33
- Час підготовки завдання 1-им користувачем 16 хв
- Час підготовки завдання 2-им користувачем 17 хв
- Час підготовки завдання 3-ім користувачем 18 хв
- Час виконання завдання на ЕОМ 0.8 хв
2.3. Визначення одиниці модельного часу
За одиницю модельного часу (emb) приймається мінімальний інтервал реального часу, протягом якого система не змінює свого стану. У даній задачі за emb доцільно прийняти час рівне
0.1 хв.
2.4. Визначення закону функціонування системи
Роботу цієї обчислювальної системи відобразимо тимчасовими діаграмами.
користувач
emb
160
И1
170
И2
180
І3
ЕОМ
Рис 2. Часові діаграми роботи системи
У машинний зал з інтервалом 100 emb приходить один з користувачів.
На початку приходить перше, і починає підготовку свого завдання на це йому буде потрібно 160 emb. Через 100 emb приходить другий користувач і теж починає підготовку завдання на це йому відведено 170 emb. Незабаром після приходу 2-го користувача (через 60 emb) закінчує підготовку завдання першого користувач і виконує його на ЕОМ протягом 8 emb. Через 100 emb після приходу другу користувача приходить третій користувач, при цьому другий продовжує підготовку. Через 70 emb після приходу третього користувача закінчує підготовку другого і виконує своє завдання на ЕОМ за 8 emb. Третій користувач закінчує підготовку через 180 emb після свого приходу, в цей час
знову приходить першим користувач на цьому закінчується перший цикл роботи системи і все повторюється знову.
Таким чином за кожен цикл з періодом Т = 300 emb виконується три завдання від кожного користувача. Всі вони виконуються відразу ж після підготовки і не затримують один одного, тому що ЕОМ до моменту надходження цих заявок вільна. Весь час роботи чергу залишається порожньою. За час циклу виконується одне завдання від 2-го користувача, отже відсоток виконаних завдань, що надійшли від другого користувача дорівнює 33,3%.
Нам потрібно змоделювати виконання 500 завдань, отже загальний час роботи системи одно (500/3) * 300 = 50.000 emb. За цей час ЕОМ пропрацювала 500 * 8 = 4000 emb, отже завантаження ЕОМ дорівнює 8%.
3. Алгоритмізація моделі і її машинна реалізація
3.1. Вибір програмних засобів моделювання
Для написання програми ми вибираємо мова програмування Borland C + +. Ця мова добре зарекомендував себе ефективністю, лаконічністю, стрункістю програм. У багатьох випадках програми, написані на мові С + + порівняні по швидкості з програмами, написаними на мові Асемблера, при цьому вони більш наочні і прості у супроводі. У системне оточення мови С + + входить багато бібліотек, в тому числі бібліотеки потрібних нам стандартних функцій.
Програма для детермінованою моделі наведена у Додатку № 1.
3.2. Опис моделює програми для
детермінованого варіанту моделі
Параметри та змінні даної програми описані в пункті 2.2.
Так як в обраною мовою програмування не можна створити паралельні процеси, то ми застосуємо принцип псевдораспараллеліванія.
У програмі організуємо чергу ocher [50] в комірках якої ми запам'ятовуємо адреса заявки (мережевий номер машини). Також вводимо ряд допоміжних змінних (ztgz1, ztgz2, ztgz3, ztm, zk) необхідних для зберігання значень вихідних параметрів системи.
Дана моделююча програма працює таким чином:
Спочатку програма запитує значення параметрів системи. Далі організовується основний цикл, який виконується k разів. Першою дією в циклі є оператор додавання одиниці машинного часу t = t + emb. Після перевіряємо не прийшов чи користувач, якщо прийшов то визначаємо який (конструкція switch (cikl)). Далі в програмі йде конструкція switch (nz) встановлює відповідні прапорці підготовки завдання. Після йде група умов виконує зменшення часу підготовки завдання. Якщо завдання підготовлене то подається запит на виконання. У цьому блоці програми визначається не порожня чи чергу, якщо не порожня то виконуємо завдання з черги інакше виконуємо заявку з мережевою машини. Перед виконанням заявки перевіряємо зайнята чи ЕОМ, якщо зайнята то ставимо заявку в чергу. Далі якщо на ЕОМ виконується завдання то зменшуємо час виконання цього завдання. Після чого цикл повторюється. Після завершення циклу виробляємо підрахунок відсотка виконаних завдань, що надійшли від другого користувача.
3.3. Перевірка достовірності програми
Змоделюємо роботу системи з параметрами зазначеними в завданні.
Протокол роботи програми:
Введіть інтервал між парафіями користувачів 100
Введіть час підготовки завдання 1-им користувачем 160
Введіть час підготовки завдання 2-им користувачем 170
Введіть час підготовки завдання 3-им користувачем 180
Введіть час виконання завдання на ЕОМ 8
Введіть кількість промоделювати на ЕОМ завдань 500
Відсоток вип. завдань, поступ. від 2-го корис .= 33%
Висновок:
Результати роботи моделює програми співпадають з розрахованими теоретично, отже програма написана і працює правильно.
Визначимо оптимальну структуру обчислювальної системи: оптимальна структура обчислювальної системи забезпечує мінімальний час простою устаткування досягається при наступних параметрах: інтервал між парафіями користувачів 2
час підготовки завдання 1-им користувачем 1
час підготовки завдання 2-им користувачем 1
час підготовки завдання 3-им користувачем 1
час виконання завдання на ЕОМ 1
3.4. Моделювання випадкових впливів
3.4.1. Моделювання випадкових впливів мають
рівномірний розподіл
3.4.1.1. Апаратний спосіб
При апаратній способі випадкові або псевдовипадкові числа виробляються спеціальної електронної приставкою - генератором, який є зовнішнім пристроєм ЕОМ або входить до складу процесора. Найбільше поширення на практиці знайшли генератори псевдовипадкових чисел (ГПСЧ), побудовані на основі регістра зсуву за реалізацією деякої логічної функції в колі зворотного зв'язку (ОС) (в нашому випадку це суматор по модулі два).
Оскільки проведення натуральних дослідів з різними схемами ГПСЧ трудомістко, то ми будемо використовувати програмний засіб дозволяє будувати і досліджувати різні ГПСЧ на програмних моделях. Для цих цілей підходять автоматизована система підготовки та обробки статистичної інформації (АСПОСІ), яка являє собою комплекс програмних засобів, що дозволяють будувати математичні моделі різних ГПСЧ і досліджувати їх характеристики.
Для отримання ПСЧ будемо користуватися програмою gener.
Працюючи в діалоговому режимі з ПВМ ми визначаємо структуру генератора, тобто деяку вихідну інформацію: розрядність регістра зсуву ГПСЧ, вид ОС, кількість та номери підключених в ланцюг ОС розрядів регістра, кількість генеруються чисел та ін
Отримані числа записуються у файл і аналізуються (будується гістограма) за допомогою програми analize.
Для генерації чисел ми вибрали 3 різні структури ГПСЧ:
1) Файл vihod1.dat
Разрядность: 50
Зворотній зв'язок: 30
Кількість чисел: 1000
Розрядність числа: 25
Число зрушень: 2
2) Файл vihod2.dat
Разрядность: 50
Зворотній зв'язок: 30
Кількість чисел: 1000
Розрядність числа: 25
Число зрушень: 3
3) Файл vihod3.dat
Разрядность: 70
Зворотній зв'язок: 35
Кількість чисел: 1000
Розрядність числа: 25
Число зрушень: 6
Перевіримо якість чисел у файлах програмою analize.
Побудуємо гістограми:
vihod1.dat
vihod2.dat
vihod3.dat
Перевірка відповідності чисел у послідовності необхідного розподілу дає наступні результати: теоретичні та статистичні дані у всіх 3-х файлах за критеріями Колмогорова і Х2 не узгоджуються.
Визначення числових характеристик
№ Характеристика vihod1.dat vihod2.dat vihod3.dat
1 найменше значення 0.02 0.005 0.00059
2 найбільше значення 0.96 0.996 0.999
3 Мат. очікування 0.39 0.51 0.49
4 Дисперсія 0.078 0.086 0.085
5 Среднеквадратіч.отклон. 0.279 0.294 0.292
6 Ексцес -1.92 -1.024 -1.12
Визначення характеристик кореляції
???(?) ?(?)< Br />
1 1
0? 0?
5 5
vihod1.dat vihod2.dat
? (?)
1
0?
5
vihod3.dat
Висновок:
1) Зі збільшенням числа зрушень характеристики чисел поліпшуються.
2) З наведених 3-х файлів найякісніші числа знаходяться в
фото vihod3.dat, оскільки числа в послідовності досить
незалежні. Але в той же час немає узгодженості по обох
критеріям.
3.4.1.2. Програмний спосіб
При програмному способі псевдовипадкові числа нам необхідно сформувати методом множення.
Суть методу: вибирається два n - розрядних числа X1 і X2. X1>
Програма формування ГСК на основі методу множення наведена у Додатку № 2.
Отримані числа записуються в файл vi_gpsc1.dat і аналізуються за допомогою програми analize.
Визначення числових характеристик
№ Характеристика тео. значення статистич. значення
1 Мін.значеніе сукупність. 0.00068
2 Макс.значеніе сукупність 0.99995
3 математич. очікування 0.5 0.4928
4 Дисперсія 0.083 0.07822
5 Сред.квад.отклоненіе 0.1887 0.2796
Апроксимація статистичного розподілу теоретичної функцією
Перевірка відповідності чисел послідовності необхідного розподілу дає наступні результати:
Критерій Хі-Квадрат:
Х2 = 12.9
З довірчої ймовірністю 0.166 можна стверджувати про узгодженість теоретичних і статистичних даних.
Критерій Колмогорова:
Максимальна різниця max | F (x)-F * (x) | = 0.0885
З довірчої ймовірністю 0.999 можна стверджувати про узгодженість теоретичних і статистичних даних.
Визначення характеристик кореляції
????< br />
1
0?
5
Рис. 3. Графік зміни коеф.
кореляції
Висновок:
Отримана за методом множення послідовність СЧ, що мають рівномірний закон розподілу задовольняє висунутим вимогам по якості і може бути використаний в задачах моделювання, оскільки:
1) є узгодженість за критерієм Колмогорова
2) числа не залежать один від одного, про що говорить графік (Мал. 3.)
3.4.1.3. Вибір генератора РРПСЧ
Ефективність статистичного моделювання і достовірність отриманих результатів перебувають у прямій залежності від якості використовуваних у моделі випадкових послідовностей. Під якістю тут розуміється відповідність чисел послідовності заданої функції розподілу (щільності розподілу) та її параметрами: М.О. і т.д.; незалежність чисел послідовності один від одного, тобто відсутність автокореляції в послідовності випадкових чисел.
Виберемо генератор РРПСЧ, який використовується для генерації часу між надходженнями заявок від користувачів.
Послідовність чисел, отриманих апаратним способом і зберігаються у файлі vihod3.dat не зовсім задовольняє пред'явленим вимогам щодо якості, тому що немає згоди за критеріями теоретичних і статистичних даних.
У пункті 3.4.1.2. ми роблячи висновок вже говорили про те, що генератор РРПСЧ сформований програмним способом (за методом множення) можна використовувати в задачах моделювання, але для простоти будемо використовувати вбудовану функцію random (), просту в програмуванні і має гарні характеристики.
3.4.2. Моделювання випадкових впливів,
мають нерівномірний розподіл
Для стохастичної моделі потрібні числа розподілені за нормальним законом і за експоненціальним законом.
Напишемо функції формування чисел по необхідного закону розподілу. Ці числа запишемо у файл. Оцінимо якість отриманих послідовностей ПСЧ, користуючись автоматизованою системою analize. Проаналізуємо результати дослідження і зробимо висновок про якість кожної послідовності і про можливість їх використання в стохастичної моделі.
Відомості про безперервних випадкових величинах
Закон розподілу випадкових величин Нормальний N (m,?? Експоненц-ий ????????? Е???
Аналітичне вираження щільності ймовірності f (x) 1 - (xm) f (x )=-------- e 2? ????????????? ?? x f (x) =?? e
Визначальні параметри | m | ? > 0??> 0
Числові характеристики m D m? 1 /??????????????????????< br />
Алгоритм отримання випадкової величини ______ xi =???? ln z1 cos2?? Z2 xi 1 =???? ln z1 cos2?? Z2 (m = 0; D = 1) 1 xi =- ---- ln zi ?
Область значень випадкової величини
Дослідження послідовності нормально розподілених ПСЧ.
(Програма в додатку № 3)
Визначення числових характеристик
№ Характеристика Теоретичне значення Статистичне значення
1 Мін.знач.совокупності 11 12.31
2 Макс.знач.совокуп-ти 24 25.23
3 Мат. очікування 16 16.02
4 Дисперсія 2 2.07
5 Сред.квадр.отклоненіе 1 1.439
6 Коефф.ассіметріі 0 0.35
7 Ексцес 0 2.716
Апроксимація стат. розподілу теоретичної функцією.
Перевірка відповідності чисел послідовності необхідного розподілу дає наступні результати:
Критерій Хі-Квадрат:
Х2 = 0.0000813
З довірчої ймовірністю 0.999 можна стверджувати про узгодженість теоретичних і статистичних даних.
Критерій Колмогорова:
Максимальна різниця max | F (x)-F * (x) | = 0.0823
З довірчої ймовірністю 0.999 можна стверджувати про узгодженість теоретичних і?? татістіческіх даних.
Визначення характеристик кореляції
????< br />
1
0?
5
Рис. 4. Графік зміни коефіцієнта кореляції.
Висновок:
Отримана послідовність ПСЧ, що має нормальний закон розподілу, задовольняє висунутим вимогам по якості і може бути використана в задачах моделювання, оскільки
- Числові характеристики мають незначне відхилення від
теоретичних значень,
- За критеріями згоди отримані задовільні значення
довірчих ймовірностей,
- Числа послідовності достатньо незалежні, про що свідчить
графік (Мал. 4.)
Послідовності ПСЧ для 2-го і 3-го користувачів генеруються аналогічно, з тією лише різницею, що мат. очікування у них 17 і 18 відповідно.
Дослідження послідовності експоненціально розподілених ПСЧ
(Програма в додатку № 3)
Визначення числових характеристик
№ Характеристика Теоретичне значення Статистичне значення
1 Мін.знач.совокупності 0.5 0.8
2 Макс.знач.совокуп-ти 3.5 2.358
3 Мат. очікування 0.8 1.06
4 Дисперсія 0.08 0.066
5 Сред.квадр.отклоненіе 0.5 0.2575
6 Коефф.ассіметріі 0 1.682
7 Ексцес 0 1.097
Апроксимація стат. розподілу теоретичної функцією
Перевірка відповідності чисел послідовності необхідного закону розподілу дає наступні результати:
Критерій Хі-Квадрат:
Значення Х2 = 2310
З довірчої ймовірністю 0.999 можна стверджувати про узгодженість теоретичних і статистичних даних.
Критерій Колмогорова:
Максимальна різниця max | F (x)-F * (x) | = 0.023
З довірчої ймовірністю 0.91 можна стверджувати про узгодженість теоретичних і статистичних даних.
Визначення характеристик кореляції
????< br />
1
0?
5
Рис. 5. Графік зміни коефіцієнта кореляції.
Висновок:
Отримана послідовність ПСЧ, що мають експонентний закон розподілу, задовольняє висунутим вимогам по якості і може бути використана в задачах моделювання, оскільки
- Числові характеристики мають незначне відхилення від
теоретичних значень,
- За критеріями згоди отримані задовільні значення
довірчих ймовірностей,
- Числа послідовності достатньо незалежні, про що свідчить
графік (Рис. 5.)
3.5. Опис моделює програми для
стохастичної моделі
Перетворимо раніше створену детерміновану модель обчислювальної системи в стохастичну модель. Для цього потрібні наступні зміни детермінованою програми:
- Вставимо програмний генератор РРПСЧ - вбудовану функцію random ()
повертають РРПСЧ в інтервалі (0,1) - для визначення часу
між парафіями користувачів.
- Файл norm-1.dat, що має нормальний закон розподілу з m = 16, D = 2
для визначення часу підготовки завдання на 1-ій мережевий машині.
- Файл norm-2.dat, що має нормальний закон розподілу з m = 17, D = 2
для визначення часу підготовки завдання на 2-ий мережевий машині.
- Файл norm-3.dat, що має нормальний закон розподілу з m = 18, D = 2
для визначення часу підготовки завдання на 3-ій мережевий машині.
- Файл expon.dat, що має експонентний закон розподілу з m = 0.8
для визначення часу виконання завдання на ЕОМ.
- Приберемо функції введення з клавіатури які використовувалися для введення
параметрів системи.
Стохастична моделююча програма наведена в Додатку № 4.
4. Отримання та інтерпретація результатів
моделювання
Значення вихідних характеристик, отримані при прогін моделі з різними випадковими впливами.
№ прогону% виконаних завдань, поступ. від 2-го користувача
1 9%
2 9%
3 9%
4 9%
5 9%
6 9%
7 9%
8 9%
9 9%
10 9%
сред.зн. 9%
Висновок:
Усереднені значення вихідний характеристики підтверджують дані детермінованою моделі тому з введенням ймовірності приходу другого користувача рівною 0.1 в детерміновану модель теоретичне значення відсотка виконаних завдань надійшли від другого користувача стає рівним 10%.
Література
1. Розробка САПР. № 9
В.М. Чорненький. Імітаційне моделювання.
2. Лекції з курсу "Моделювання".
3. Б. Страуструп. Мова програмування С + +.
4. Шрайбер Г.Д. Моделювання на GPSS.
5. Є.І. Козелл. від Сі до С + +.
Додаток № 1
//ЗАВДАННЯ 15. Детермінована модель системи.
# include
# include
const emb = 1;// одиниця машинного часу
main ()
(Int tp = 100;// інтервал між парафіями користувачів
int tgz1 = 160;// час підготовки завдання 1-им користувачем
int tgz2 = 170;// час підготовки завдання 2-им користувачем
int tgz3 = 180;// час підготовки завдання 3-ім користувачем
int tm = 8;// час виконання завдання на ЕОМ
int k = 500;// кількість промоделювати на ЕОМ завдань
int t = 0;// час
char nz = 0;// наявність заявки на вході системи
char cikl = 0;// цикл приходу заявок
char pz1 = 0;// підготовка завдання на мережевій машині 1
char pz2 = 0;// підготовка завдання на мережевій машині 1
char pz3 = 0;// підготовка завдання на мережевій машині 1
char znw = 0;// наявність заявки на виконання завдання
char wz = 0;// виконання завдання на ЕОМ
char ocher [50];// чергу
char n = 0;// індекс вільного елемента в черзі
int w2 = 0;// кількість вип. завдань від 2-го користувача
int ztgz1, ztgz2, ztgz3, ztm, zk;// перем.для запам'ятовування параметрів системи
printf ( "Введіть інтервал між парафіями користувачів"); scanf ( "% d", & tp);
printf ( "Введіть час підготовки завдання 1-им користувачем");
scanf ( "% d", & tgz1); ztgz1 = tgz1;
printf ( "Введіть час підготовки завдання 2-им користувачем");
scanf ( "% d", & tgz2); ztgz2 = tgz2;
printf ( "Введіть час підготовки завдання 3-им користувачем");
scanf ( "% d", & tgz3); ztgz3 = tgz3;
printf ( "Введіть час виконання завдання на ЕОМ"); scanf ( "% d", & tm); ztm = tm;
printf ( "Введіть кількість промоделювати на ЕОМ завдань");
scanf ( "% d", & k); zk = k;
//----------- Моделює цикл -----------------------------------
while (k! = 0)
(T = t + emb;
//поява користувача
if (t% tp == 0)
switch (cikl)
(Case 0: nz = 1; cikl = 1; break;
case 1: nz = 2; cikl = 2; break;
case 2: nz = 3; cikl = 3; break;
case 3: nz = 1; cikl = 0;
)
//початок підготовки завдання
switch (nz)
(Case 1: pz1 = 1; nz = 0; break;
case 2: pz2 = 1; nz = 0; break;
case 3: pz3 = 1; nz = 0;
)
Додаток № 1 (продовження)
//підготовка завдання
if (pz1 == 1)
if (tgz1 == 0) (pz1 = 0; znw = 1; tgz1 = ztgz1;) else tgz1 = tgz1-emb;
if (pz2 == 1)
if (tgz2 == 0) (pz2 = 0; znw = 2; tgz2 = ztgz2;) else tgz2 = tgz2-emb;
if (pz3 == 1)
if (tgz3 == 0) (pz3 = 0; znw = 3; tgz3 = ztgz3;) else tgz3 = tgz3-emb;
//Запит на виконання
if (n! = 0 & & wz == 0) (wz = ocher [n-1]; n -;)// якщо чергу не порожня а ЕОМ свобода
//Те що виконують. заявку з черги
if (znw! = 0)// якщо є заявка на виконання
if (wz == 0) (wz = znw; znw = 0;)// якщо ЕОМ не зайнята
else// якщо ЕОМ зайнята, то ставимо заявку в чергу
(If (n> = 50) (printf ( "nПереполненіе черги! N"); return 0;)
else (ocher [n] = znw; znw = 0; n + +;)
)
//виконання завдання на ЕОМ
switch (wz)
(Case 1: if (tm == 0) (wz = 0; k -; tm = ztm;) else tm = tm-emb; break;
case 2: if (tm == 0) (wz = 0; k -; w2 + +; tm = ztm;) else tm = tm-emb; break;
case 3: if (tm == 0) (wz = 0; k -; tm = ztm;) else tm = tm-emb;
)
)
printf ( "nПроцент вип. завдань, поступ. від 2-го корис .=% d%", 100 * w2/zk);
)
Додаток № 2
//Генерування рівномірно розподілених випадкових величин
# include
long x = 7533;// псевдовипадкове число
long Rnd (long x)// процедура формування чергового псевдовипадкового числа
(Int l = 5169;
long k = 65536;
return (l * x)% k;
)
void main ()
(FILE * fout;// вихідний файл випадкових величин
int i;// параметр циклу
fout = fopen ( "vi_gpsc1.dat", "w");
for (i = 1; i
fclose (fout);
)
Додаток № 3
uses crt;
var f1, f2, f3, f4: text;
i: integer;
x, z1, z2, y1, y2, a, y3, y4, y5, y6: real;
procedure norm1 (var x1, x2: real);
begin
z1: = random;
z2: = random;
x1: = sqrt (-2 * ln (z1)) * cos (2 * pi * z2);
x2: = sqrt (-2 * ln (z1)) * sin (2 * pi * z2);
x1: = sqrt (2) * x1 +16;
x2: = sqrt (2) * x2 +16;
end;
procedure norm2 (var x1, x2: real);
begin
z1: = random;
z2: = random;
x1: = sqrt (-2 * ln (z1)) * cos (2 * pi * z2);
x2: = sqrt (-2 * ln (z1)) * sin (2 * pi * z2);
x1: = sqrt (2) * x1 +17;
x2: = sqrt (2) * x2 +17;
end;
procedure norm3 (var x1, x2: real);
begin
z1: = random;
z2: = random;
x1: = sqrt (-2 * ln (z1)) * cos (2 * pi * z2);
x2: = sqrt (-2 * ln (z1)) * sin (2 * pi * z2);
x1: = sqrt (2) * x1 +18;
x2: = sqrt (2) * x2 +18;
end;
procedure expon (a: real; var x: real);
begin
z1: = random;
x: =- (1/a) * ln (z1);
x: = sqrt (1/sqr (a)) * x +0.8;
end;
Begin
clrscr;
assign (f1, 'd: tpnorm-1.dat');
rewrite (f1);
assign (f3, 'd: tpnorm-2.dat');
rewrite (f3);
assign (f4, 'd: tpnorm-3.dat');
rewrite (f4);
writeln ( 'Нормальний закон :');< br />
for i: = 1 to 500 do
begin
norm1 (y1, y2); write (f1, y1, ''); write (f1, y2, '');
norm2 (y3, y4); write (f3, y3, ''); write (f3, y4, '');
norm3 (y5, y6); write (f4, y5, ''); write (f4, y6, '');
Додаток № 3 (продовження)
end;
close (f1); close (f3); close (f4);
assign (f2, 'd: tpexp.dat');
rewrite (f2);
writeln ( 'Експоненціальний закон');
writeln ( 'Введіть параметр a:'); readln (a);
for i: = 1 to 500 do begin expon (a, x); write (f2, x, ''); end;
close (f2);
End.
Додаток № 4
//стохастична модель системи
# include
# include
const emb = 1;// одиниця машинного часу
FILE * ravn, * norm1, * norm2, * norm3, * exp;
float a;
int ravnom ()
(Fscanf (ravn, "% f", & a);
return int (a * 5);
)
int normal1 ()
(Fscanf (norm1, "% f", & a);
return int (a * 10);
)
int normal2 ()
(Fscanf (norm2, "% f", & a);
return int (a * 10);
)
int normal3 ()
(Fscanf (norm3, "% f", & a);
return int (a * 10);
)
int expon ()
(Fscanf (exp, "% f", & a);
return int (a * 10);
)
//------------------------- Основна програма --------------------- -
main ()
(Int tp = 100;// інтервал між парафіями користувачів
int tgz1 = 160;// час підготовки завдання 1-им користувачем
int tgz2 = 170;// час підготовки завдання 2-им користувачем
int tgz3 = 180;// час підготовки завдання 3-ім користувачем
int tm = 8;// час виконання завдання на ЕОМ
int k = 500;// кількість промоделювати на ЕОМ завдань
int t = 0;// час
char nz = 0;// наявність заявки на вході системи
char cikl = 0;// цикл приходу заявок
char pz1 = 0;// підготовка завдання на мережевій машині 1
char pz2 = 0;// підготовка завдання на мережевій машині 1
char pz3 = 0;// підготовка завдання на мережевій машині 1
char znw = 0;// наявність заявки на виконання завдання
char wz = 0;// виконання завдання на ЕОМ
char ocher [50];// чергу
char n = 0;// індекс вільного елемента в черзі
int w2 = 0;// кількість вип. завдань від 2-го користувача
ravn = fopen ( "ravnomer.dat", "r");
norm1 = fopen ( "norm1.dat", "r");
norm2 = fopen ( "norm2.dat", "r");
norm3 = fopen ( "norm3.dat", "r");
exp = fopen ( "exp.dat", "r");
tgz1 = normal1 ();
Додаток № 4 (продовження)
tgz2 = normal2 ();
tgz3 = normal3 ();
tm = expon ();
tp = 10 + ravnom ();
//----------- Моделює цикл -----------------------------------
while (k! = 0)
(T = t + emb;
//поява користувача
if (t% tp == 0)
(Tp = 10 + ravnom ();
fscanf (ravn, "% f", & a);
if (a
if (a> 0.4 & & a
if (a> 0.5) nz = 3;
)
//початок підготовки завдання
switch (nz)
(Case 1: pz1 = 1; nz = 0; break;
case 2: pz2 = 1; nz = 0; break;
case 3: pz3 = 1; nz = 0;
)
//підготовка завдання
if (pz1 == 1)
if (tgz1 == 0) (pz1 = 0; znw = 1; tgz1 = normal1 ();) else tgz1 = tgz1-emb;
if (pz2 == 1)
if (tgz2 == 0) (pz2 = 0; znw = 2; tgz2 = normal2 ();) else tgz2 = tgz2-emb;
if (pz3 == 1)
if (tgz3 == 0) (pz3 = 0; znw = 3; tgz3 = normal3 ();) else tgz3 = tgz3-emb;
//Запит на виконання
if (n! = 0 & & wz == 0) (wz = ocher [n-1]; n -;)// якщо чергу не порожня а ЕОМ свобода
//Те що виконують. заявку з черги
if (znw! = 0)// якщо є заявка на виконання
if (wz == 0) (wz = znw; znw = 0;)// якщо ЕОМ не зайнята
else// якщо ЕОМ зайнята, то ставимо заявку в чергу
(If (n> = 50) (printf ( "nПереполненіе черги! N"); return 0;)
else (ocher [n] = znw; znw = 0; n + +;)
)
//виконання завдання на ЕОМ
switch (wz)
(Case 1: if (tm == 0) (wz = 0; k -; tm = expon ();) else tm = tm-emb; break;
case 2: if (tm == 0) (wz = 0; k -; w2 + +; tm = expon ();) else tm = tm-emb; break;
case 3: if (tm == 0) (wz = 0; k -; tm = expon ();) else tm = tm-emb;
)
)
printf ( "nПроцент вип. завдань, поступ. від 2-го корис .=% d%", 100 * w2/500);
fclose (ravn);
fclose (norm1);
fclose (norm2);
fclose (norm3);
fclose (exp);
)
22