51203

Аналитическое моделирование дискретно-стохастической СМО

Лабораторная работа

Информатика, кибернетика и программирование

Цель: Построить граф состояний СМО . Смысл кодировки состояний раскрыть (время до выдачи заявки, число заявок в накопителе и т.д.). На схеме условно обозначены

Русский

2014-02-07

241.97 KB

110 чел.

БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ

Кафедра ПОИТ

Отчёт

по лабораторной работе №3

“ Аналитическое моделирование дискретно - стохастической СМО ”

Вариант 11

Проверил:         Выполнил:

Мельник Н.И.       ст.гр. 750505

Мицкевич А.В.                    

Минск 2010

Цель:

Построить граф состояний СМО .  Смысл кодировки состояний раскрыть (время до выдачи заявки, число заявок в накопителе и т.д.).

На схеме условно обозначены

Источник с фиксированным временем ожидания выдачи заявки

2

Канал с вероятностью просеивания (не обслуживания заявки)

Источник/канал с дисциплиной отбрасывания заявки

Накопитель на N заявок

N

По графу построить аналитическую модель и, решив ее, определить вероятности состояний. Рассчитать теоретическое значение показателя абсолютной пропускной способности А.

Также  построить имитационную модель и исследовать ее (разработать алгоритм и написать имитирующую программу, предусматривающую сбор и статистическую обработку данных для получения оценок заданных характеристик СМО). Распределение интервалов времени между заявками во входном потоке и интервалов времени обслуживания – геометрическое с соответствующим параметром (2, π1, π2).

П1=0,4

П2=0,4

Выполнение  лабораторной работы:

Построение графа  состояний СМО.

Теоретические расчеты:

Построение имитационной программы.

Скриншот программы.

Листинг программы.

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 laba3_model

