Імітаційне моделювання системи масового обслуговування типу ММ1 із застосуванням методу зміни системного часу з кроком до наступної події

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Не вказано

Інформація про роботу

Рік:
2013
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Планування експериментів

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ Національний університет “Львівська політехніка” Кафедра АСУ  Звіт до лабораторної роботи № 3 з дисципліни «Планування експериментів» на тему: «Імітаційне моделювання системи масового обслуговування типу М\М\1 із застосуванням методу зміни системного часу з кроком до наступної події» 1. Мета Ознайомлення з методом імітаційного моделювання по подіях із змінним прирістом кроку часової змінної для дослідження систем масового обслуговування (СМО). Об’єм роботи: 4 години. 2. Теоретичні положення 2.1. Механізм системного часу. Однією з найбільш важливих задач при створенні моделі і виборі мови програмування є визначення механізму регламентації подій і процесів. Поняття регламентації в імітаційному моделюванні включає два етапи або дві функції: просування часу або коректування часової координати стану системи і забезпечення узгодженості різних блоків і подій в системі. Оскільки дії, які виконуються різними блоками залежать від дій і станів інших елементів, вони повинні бути скоординовані у часі або сихронізовані. Таким чином функціонування моделі повинно протікати у штучному часі, забезпечуючи появу подій в належному порядку і з належним часовим інтервалом між ними. Хоча компоненти реальної системи функціонують одночасно, компоненти цифрової імітаційної моделі діють послідовно, оскільки в цифровій ЕОМ в кожен момент часу виконується лише одна команда (принцип дії її послідовний), тобто обробляється лише один компонент системи. Оскільки в різних частинах реальної системи події можуть виникати одночасно, необхідно побудувати деякий механізм задання часу для синхронізації дій компонентів системи на даному часовому інтервалі. Існують два основних методи задання часу – за допомогою фіксованих і змінних інтервалів часу. Їх також називають відповідно методами фіксованого кроку і кроку до наступної події. По методу фіксованого часового кроку відлік системного часу ведеться через попередньо визначенні часові інтервали постійної довжини моделювання протікає у звичайному часі з фіксованим кроком. При використанні методу змінного кроку або кроку до наступної події, стан системи, яка моделюється, оновлюється з появою кожної суттєвої події незалежно від інтервалів часу між ними (моделювання протікає у часі подій). Імітаційні моделі також зручно класифікувати по двох основних категоріях: моделі з неперервною зміною стану; моделі з дискретною зміною стану; В перших використовуються механізми фіксованого приросту часових інтервалів. Ними зручно описувати поведінку системи, які представляються неперервними потоками інформації. Моделі другого виду знаходять застосування тоді, коли дослідника цікавить поведінка окремих елементів в системі. В більшості моделей з дискретною зміною станів використовується метод відліку часу до наступної події. Розглянемо діаграми, які демонструють способи представлення і управління часом в обох випадках (рис.1). По осі часу відкладена одна і та ж сама послідовність подій ei. Стрілки вказують на точки, в яких відбувається приріст часу на один такт, і момент наступлення чергових подій. а) змінного кроку  б) фіксованого кроку  Рис. 1. Механізм управління часом. В моделі, яка використовує принцип кроку до наступної події, час, який імітується при зміні, зсувається вперед точно на момент наступлення самого раннього з наступних подій. При цьому послідовність моментів часу така: S1=e1, S2=e2, S3=e3, S4=e4=e5=S5, S6=e6, де конкретні значення часу в точності дорівнюють величинам: e1, e2,..., які відповідають моментам появи подій. В другій моделі, яка використовує метод фіксованого часового кроку моменти модельного часу будуть послідовно приймати значення: S1'=(t, S2'=2t, S3'=3t, S4'=4t. Ці моменти часу ніяк не зв'язані з моментами появи подій e1, e2,..., які імітує модель. Модельний час в цьому випадку отримає постійний приріст на попередньо вибрану величину t. У кожному з цих методів є свої переваги. В моделі, яка використовує метод задання кроку до наступної події, обробка подій виконується послідовно і час імітації кожний раз зміщується вперед на початок наступної події, кожна з яких обслуговується по черзі. В моделі з фіксованим кроком обробка подій відбувається по-іншому, а саме: по групам, пакетам або множинам подій. Припустимо, що заданий час Sk'. Тоді обробка всіх подій ep, eq, er,.. для яких виконується наступна умова: Sk'-1<ep,eq,er,..<=Sk' виконується до того, як модульний час отримає приріст до Sk+1. Якщо величина t вибрана неправильно, результати також можуть бути невірними, оскільки всі події будуть з'являтися в точці, яка відповідає верхній межі інтервалу (рис.2).  Рис. 2. Механизм обробки подій з фіксованим прирістом часу при збільшенні величини t у два рази. Для метода фіксованих інтервалів при тривалості імітації системи з m компонентів на проміжку T одиниць часу потрібно T+m раз визначати необхідність коректування характеристик стану цих компонентів. При середній тривалості події t одинць часу таких коректувань треба виконати Tm/t. Ця кількість коректувань не залежить від способу задання часових інтервалів. При зміні метода задання кроку до наступної події необхідно знайти мінімальну з множини з m значень для кожного з Tm/t коректувань, для чого потрібно провести m-1 порівнянь. Таким чином, порівнюючи величини (Tm/t)(m-1) і Tm можна прийти до висновку, який з методів кращий. Наприклад, при t<m-1 перевагу має метод з фіксованим вибором кроку. Застосування одного з двох методів залежить від характеру тієї системи, яка моделюється, але метод фіксованих кроків працює краще якщо: події з'являються регулярно і розподілені у часі відносно рівномірно; на протязі циклу моделювання T з'являється багато подій, причому математичне сподівання тривалості подій мале; точна природа суттєвих подій неясна як це буває на початковому етапі імітаційного дослідження. З іншої сторони методу задання кроку до наступної події вигідніший тим, що: дозволяє економити машинний час у випадку статистичних систем, в яких суттєві події можуть довгий час не наступати; не потрібно визначати величину приросту часу (що впливає і на тривалість циклу моделювання і на точність); може ефективно використовуватись при нерівномірному розподілі подій у часі або при великому значенні математичного сподівання їх тривалостей. 2.2. Реалізація моделювання по подіях. Для моделювання СМО типу М\М\1 виділемо наступні характерні події: R- запит ресурса для заявки (канала пристрою Q ) R- призначення ресурса заявці (канала пристрою Q ) R- звільнення ресурса заявкою (канала пристрою Q ) Послідовність планування та обробка подій схематично зображена на рис.3  Рис. 3. Діаграма планування послідовності подій, пов’язаних з обслуговуванням заявок. Події R- запит ресурса для заявки та R- призначення ресурса заявці можна об’єднати в одну подію R- запит-призначення ресурсу заявці. Механізм синхронізації подій реалізується за допомогою списка подій, представленого на рис. 4.  Рис. 4. Механізм синхронізації подій. При обробці кожної події планується інша подія згідно діаграми подій (рис.3) і виконується накопичення статистичних даних згідно виразів (2.2.1)-(2.2.7). Коефіцієнт завантаження канала  пристрою Q:  (2.2.1) де  – час обслуговування j-ї заявки, Т – загальний час моделювання, n – кількість заявок, які пройшли через обслуговуючий пристрій Q. Середній час обслуговування пристроєм .  (2.2.2) де  і n мають ті самі значення, що і в виразі (2.2.1). Середня довжина черги до пристрою  .  (2.2.3) де  – поточне значення довжини черги до пристрою Q при поступленні в чергу заявки або звільненні з черги заявки,  - проміжок часу, на протязі якого поточне значення черги  не змінюється, m – кількість змін стану черги на протязі часу моделювання Т. Максимальна довжина черги .  () (2.2.4) Середній час очікування обслуговування заявки каналом пристрою Q:  (2.2.5) де  – час очікування j-ї заявки в черзі до пристрою Q, n – має те ж саме значення, що і в виразі (2.2.1). Максимальний час очікування  заявки у черзі до пристрою Q:  () (2.2.6) де  і n мають ті ж самі значення, що і в виразі (2.2.5). Середній час перебування заявки в пристрої Q:  (2.2.7) де ,  мають ті самі значення, що і у виразах (2.2.2), (2.2.5). Порядок виконання роботи. Скласти програму, яка моделює одноканальну СМО з експоненціальним законом розподілу інтервалів часу між моментами поступлення заявок та експоненціальним законом часу обслуговування. Програма повинна обчислювати усереднені характеристики (2.2.1)-(2.2.7) Отримати роздрук результатів роботи програми. Оформити звіт по результатах виконаної роботи. Індивідуальне завдання Варіант 6 № варіанту Значення вхідних даних   Початкове значення генератора X0 Середній проміжок часу між поступленнями заявок хв. Середній час обслуговування заявок хв.  6 79753 12 7   Результати роботи програми Program.cs using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; namespace SMOMM1 { public struct Harakter { public int Nzayvka; public double Tpost; public double Tserv; } public class Zayvka { public Harakter Harak; public Zayvka(int Nomerzayvku, double Chaspost, double Chasserv) { Harak.Tpost = Chaspost; Harak.Tserv = Chasserv; Harak.Nzayvka = Nomerzayvku; } } public class Podiy { public enum TypPodij { Post = 1, Give = 2, Free = 3 }; public TypPodij typ; public int Nzayvka; public double Time; public Podiy(TypPodij typ, int Nzayvka, double Time) { this.typ = typ; this.Nzayvka = Nzayvka; this.Time = Time; } } static class Program { /// <summary> /// Главная точка входа для приложения. /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } } Form1.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace SMOMM1 { public partial class Form1 : Form { long X, A, m = 0, dt = 0; int count_obsl = 0; long index = 0; double temp = 0, d = 0; double TOBSL = 0; private Podiy.TypPodij TypePodijNext; private int ZagalnKilkZamovl; private int TZagalnImit; private int LcherMax; private bool KanalBusy; private double Lcher; private double TSpost, TSserv; private double Chasmodeluvannia, ChasOstanPodij, Chasoch, ChasochMax, ChasZagalnObslug; private Podiy PodiyCurr = null; private List<Podiy> ListPodij = new List<Podiy>(); private List<Podiy> ListPodij2 = new List<Podiy>(); private List<Zayvka> ChergaZayvok = new List<Zayvka>(); public Form1() { InitializeComponent(); } public long multuplikatuv(long A, long X, long m) { this.X = (A * X) % m; return this.X; } public double exponencial(double Time) { return -Time * (Math.Log((double)multuplikatuv(A, X, m) / (double)m)); } public void DodavanniaPodiy(Podiy podiy) { int position = 0; for (int i = 0; i < ListPodij.Count; i++) if (ListPodij[i].Time > podiy.Time) { position = i; break; } else position = ListPodij.Count; ListPodij.Insert(position, podiy); } public void ZaputResyrsy() { DodavanniaPodiy(new Podiy(Podiy.TypPodij.Give, PodiyCurr.Nzayvka, Chasmodeluvannia)); ZagalnKilkZamovl++; temp = Chasmodeluvannia; double time = Chasmodeluvannia + exponencial(TSpost); DodavanniaPodiy(new Podiy(Podiy.TypPodij.Post, ZagalnKilkZamovl, time)); dataGridView1[0, dataGridView1.RowCount - 2].Value = PodiyCurr.Nzayvka; dataGridView1[1, dataGridView1.RowCount - 2].Value = "прибуття"; dataGridView1[2, dataGridView1.RowCount - 2].Value = Chasmodeluvannia; dataGridView1.RowCount++; ListPodij.Remove(PodiyCurr); } public void OtrumatuResyrs() { if (KanalBusy == true) { temp = exponencial(TSserv); ChergaZayvok.Add(new Zayvka(PodiyCurr.Nzayvka, PodiyCurr.Time, temp)); ListPodij.Remove(PodiyCurr); int queueLength = ChergaZayvok.Count; if (LcherMax < queueLength) { LcherMax = ChergaZayvok.Count; } } else { KanalBusy = true; double time = Chasmodeluvannia + exponencial(TSserv); TOBSL += time - Chasmodeluvannia; dt = TZagalnImit; index = (long)Chasmodeluvannia / dt; if (time > (index + 1) * dt) { d = time - (index + 1) * dt; } DodavanniaPodiy(new Podiy(Podiy.TypPodij.Free, PodiyCurr.Nzayvka, time)); dataGridView1[0, dataGridView1.RowCount - 2].Value = PodiyCurr.Nzayvka; dataGridView1[1, dataGridView1.RowCount - 2].Value = "виділення ресурсу"; dataGridView1[2, dataGridView1.RowCount - 2].Value = Chasmodeluvannia; dataGridView1.RowCount++; } ListPodij.Remove(PodiyCurr); } public void OcustutuResyrs() { int queueLength; double delayTime; count_obsl += 1; queueLength = ChergaZayvok.Count; dataGridView1[0, dataGridView1.RowCount - 2].Value = PodiyCurr.Nzayvka; dataGridView1[1, dataGridView1.RowCount - 2].Value = "покидання системи"; dataGridView1[2, dataGridView1.RowCount - 2].Value = Chasmodeluvannia; dataGridView1.RowCount++; KanalBusy = false; ListPodij.Remove(PodiyCurr); if (queueLength == 0) { KanalBusy = false; } else { double time = Chasmodeluvannia; DodavanniaPodiy(new Podiy(Podiy.TypPodij.Give, ChergaZayvok[0].Harak.Nzayvka, time)); delayTime = Chasmodeluvannia - ChergaZayvok[0].Harak.Tpost; if (ChasochMax < delayTime) { ChasochMax = delayTime; } Chasoch += delayTime; ChergaZayvok.RemoveAt(0); } } public void NewStatistika() { double timeSinceLastEvent; timeSinceLastEvent = Chasmodeluvannia - ChasOstanPodij; ChasOstanPodij = Chasmodeluvannia; Lcher += ChergaZayvok.Count * timeSinceLastEvent; ChasZagalnObslug += (KanalBusy == true) ? 1 * timeSinceLastEvent : 0 * timeSinceLastEvent; } private void button1_Click(object sender, EventArgs e) { int iter = 1; dataGridView1.RowCount = 2; X = Convert.ToInt32(textBox1.Text); TZagalnImit = Convert.ToInt32(textBox2.Text);//500 A = X;//96837 TSpost = Convert.ToInt32(textBox3.Text);//23 the middle time of progresive TSserv = Convert.ToInt32(textBox4.Text);//18 the middle time of care Chasmodeluvannia = 0.0; KanalBusy = false; LcherMax = 0; ChasOstanPodij = 0.0; ZagalnKilkZamovl = 0; Chasoch = 0.0; ChasochMax = 0.0; Lcher = 0.0; ChasZagalnObslug = 0.0; ZagalnKilkZamovl++;//1 double time = Chasmodeluvannia + exponencial(TSpost); DodavanniaPodiy(new Podiy(Podiy.TypPodij.Post, ZagalnKilkZamovl, time)); while (Chasmodeluvannia < TZagalnImit) { PodiyCurr = ListPodij[0]; TypePodijNext = PodiyCurr.typ; Chasmodeluvannia = PodiyCurr.Time; NewStatistika(); switch (TypePodijNext) { case Podiy.TypPodij.Post: ZaputResyrsy(); break; case Podiy.TypPodij.Give: OtrumatuResyrs(); break; case Podiy.TypPodij.Free: OcustutuResyrs(); break; } if (Chasmodeluvannia > iter * TZagalnImit) { iter++; } } label12.Text = Convert.ToString(ChasZagalnObslug / Chasmodeluvannia); label13.Text = Convert.ToString(ChasZagalnObslug / (ZagalnKilkZamovl - 1)); label14.Text = Convert.ToString((ChasZagalnObslug / (ZagalnKilkZamovl - 1)) + (Chasoch / (ZagalnKilkZamovl - 1))); label15.Text = Convert.ToString(Chasoch / (ZagalnKilkZamovl - 1)); label16.Text = Convert.ToString(ChasochMax); label17.Text = Convert.ToString(LcherMax); label18.Text = Convert.ToString(Lcher / Chasmodeluvannia); } private void Form1_Load(object sender, EventArgs e) { m = Convert.ToInt64(Math.Pow(2.0, 20.0)); dataGridView1.RowCount = 2; dataGridView1.ColumnCount = 3; dataGridView1.Columns[0].Name = "№"; dataGridView1.Columns[0].Width = 50; dataGridView1.Columns[1].Name = "Тип події"; dataGridView1.Columns[1].Width = 200; dataGridView1.Columns[2].Name = "Час моделювання"; dataGridView1.Columns[2].Width = 200; } } } Результати роботи програми  Рис.1 Висновок: На лабораторній роботі я ознайомився з методом імітаційного моделювання по подіях із змінним прирістом кроку часової змінної для дослідження систем масового обслуговування (СМО).
Антиботан аватар за замовчуванням

10.02.2013 12:02-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!