51317

ПОСТРОЕНИЕ ИМИТАЦИОННОЙМОДЕЛИ СМО И ЕЁ ИССЛЕДОВАНИЕ

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

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

Два наладчика обслуживают 6 станков. Станок требует наладки в среднем через каждые 0,5 часа. Наладка занимает у рабочего в среднем 10 минут. Все потоки событий – простейшие. Определить, как изменятся следующие показатели...

Русский

2014-02-09

320 KB

22 чел.

Министерство образования Республики Беларусь

Учреждение образования

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

ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ

Факультет компьютерных систем и сетей

Кафедра программного обеспечения информационных технологий

Отчёт по лабораторной работе №4

по дисциплине

«Системный анализ и машинное моделирование»

ПОСТРОЕНИЕ ИМИТАЦИОННОЙМОДЕЛИ СМО И ЕЁ ИССЛЕДОВАНИЕ

Вариант 16

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

студент гр. 751001       Мельник Н. И.

Мойса Д. С.

Минск, 2010

1. Исходные данные

Два наладчика обслуживают 6 станков. Станок требует наладки в среднем через каждые 0,5 часа. Наладка занимает у рабочего в среднем 10 минут. Все потоки событий – простейшие. Определить, как изменятся следующие показатели:

- среднее число занятых работников;

- абсолютная пропускная способность;

- среднее число неисправных станков,

если рабочие будут налаживать станки совместно, затрачивая при этом на наладку одного станка в среднем 5 минут.

2. Анализ исходных данных

В первом случае, когда наладчики ремонтируют станки по отдельности, получим модель СМО, изображенную на рисунке 1-а.

Во втором случае, когда наладчики работают вместе, получим модель, изображенную на рисунке 2-б.

Рис 1-а

Рис 1-б

Примем во внимание, что если станок сломан и подал заявку на ремонт, то в этом случае он далее заявки не подает, пока не будет отремонтирован.

3. Построение диаграмм интенсивности переходов

В случае А диаграмма интенсивности переходов будет иметь вид:

В случае Б диаграмма интенсивности переходов будет иметь вид:

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

Случай А:

- Среднее число занятых рабочих  К=1.3892554194156456173.

- Абсолютная пропускная способность А=8.335532516493873704.

- Среднее число неисправных станков Lc=1.832233741753063148.

Случай Б:

- Среднее число занятых рабочих  К=0.7350776778413736713.

- Абсолютная пропускная способность А=8.8209321340964840556.

- Среднее число неисправных станков Lc=1.5895339329517579722.


5. Исходный код программы

Random R = new Random();

       private void btStart_Click(object sender, EventArgs e)

       {

           TwoChannelsWork();

           OneWorkerWorks();          

       }

       public void TwoChannelsWork()

       {

           double p = 1 / (60 * double.Parse(tbP.Text));

           double q = 1 / (60 * double.Parse(tbQ.Text));

           Queue<Request> RequestQueue = new Queue<Request>();

           int WorkingWorker = 0;

           int BreakingSource = 0;

           int SourcesGot = 0;

           Request[] Worker = new Request[2];

           int[] Source = new int[6];

           for (int i = 0; i < Source.Length; i++)

               Source[i] = ExpDistributionGetInterval(p);

           for (int i = 0; i < Worker.Length; i++)

               Worker[i] = new Request(-1, 0);

           for (int Quant = 0; Quant < 100000; Quant++)

           {

               for (int i = 0; i < Source.Length; i++)

               {

                   if (Source[i] > 0)

                       Source[i]--;

                   if (Source[i] == 0)

                   {

                       RequestQueue.Enqueue(new Request(i, ExpDistributionGetInterval(q)));

                       Source[i] = -1;

                   }

               }

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

               {

                   if (Worker[i].time == 0)

                   {

                       if (Worker[i].index != -1)

                           Source[Worker[i].index] = ExpDistributionGetInterval(p);

                       if (RequestQueue.Count > 0)

                           Worker[i] = RequestQueue.Dequeue();

                       else

                           Worker[i].index = -1;

                   }

                   else

                       Worker[i].time--;

               }

               for (int i = 0; i < Source.Length; i++)

                   if (Source[i] > 0)

                       SourcesGot += (int)(p * 5000);

               for (int i = 0; i < Worker.Length; i++)

               {

                   if (Worker[i].index >= 0)

                   {

                       WorkingWorker++;

                       BreakingSource++;

                   }

               }

               BreakingSource += RequestQueue.Count;

               //listBox1.Items.Add(w.ToString()+"   "+RequestQueue.Count+"   "+ql.ToString()+"   "+(w+RequestQueue.Count+ql).ToString());

           }

           tbAverageWorkersA.Text = ((double)WorkingWorker / 100000).ToString();

           tbBreakingA.Text = ((double)(BreakingSource) / 100000).ToString();

           tbSourceGotA.Text = ((double)SourcesGot / 100000).ToString();

       }

       public void OneWorkerWorks()

       {

           double p = 1 / (60 * double.Parse(tbP.Text));

           double q = 1 / (60 * double.Parse(tbQ.Text));

           Queue<Request> RequestQueue = new Queue<Request>();

           int WorkingWorker = 0;

           int BreakingSource = 0;

           int SourcesGot = 0;

           int[] Source = new int[6];

           for (int i = 0; i < Source.Length; i++)

               Source[i] = ExpDistributionGetInterval(p);

           Request Worker = new Request(-1, 0);

           for (int Quant = 0; Quant < 100000; Quant++)

           {

               for (int i = 0; i < Source.Length; i++)

               {

                   if (Source[i] > 0)

                       Source[i]--;

                   if (Source[i] == 0)

                   {

                       RequestQueue.Enqueue(new Request(i, ExpDistributionGetInterval(2 * q)));

                       Source[i] = -1;

                   }

               }

               if (Worker.time == 0)

               {

                   if (Worker.index != -1)

                       Source[Worker.index] = ExpDistributionGetInterval(p);

                   if (RequestQueue.Count > 0)

                       Worker = RequestQueue.Dequeue();

                   else

                       Worker.index = -1;

               }

               else

                   Worker.time--;

               for (int i = 0; i < Source.Length; i++)

                   if (Source[i] > 0)

                       SourcesGot += (int)(p * 5000);

               if (Worker.index >= 0)

               {

                   WorkingWorker++;

                   BreakingSource++;

               }

               BreakingSource += RequestQueue.Count;

               //listBox1.Items.Add(w.ToString()+"   "+RequestQueue.Count+"   "+ql.ToString()+"   "+(w+RequestQueue.Count+ql).ToString());

           }

           tbAverageWorkersB.Text = ((double)WorkingWorker / 100000).ToString();

           tbBreakingB.Text = ((double)(BreakingSource) / 100000).ToString();

           tbSourceGotB.Text = ((double)SourcesGot / 100000).ToString();

       }

       public class Request

       {

           public int time;

           public int index;

           public Request(int ind, int tim)

           {

               time = tim;

               index = ind;

           }

       }