{

   public partial class Form1 : Form

   {

       Point st1 = new Point();

       Point st2 = new Point();

       Point st3 = new Point();

       Point st4 = new Point();

       Random random;

       bool flag=false;

       int Potk = 0;

       int chek_kol=0;

       int t;

       int j;

       int s1;

       int s2;

       double tmp,tmp1;

       double p1 ;

       double p2 ;

       int otbr = 0;

       public Form1()

       {

           random = new Random();

           t=2;

           j = 0;

           s1 = 0;

           s2 = 0;

           p1 = 0;

           p2 = 0;

           

           InitializeComponent();

 

       }

      

       private void pictureBox1_Paint(object sender, PaintEventArgs e)

       {

           st1.X = 20;

           st1.Y = 45;

           e.Graphics.DrawString(t.ToString(), new Font("Arial", 30), new SolidBrush(Color.Black), st1);

           st2.X = 140;

           st2.Y = 45;

           e.Graphics.DrawString(j.ToString(), new Font("Arial", 30), new SolidBrush(Color.Black), st2);

           st3.X = 245;

           st3.Y = 45;

           e.Graphics.DrawString(s1.ToString(), new Font("Arial", 30), new SolidBrush(Color.Black), st3);

           st4.X = 350;

           st4.Y = 48;

           e.Graphics.DrawString(s2.ToString(), new Font("Arial", 30), new SolidBrush(Color.Black), st4);

       }

       double rand()

       {

           return  (double)random.Next(0, 100)/100.000;

       }

      

       void fun()

       {

           label4.Text = "p1=" + p1.ToString();

           label5.Text = "p2=" + p2.ToString();

           switch (t)

           {

               case 2:

                   switch (j)

                   {

                       case 0:

                           switch (s1)

                           {

                               case 0:

                                   switch (s2)

                                   {

                                       case 0:  //2000

                                                t = 1; j = 0; s1 = 0; s2 = 0;

                                               break;

                                       case 1: //2001

                                           break;

                                   } break;

                               case 1:

                                   switch (s2)

                                   {

                                       case 0: //2010

                                           tmp = rand();

                                           if (tmp > p2) { t = 1; j = 0; s1 = 0; s2 = 1; }

                                           else { t = 1; j = 0; s1 = 1; s2 = 0; } break;

                                       case 1:  //2011

                                           tmp=rand();

                                           if (tmp <= p1 * p2) { t = 1; j = 0; s1 = 1; s2 = 0; }

                                           else

                                           {

                                               if (tmp > p1 * p2 && tmp <= (1 - p2) * p1) { t = 1; j = 0; s1 = 1; s2 = 0; }

                                               else

                                               { t = 1; j = 0; s1 = 0; s2 = 1; otbr++; }

                                           }break;                                            

                                   } break;

                           }break;

                       case 2:       

                           switch (s1)

                           {

                               case 0:

                                   switch (s2)

                                   {

                                       case 0:  // 2200                                                

                                               break;

                                       case 1:  //2201

                                           break;

                                   } break;

                               case 1:

                                   switch (s2)

                                   {

                                       case 0://2210

                                           tmp = rand();

                                           if (tmp <= p1) { t = 1; j = 2; s1 = 1; s2 = 0; }

                                           else { t = 1; j = 1; s1 = 1; s2 = 1;}

                                            break;

                                       case 1:  //2211

                                            tmp=rand();

                                            if (tmp <= p1 * p2) { t = 1; j = 2; s1 = 1; s2 = 1; }

                                            else

                                            {

                                                if (tmp > p1 * p2 && tmp <= (1 - p2) * p1) { t = 1; j = 2; s1 = 1; s2 = 0; }

                                                else

                                                   { t = 1; j = 1; s1 = 1; s2 = 1; otbr++; }

                                            }

                                            break;

                                   } break;             

                           } break;

                       case 1:

                           switch (s1)

                           {

                               case 0:

                                   switch (s2)

                                   {

                                       case 0://2100--net

                                           break;

                                       case 1://2101--net

                                           break;

                                   } break;

                               case 1:

                                   switch (s2)

                                   {

                                       case 0: //2110

                                           tmp = rand();

                                           if (tmp > p1) { t = 1; j = 0; s1 = 1; s2 = 1; }

                                           else { t = 1; j = 1; s1 = 1; s2 = 0; }

                                           break;

                                       case 1: //2111

                                           tmp = rand();

                                           if (tmp <= (p1 * p2)) { t = 1; j = 1; s1 = 1; s2 = 1; }

                                           else

                                           {

                                               if (tmp > (p1 * p2) && tmp <= (1 - p2) * p1) { t = 1; j = 1; s1 = 1; s2 = 0; }

                                               else

                                                { t = 1; j = 0; s1 = 1; s2 = 1; otbr++; }

                                           }break;                                            

                                   } break;

                           } break;

                   } break;

               case 1:

                   switch (j)

                   {

                       case 0:

                           switch (s1)

                           {

                               case 0:

                                   switch (s2)

                                   {

                                       case 0://1000                                            

                                           t = 2; j = 0; s1 = 1; s2 = 0;                                                                                        

                                           break;

                                       case 1: //1001

                                           tmp = rand();

                                           if (tmp > p2) { t = 2; j = 0; s1 = 1; s2 = 0; }

                                           else { t = 2; j = 0; s1 = 1; s2 = 1; }                                                                                                                                                                                     

                                           break;

                                   } break;

                               case 1:

                                   switch (s2)

                                   {

                                       case 0://1010

                                           tmp = rand();

                                           if (tmp < p2) { t = 2; j = 1; s1 = 1; s2 = 0; }

                                           else { t = 2; j = 0; s1 = 1; s2 = 1; }                                            

                                           break;

                                       case 1://1011

                                           tmp = rand();

                                           if (tmp <= (p1 * p2)) { t = 2; j = 1; s1 = 1; s2 = 1; }

                                           else

                                           {

                                               if (tmp > (p1 * p2) && tmp <= (1 - p2) * p1) { t = 2; j = 1; s1 = 1; s2 = 0; }

                                               else

                                                   { t = 2; j = 0; s1 = 1; s2 = 1; otbr++; }

                                           }

                                           break;

                                   } break;

                           } break;

                       case 2:       

                           switch (s1)

                           {

                               case 0:

                                   switch (s2)

                                   {

                                       case 0:  // 1200                                                

                                               break;

                                       case 1:  //1201

                                           break;

                                   } break;

                               case 1:

                                   switch (s2)

                                   {

                                       case 0://1210

                                           tmp = rand();

                                           if (tmp <= p1) { t = 2; j = 2; s1 = 1; s2 = 0; }

                                           else { t = 2; j = 2; s1 = 1; s2 = 1; }

                                            break;

                                       case 1:  //1211

                                            tmp = rand();

                                            if (tmp <= (1 - p2) * p1) { t = 2; j = 2; s1 = 1; s2 = 0;}

                                            else { t = 2; j = 2; s1 = 1; s2 = 1; otbr++; }                                                 

                                            break;

                                   } break;             

                           } break;  

                       case 1:

                           switch (s1)

                           {

                               case 0:

                                   switch (s2)

                                   {

                                       case 0://1100--net

                                           break;

                                       case 1://1101--net

                                           break;

                                   } break;

                               case 1:

                                   switch (s2)

                                   {

                                       case 0://1110

                                           tmp = rand();

                                           if (tmp <= p1) { t = 2; j = 2; s1 = 1; s2 = 0; }

                                           else { t = 2; j = 1; s1 = 1; s2 = 1; }

                                           break;

                                       case 1://1111

                                           tmp = rand();

                                           if (tmp <= (p1 * p2)) { t = 2; j = 2; s1 = 1; s2 = 1; }

                                           else

                                           {

                                               if (tmp > (p1 * p2) && tmp <= (1 - p2) * p1) { t = 2; j = 2; s1 = 1; s2 = 0; }

                                               else

                                                  { t = 2; j = 1; s1 = 1; s2 = 1; otbr++; }

                                           }

                                           break;

                                   } break;

                           } break;           

                   } break;

           }

           chek_kol++;

       }

       private void button1_Click(object sender, EventArgs e)

       {

           string txt = "";     

           if (flag==false)

           {

               

               fun();

               double tmp2=0;

               tmp1 = (double)chek_kol / 2.00;

               int p;

               p = chek_kol / 2;               

               if (Potk == 0) label1.Text = "Pотказа=???";

               else

               {                    

                   tmp2 = (double)Potk / (double)chek_kol;           

                   tmp2 *= 2;                   

               }                

           }

           else

           {

               Potk = 0;   // БЕЗ НАКАПЛИВАНИЯ

               chek_kol = 0;

               try

               {

                   listBox1.Items.Clear();

                   t = 2;

                   j = 0;

                   s1 = 0;

                   s2 = 0;

                   this.backgroundWorker1.RunWorkerAsync(2000);

                   otbr = 0;

                   for (int i = 0; i < 20000; i++)

                   {                        

                       txt = "";

                       txt = txt + t.ToString() + " " + j.ToString() + " " + s1.ToString() + " " + s2.ToString();                     

                       listBox1.Items.Add(txt);

                       fun();

                   }

                   double pie=otbr / 2;

                   label6.Text = "Кол отброс = " + pie.ToString();

                   label7.Text = "Кол заяыок = " + chek_kol.ToString();

                   double aps=(double)(chek_kol/2 - otbr) / (double)chek_kol;

                   label1.Text = "АПС="+ aps.ToString();

                   if (Potk == 0)

                   {                        

                       tmp1 = (double)Potk / (double)chek_kol;                     

                   }

                   else

                   {

                       chek_kol /= 2;                       

                       tmp1 = (double)Potk / (double)chek_kol;                                               

                   }

               }

               catch { };

           }

           txt = "";

           pictureBox1.Invalidate();      

           txt = txt + t.ToString()+" " + j.ToString() +" "+ s1.ToString() +" "+ s2.ToString();            

           listBox1.Items.Add(txt);            

       }

       private void radioButton2_CheckedChanged(object sender, EventArgs e)

       {

           Potk = 0;

           chek_kol=0;            

           listBox1.Items.Clear();

           flag = true;

       }

       private void Вручную_CheckedChanged(object sender, EventArgs e)

       {

           Potk = 0;

           chek_kol = 0;

           t = 2;

           j = 0;

           s1 = 0;

           s2 = 0;            

           listBox1.Items.Clear();

           flag = false;

       }

       private void textBox1_TextChanged(object sender, EventArgs e)

       {

          

       }

       private void button2_Click(object sender, EventArgs e)

       {

           try

           {

               if (textBox1.Text != "")

                   p1 = Convert.ToDouble(textBox1.Text);

               else p1 = 0.8;

               if (textBox2.Text != "")

                   p2 = Convert.ToDouble(textBox2.Text);

               else p2 = 0.6;

               label4.Text = "p1=" + p1.ToString();

               label5.Text = "p2=" + p2.ToString();

               t = 2;

               j = 0;

               s1 = 0;

               s2 = 0;

           }

           catch { };            

       }

       private void pictureBox1_Click(object sender, EventArgs e)

       {

       }

       private void progressChange(object sender, ProgressChangedEventArgs e)

       {

       }

   }

}

