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


 

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

41814. РАСЧЕТ СРЕДНЕГО ВРЕМЕНИ НАРАБОТКИ НА ОТКАЗ ЭЛЕМЕНТОВ УСИЛИТЕЛЯ И МОДЕЛИРОВАНИЕ ПЕРИОДИЧНОСТИ ТЕХНИЧЕСКОГО ОБСЛУЖИВАНИЯ 61.26 KB
  Краткие сведения из теории Существует несколько классификаций отказов. По характеру изменения параметра до момента возникновения отказы делятся на внезапные и постепенные. Разделение отказов на внезапные и постепенные является наиболее важным в классификации отказов так как от этого деления зависят методы расчета надежности способы построения надежных изделий и т.
41815. Задачи оптимизации в EXCEL 50.22 KB
  Решение уравнений и задач оптимизации Для решения задач оптимизации широкое применение находят различные средства Excel. Диспетчер сценариев для создания и оценки наборов сценариев что если с несколькими вариантами исходных данных. Диспетчер сценариев что если При работе с командами...
41816. Ознакомление с устройством карбюратора 82.04 KB
  На автомобилях имеющих датчик расхода топлива устанавливается карбюратор 2114110701031 отличающийся от карбюратора базовой комплектации отсутствием патрубка слива топлива. Ось поплавка; игольчатый клапан; поплавок; прокладка крышки карбюратора; крышка пускового устройства; винт; диафрагма пускового устройства; прокладка; рычаг воздушной заслонки; топливный жиклер холостого хода; электромагнитный заорпный клапан; патрубок подачи топлива; крышка карбюратора; топливный...
41817. Создание электронных таблиц программой Microsoft Excel 867.33 KB
  На экране ячейки листа таблицы разделяются линиями сетки. Правая часть служит для отображения содержимого текущей ячейки. Для перехода в режим редактирования содержимого ячейки в строке формул следует нажать клавишу F2 или выполнить щелчок в правой части строки формул. Кнопка в строке формул служит для подтверждения ввода данных или изменения содержимого ячейки и соответствует действию по клавише Enter .
41818. Приобретение навыков в работе с ACCESS по созданию таблиц 45.96 KB
  Характеристики таблицыобъекта СОТРУДНИК: идентификационный код Идент код 10 символов тип текстовый ; фамилия Фамилия 20 символов тип текстовый; имя Имя 15 символов тип текстовый; отчество Отчество 15 символов тип текстовый; пол Пол 1 символ тип текстовый; дата рождения Дата рожд поле типа дата ; место рождения Место рожд 15 символов тип текстовый ; образование Образов 15 символов тип текстовый; должность Должн 15 символов тип Мастер подстановок; стаж работы Стаж работы длинное целое...
41819. Разборка, исследование устройства, сборка и проверка работы электропневматического клапана автостопа 150 316.61 KB
  Разборка исследование устройства сборка и проверка работы электро-пневматического клапана автостопа 150. Цель работы: Изучить устройство и действие электро-пневматического клапана автостопа 150 получить практические навыки по его разборке и сборке. Приборы и оборудование Натурный электропневматический клапан автостопа 150 набор отвёрток и гаечных ключей плакаты учебник. Ход работы Электропневматический клапан автостопа ЭПК150 служит для выполнения экстренного торможения по команде АЛСН.
41820. Матричные операции. Применение стандартных функций Excel для работы с матрицами 277.1 KB
  Ответьте на контрольные вопросы. Порядок выполнения: Поместим матрицу А и вектор b в блоки 2:C4 и E2:E4 соответственно рис. Выполните все приведенные ниже задания используя описанные способы и сравните с ответом Сложить матрицы Исходные матрицы Ответ Вычислить линейную комбинацию матриц Линейные комбинации...
41821. Браузер. Примеры работы с Интернет-магазином, Интернет СМИ, Интернет-библиотекой 500.57 KB
  Изучение функциональной структуры web-браузеров и уметь выполнять навигацию по гиперссылкам, открытие, просмотр и загрузку различных информационных ресурсов. Научиться оформлять заказы в Интернет-магазине. Изучить принцип работы Интернет-библиотеки и Интернет-СМИ.
41822. Инструмент Roughen Brush (Огрубление) 91.22 KB
  Инструмент Roughen Brush Огрубление позволяет превратить объект с гладким контуром в рваный с острыми зубцеобразными краями. Инструмент Roughen Brush Огрубление можно применять к фигурам представляющим собой кривую Безье. Если фигура не является кривой Безье то при попытке применить к ней инструмент Roughen Brush Огрубление программа предложит автоматически преобразовать объект в кривую Безье.