q

q

p

p

p

p

p

2q

p

p

p

p

p

6

p

6


 

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

69430. Код с проверкой по модулю q 88 KB
  Краткие теоретические сведения Принцип построения данного кода аналогичен по построению двоичного кода с одной проверкой на четность по mod 2. k информационные элементы кодовой комбинации принимающие значения от 0 до q1 то проверочный разряд b1 определяется суммой...
69431. Рекуррентный код 92 KB
  Последние формируются путем сложения по модулю 2 двух информационных посылок отстоящих одна от другой на шаг сложения k. Пусть имеем последовательность информационных посылок: 0 1 2. Тогда последовательность проверочных посылок...
69432. Код с простым повторением 89.5 KB
  В основу построения данного кода по аналогии с двоичным положен метод повторения исходной кодовой комбинации. Отличие qичного кода от аналогичного двоичного заключается в том что повторение кодовой комбинации qичного кода может производится параллельно во времени...
69433. Код Эллайеса 191 KB
  Цель: Изучить код Эллайеса выяснить особенности его построения и применения Краткие теоретические сведения Код Эллайеса как итеративный код содержит 2 системы проверок внутри каждой кодовой комбинации.
69434. Код Варшамова 157.5 KB
  Цель: Изучить код Варшамова выяснить особенности его построения и применения Краткие теоретические сведения Код предложенный Варшамовым является типичным представителем систематических кодов т. Благодаря этому возможно построить все комбинации кода...
69435. Коды Рида-Маллера 277 KB
  Эти m строк составляют векторы первого порядка b. Далее идут строки векторов второго порядка которые получаются из всех произведений двух строк первого порядка затем – строки третьего порядка являющиеся всеми произведениями трех строк первого порядка и т.
69436. Код Грея 206 KB
  Отражённые ( рефлексные ) коды строятся таким образом, что соседние кодовые комбинации, в отличии от простых двоичных кодов, различаются цифрой только в одном разряде, т.е. кодовое расстояние между соседними кодовыми комбинациями такого кода равно единице.
69437. Двоично-десятичный код 114 KB
  Цель: Изучить двоично-десятичный код выяснить особенности его построения и применения Краткие теоретические сведения. В двоично-десятичном коде каждая десятичная цифра представляется группой цифр состоящей из 4х двухпозиционных символов.
69438. Код Бергера Код Эллайеса 104 KB
  Цель: Изучить код Эллайеса выяснить особенности его построения и применения Краткие теоретические сведения Коды Бергера относятся к разряду несистематических кодов. Существует несколько вариантов построения кодов Бергера. Например сообщение 011010 закодированное кодом Бергера выглядит как 011010100.