Вывод:

В результате лабораторной  работы были построены имитационная и аналитическая модели,

Были исследованы характеристики данных моделей.


 

А также другие работы, которые могут Вас заинтересовать

15206. С.Бегалин - халықтың сүйікт жазушысы 287.5 KB
  Сүйіктісі халықтың Жүрегіңнің алаулатып жалынын Тамыршыдай дарындыны таныдың. Қабыл болып ізгі тілек ақ батаң Алдым шексіз ғибрат мол тағылым. Танымастай өзгерді ел жер кейпі Озбырлықтың мәңгүрт басы еңкейді. Семейдегі жарылыстың үні өшіп Абыра...
15207. Сағат Әшімбаев 188 KB
  Заманынан озып туған азамат еді Сағат Әшімбаев туралы Қоғамды қозғайтын адам санасын өзгертетін тұлғалар болады. Олар өзінің қатарынан заманынан озық туады. Өткен ғасырдың алпысыншы сексенінші жылдарының арасы қазақ руханиятына дарындыларды үйіптөгіп
15208. Саттар Ерубаев 146.5 KB
  Саттар Ерубаев 1914-1973 Қысқаша өмірбаяны: Саттар Ерубаев 1914 жылы Түркістан ауданыныда дүниеге келді. Балалар үйінде тәрбиеленген. 1927 жылы Түркістан ауданы Комсомол колхозында қызмет істейді. ҚазКСР Оқу халық комиссариатының жоғары оқу орнында даярлау курсы...
