50692

Построение аналитической и имитационной модели

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

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

Построить аналитическую и имитационную модели и сравнить результаты исследования Одноканальная СМО с неограниченной очередью Исследовать значения средней длины очереди, среднего времени ожидания в очереди при показательном и равномерном (a = 0.05, b =0,75) распределении входного потока.

Русский

2014-01-28

114.5 KB

9 чел.

Цель:

Построить аналитическую и имитационную модели и сравнить результаты исследования

Одноканальная СМО с неограниченной очередью

               =2.5                                     =3

   

Исследовать значения средней длины очереди , среднего времени ожидания в очереди при показательном и равномерном (a = 0.05, b =0,75) распределении входного потока.                                                 

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

Построение аналитической модели

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

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

namespace laba4_model

{

   public partial class Form1 : Form

   {

       double l = 2.5;

       double m = 3.0;

       double ostatok=0;

       int ochered = 0;

       //double ostat_och = 0;

       double sr_dlina_och = 0;

       double sr_time_ogid = 0;

       int col_uvilich = 0;

       double[] col = new double[10000];

       List<int> series = new List<int>();

       int n=100;

       int znach;//kolvo sozdaniya ocheredei

       int znacht;//

      // bool flag = false;//dly nachala uvelicheniya kol-vo ocheredei

       bool ind = true;

       double time=0;

       Random rand;

       public Form1()

       {

           InitializeComponent();

           rand = new Random();

           label6.Text = "Кол-во обращений = " + n.ToString();

           label8.Text = "l = " + l.ToString();

           label9.Text = "m = " + m.ToString();

           znacht = 0;

       }

       double eksp(double tmp)

       {

           return -Math.Log(rand.NextDouble()) / tmp;

       }

       double ravn()

       {

           return l+(m-l)*rand.NextDouble() ;

       }

       private void button1_Click(object sender, EventArgs e)

       {

           double temp;

           double ogid, obrab;

           //ochered = 0;

           if (ind)

           {

               ogid = eksp(l);

               obrab = eksp(m);

           }

           else

           {

               ogid = ravn();

               obrab = ravn();

           }

           if (obrab > ogid)

           {

               temp = (obrab - ogid);

               ostatok = ostatok + temp;

               time = time + ostatok;

                 if (ostatok >= ogid)

               {

                   ostatok = ostatok - ogid;

                   time = time + ostatok;

                   col[ochered] = ogid;

                   ochered++;

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

                       time = time + col[i];

                       col_uvilich = ochered;

                   

               }

               else

               {

               }

           }

           else

           {

               

               if (ostatok>0)

               {

                   temp = (ogid - obrab);

                   ostatok = ostatok - temp;

                   

                   

                   if (ochered>0)

                   {

                       

                       ostatok = ostatok + col[ochered];

                       time = time + ostatok;

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

                           time = time + col[i];

                       ochered--;

                       col_uvilich = ochered;

                   }

                   else

                   {

                   }

               }

               else

               {

               }

           }

                   series.Add(col_uvilich);

                   col_uvilich = 0;

                   znach++;

           n++;

           sr_dlina_och = series.Sum() / /*(double)*/znach;

           sr_time_ogid = (double)time / (double)znach;

           temp = ogid - obrab;

           label1.Text ="Ожидание прих. заявки = "+ ogid.ToString();

           label2.Text = "Обработка заявки = " + obrab.ToString();

           label3.Text = "Общий остаток = " + ostatok.ToString();

           label4.Text = "Кол-во заявок в очереди = "+ochered.ToString();

           label5.Text = "Текущий остаток = " + temp.ToString();

           label7.Text = "Средняя длина очереди = " + sr_dlina_och.ToString();

           label6.Text = "Кол-во обращений = " + n.ToString();

           label10.Text = "Среднее время ожидания = " + sr_time_ogid.ToString();

       }

       private void button2_Click(object sender, EventArgs e)

       {

           ochered = 0;

           col_uvilich = 0;

           znach=0;

           time = 0;

           sr_time_ogid = 0;

           label6.Text = "Кол-во обращений = " + n.ToString();

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

           {

               double temp;

               double ogid, obrab;

               if (ind)

               {

                   ogid = eksp(l);

                   obrab = eksp(m);

               }

               else

               {

                   ogid = ravn();

                   obrab = ravn();

               }

               if (obrab > ogid)

               {

                   temp = (obrab - ogid);

                   ostatok = ostatok + temp;

                   

                   if (ostatok >= ogid)

                   {

                       ostatok = ostatok - ogid;

                       time = time + ostatok;

                       col[ochered] = ogid;

                       ochered++;

                       for (int j = 0; j < ochered; j++)

                           time = time + col[j];

                       col_uvilich = ochered;

                   }

                   else

                   {

                   }

               }

               else

               {

                   if (ostatok > 0)

                   {

                       temp = (ogid - obrab);

                       ostatok = ostatok - temp;

                       if (ochered > 0)

                       {

                           ostatok = ostatok + col[ochered];

                           time = time + ostatok;

                           ochered--;

                           for (int j = 0; j < ochered; j++)

                               time = time + col[j];

                           col_uvilich = ochered;

                           //flag = true;

                       }

                       else

                       {

                       }

                   }

                   else

                   {

                   }

               }

                   {

                       series.Add(col_uvilich);

                       col_uvilich = 0;

                       znach++;

                   }

               if (i == n - 1)

               {

                   temp = ogid - obrab;

                   int summa = series.Sum();

                   sr_time_ogid = (double)time / (double)znach;

                   sr_dlina_och = /*(double)*/summa / /*(double)*/znach;

                   sr_time_ogid = sr_time_ogid ;

                   label1.Text = "Ожидание прих. заявки = " + ogid.ToString();

                   label2.Text = "Обработка заявки = " + obrab.ToString();

                   label3.Text = "Общий остаток = " + ostatok.ToString();

                   label4.Text = "Кол-во заявок в очереди = " + ochered.ToString();

                   label5.Text = "Текущий остаток = " + temp.ToString();

                   label7.Text = "Средняя длина очереди = " + sr_dlina_och.ToString();

                   label10.Text = "Среднее время ожидания = " + sr_time_ogid.ToString();             

               }

               

           }

           series.Clear();

           col_uvilich = 0;

          // n = 0;

       }

       private void button3_Click(object sender, EventArgs e)

       {

           if (textBox1.Text != "")

           n = Convert.ToInt32(textBox1.Text);

           label6.Text = "Кол-во обращений = " + n.ToString();

           znach = 0;

           znacht = 0;

           time = 0;

           ochered = 0;

           ostatok = 0;

           sr_time_ogid = 0;

           label10.Text = "Среднее время ожидания = " + sr_time_ogid.ToString();

           //flag = false;

           series.Clear();

       }

       private void button4_Click(object sender, EventArgs e)

       {

           if (textBox2.Text != "")

           l = Convert.ToDouble(textBox2.Text);

           if (textBox3.Text != "")

           m = Convert.ToDouble(textBox3.Text);

           if (ind)

           {

               label8.Text = "l = " + l.ToString();

               label9.Text = "m = " + m.ToString();

           }

           else

           {

               label8.Text = "a = " + l.ToString();

               label9.Text = "b = " + m.ToString();

           }

       }

       private void button5_Click(object sender, EventArgs e)

       {

           if (ind)

           {

               button5.Text = "Изменить на показательное";

               l = 0.05;

               m = 0.75;

               ind = false;

              

           }

           else

           {

               

               button5.Text = "Изменить на равномерное";

               l = 2.5;

               m = 3.0;

               ind = true;

           }

           if (ind)

           {

               label8.Text = "l = " + l.ToString();

               label9.Text = "m = " + m.ToString();

           }

           else

           {

               label8.Text = "a = " + l.ToString();

               label9.Text = "b = " + m.ToString();

           }

       }

   }

}

6


 

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

11562. Фазовая автоподстройка частоты 212.5 KB
  Лабораторная работа № 5 Фазовая автоподстройка частоты Оглавление. Предисловие. Содержание учебного пособия соответствует программе курса Устройства приема и обработки сигналов предусмотренного государственным образовательным стандарт...
11563. Решение прямой и обратной задач магниторазведки для шара 223.5 KB
  Лабораторная работа № 1 по дисциплине Полевая геофизика Тема: Решение прямой и обратной задач магниторазведки для шара Цель работы: Вычислить значенияZa и Ha – компонент магнитного поля для вертикально намагниченного шара а так же определить параметры шарооб
11564. Решение прямой и обратной задач магниторазведки для вертикально намагниченного пласта малой мощности 121 KB
  Лабораторная работа № 2 по дисциплине Полевая геофизика Тема: Решение прямой и обратной задач магниторазведки для вертикально намагниченного пласта малой мощности Понятие малая мощность используется в том случае когда видимая мощность пласта во мно...
11565. Решение прямой и обратной задачи для наклонного пласта малой мощности с косой намагниченностью 134.5 KB
  Лабораторная работа № 3 по дисциплине Полевая геофизика Тема: Решение прямой и обратной задачи для наклонного пласта малой мощности с косой намагниченностью Для пласта малой мощности безграничного на глубину и по простиранию значение видимой мощности меньше...
11566. Аномалии силы тяжести в редукции Буге. Принципы качественной интерпретации 63 KB
  Лабораторная работа № 4 по дисциплине Полевая геофизика Тема: Аномалии силы тяжести в редукции Буге. Принципы качественной интерпретации Общие положения: Основную величину в наблюденных значениях силы тяжести составляет нормальная сила тяжести g. При измер...
11567. Прямая задача гравиразведки. Обратная задача гравиразведки. Расчет гравитационного влияния шарообразного (сферического) тела, нахождение параметров тела 105 KB
  Лабораторная работа № 6 по дисциплине Полевая геофизика Тема: Прямая задача гравиразведки. Обратная задача гравиразведки. Расчет гравитационного влияния шарообразного сферического тела нахождение параметров тела В результате гравиразведки рассчитываютс
11568. Динамическая теория вискозиметра 51.5 KB
  Динамическая теория вискозиметра Будем считать что условия опыта в работе № 6 обеспечивают ламинарность течения жидкости в капилляре вискозиметра. Тогда распределение скорости v в его поперечном сечении будет иметь параболический характер: . 1 Здесь r
11569. Определение коэффициента внутреннего трения и длины свободного пробега молекул воздуха 170.5 KB
  Лабораторная работа № 1 Определение коэффициента внутреннего трения и длины свободного пробега молекул воздуха Оборудование: аспиратор на штативе вставка с капилляром жидкостный манометр мерный цилиндр секундомер. Общие представления Внутреннее тр...
11570. Имитация броуновского движения, проверка закона Эйнштейна, термометрия в системе магнитных шариков 214 KB
  Лабораторная работа № 2 Имитация броуновского движения проверка закона Эйнштейна термометрия в системе магнитных шариков Оборудование: соленоид на регулируемой по высоте подставке прозрачная плоская коробка с прямоугольной шкалой магнитные шарики н...