15209. Сегіз сері (Мұхамедқанапия) Баһрамұлы Шақшақов поэзиясы (1818 - 1854) 83 KB
  Сегіз сері Мұхамедқанапия Баһрамұлы Шақшақов поэзиясы. 1818 1854 Сабақтың мақсаты : 1. Білімділік : Серілер поэзиясы туралы ойларын тереңдету серілерге тән ортақ қасиетті танып білу Сегіз серінің өзіне ғана тән қасиеттерін ерекшелеу ажырату. Өңдерімен жән...
15210. ТАРЛАН ТАЛАНТ ТАҒДЫРЫ 75 KB
  ТАРЛАН ТАЛАНТ ТАҒДЫРЫ Мұқанов Сәбит Мұқанұлы 1900-1973 қазақтың әйгілі жазушысы қоғам қайраткері Қазақ КСР Ғылым академиясының академигі. Туған жері қазіргі Солтүстік Қазақстан облысының Жамбыл ауданындағы Жаманшұбар деген жер. Әке шешеден жастай жетім қа
15211. Сәкен Иманасовтың өлеңдерiн оқудан өрбiген ой 47.5 KB
  Екi тумас ер ақын Сәкен Иманасовтың өлеңдерiн оқудан өрбiген ой Әлемдi билейтiн сөз сөздi билейтiн ақын. Талантпен талғаммен қоса табандылықты азаматтықты қажет ететiн ақын болу қиынның қиыны. Азаматтық жоқ жерде ақындық та жоқ. Төлеген Айбергенов: Ақын болу оң
15212. Сүйінбай Аронұлы 170 KB
  Сүйінбай Аронұлы 1815-1898 Сүйінбай ақын Алматы облысының Жамбыл ауданы Қарақыстақ ауылында дүниеге келген сонда қайтыс болды. Қазақ халқының ақыны айтыс өнерінің шебері. Аронұлы Сүйінбай 1815 1898 қазақтың әйгілі ақыны айтыс өнерінің майталман жүйрігі. Туып өске...
15213. Торайғыров Сұлтанмахмұт 59 KB
  Торайғыров Сұлтанмахмұт 1893-1920 Торайғыров Сұлтанмахмұт қазақ ақыны ағартушы қоғам қайраткері ойшыл. Солтүстік Қазақстан облысының Уәлиханов ауданында туған. Торайғыровтың 3 жасында шешесі қайтыс болып 6 жасына дейін әжесінің тәрбиесінде болды. Кейін әкес
15214. Төлеген Айбергенов 62 KB
  Төлеген Айбергенов Сағындым жаным мен сені Көркіңді жүрген қуаныш қылып мендей ме екен бар ағаң Шын інім болсаң бас бұрма жаным өсек ғайбатқа бораған. Қажет жерінде қатыгездік пен қаталдық керек десек те Адамның заңғар ұлылығын сен сағынышымен есепте. ...