51308

Построить граф состояний P-схемы

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

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

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

Русский

2014-02-10

206 KB

43 чел.

Белорусский государственный университет

информатики и радиоэлектроники

Кафедра ПОИТ

Отчет

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

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

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

Реуцкий В.В.

Минск 2012 г.


Задание

Задание 1. Построить граф состояний P-схемы .

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

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

23.

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

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

23

---

0,4

0,5

А, Lоч


Граф СМО:


Расчёт параметров:

Абсолютная пропускная способность:

Средняя длина очереди:


Имитация работы СМО:

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 ModLab3

{

   public partial class Form1 : Form

   {

       private int N;

       private double pi1;

       private double pi2;

       private string[] conditions = {"2 0 0 0", "1 0 0 0", "2 1 0 0", "1 1 0 0", "1 0 0 1", "0 1 0 0", "2 1 0 1", "1 0 1 1", "1 1 0 1",

                                      "1 0 2 1", "0 1 2 1", "0 1 0 1", "0 1 1 1", "2 1 2 1", "2 1 1 1", "1 1 1 1", "1 1 2 1",

                                     };        

       private List<string> condLog;

       

       public Form1()

       {

           InitializeComponent();

       }

       private void button1_Click(object sender, EventArgs e)

       {

            try

           {

               N = int.Parse(tbN.Text);

               pi1 = double.Parse(tbP1.Text);

               pi2 = double.Parse(tbP2.Text);

           }

           catch (Exception ex)

           {

               MessageBox.Show("Ошибка: " + ex.Message);

               return;

           }

/*1 2000*/  double[,] chances = {  { -1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},

/*2 1000*/                         { -1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},

/*3 2100*/                         { -1,-1,-1,1-pi1,pi1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},

/*4 1100*/                         { -1,-1,-1,-1,-1,1-pi1,pi1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},

/*5 1001*/                         { -1,-1,1-pi2,-1,-1,-1,pi2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},

/*6 0100*/                         { -1,-1,-1,-1,-1,pi1,1-pi1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},

/*7 2101*/                         { -1,-1,-1,pi1*(1-pi2),(1-pi1)*(1-pi2),-1,-1,(1-pi1)*pi2,pi1*pi2,-1,-1,-1,-1,-1,-1,-1,-1},

/*8 1011*/                         { -1,-1,-1,-1,-1,-1,1-pi2,-1,-1,-1,-1,-1,-1,-1,pi2,-1,-1},

/*9 1101*/                         { -1,-1,-1,-1,-1,pi1*(1-pi2),(1-pi1)*(1-pi2),-1,-1,-1,-1,pi1*pi2,-1,-1,(1-pi1)*pi2,-1,-1},

/*10 1021*/                        { -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,pi2,1-pi2,-1,-1},

/*11 0121*/                        { -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,(pi1*pi2+(1-pi1)*pi2),-1,pi1*(1-pi2),(1-pi1)*(1-pi2),-1,-1,-1},

/*12 0101*/                        { -1,-1,-1,-1,-1,pi1*(1-pi2),(1-pi1)*(1-pi2),-1,-1,-1,-1,pi1*pi2,-1,-1,(1-pi1)*pi2,-1,-1},

/*13 0111*/                        { -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,pi1*(1-pi2),pi1*pi2,(1-pi1)*pi2,(1-pi1)*(1-pi2),-1,-1},

/*14 2121*/                        { -1,-1,-1,-1,-1,-1,-1,-1,-1,(1-pi1)*(1-pi2),-1,-1,-1,-1,-1,pi1*(1-pi2),(pi1*pi2+(1-pi1)*pi2)},

/*15 2111*/                        { -1,-1,-1,-1,-1,-1,-1,(1-pi1)*(1-pi2),pi1*(1-pi2),(1-pi1)*pi2,-1,-1,-1,-1,-1,pi1*pi2,-1},

/*16 1111*/                        { -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,pi1*(1-pi2),pi1*pi2,(1-pi1)*pi2,(1-pi1)*(1-pi2),-1,-1},

/*17 1121*/                        { -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,(pi1*pi2 + (1-pi1)*pi2),-1,pi1*(1-pi2),(1-pi1)*(1-pi2),-1,-1,-1},

                               };

           string curCond = "2 0 0 0";

           double A = new double();

           double L = new double();

           condLog = new List<string>();

           condLog.Add("2 0 0 0");

           int condNumber = 0; // номер состояния в массиве состояний

           Random rnd = new Random();

           int[] pCount = new int[17]; //подсчет нахождений в каждом из состояний

           pCount[condNumber]++;

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

           {

               double buf = rnd.NextDouble();

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

               {

                   if (chances[condNumber, j] != -1)

                       buf -= chances[condNumber, j]; //отнимаем вероятности пока не найдем то что выдал рандом

                   if (buf <= 0)

                   {

                       int lastCondNumber = condNumber;

                       condNumber = j;

                       L += double.Parse(conditions[condNumber].ElementAt(4).ToString());

                       if (conditions[condNumber].ElementAt(6) == '0')

                       {

                           if (conditions[lastCondNumber].ElementAt(6) == '1')

                           {

                               A++;

                           }

                       }

                       break;

                   }

               }

               curCond = conditions[condNumber];

               pCount[condNumber]++;

               condLog.Add(curCond);             

           }

           double[] pChances = new double[17]; // вероятности каждого состояния

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

           {

               pChances[i] = (double)pCount[i] / (double)N;

           }

           lbP.Items.Add("P2000 = " + pChances[0].ToString());

           lbP.Items.Add("P1000 = " + pChances[1].ToString());

           lbP.Items.Add("P2100 = " + pChances[2].ToString());

           lbP.Items.Add("P1100 = " + pChances[3].ToString());

           lbP.Items.Add("P1001 = " + pChances[4].ToString());

           lbP.Items.Add("P0100 = " + pChances[5].ToString());

           lbP.Items.Add("P2101 = " + pChances[6].ToString());

           lbP.Items.Add("P1011 = " + pChances[7].ToString());

           lbP.Items.Add("P1101 = " + pChances[8].ToString());

           lbP.Items.Add("P1021 = " + pChances[9].ToString());

           lbP.Items.Add("P0121 = " + pChances[10].ToString());

           lbP.Items.Add("P0101 = " + pChances[11].ToString());

           lbP.Items.Add("P0111 = " + pChances[12].ToString());

           lbP.Items.Add("P2121 = " + pChances[13].ToString());

           lbP.Items.Add("P2111 = " + pChances[14].ToString());

           lbP.Items.Add("P1111 = " + pChances[15].ToString());

           lbP.Items.Add("P1121 = " + pChances[16].ToString());

           A /= (double)N;

           L /= (double)N;

           lA.Text = "A = " + A.ToString();

           lL.Text = "L = " + L.ToString();

           foreach (string str in condLog)

           {

               lbLog.Items.Add(str);

           }

       }

   }

}


 

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

2296. Система Mathcad. Побудова графіків 60.82 KB
  Використання ранжованих змінних. Табулювання функцій та побудова їх графіків засобами MathCad. Побудова найпростіших діаграм. Приклади задання ранжованої змінної. Створити на вільному місці шаблон для графіка.
2297. Система Mathcad. Розв’язування задач оптимізації 92.14 KB
  Пошук екстремуму функції. Екстремум функції багатьох змінних. Локальний екстремум. Умовний екстремум. Приклад вирішення транспортної задачі в середовищі Mathcad. Зміна чисельного методу. Вікно діалогу Advanced Options.
2298. Математична обробка даних експерименту. Парна регресія 74.68 KB
  Постановка задачі. Парна регресія. Лінійна парна регресія. Лінеаризація деяких видів двопараметричних зв’язків. Метод найменших квадратів (МНК). Алгоритм МНК. Приклад розв’язування задачі в середовищі системи Mathcad.
2299. Теорія держави та права 139.5 KB
  Закони та підзаконні нормативно-правові акти, систематизації нормативно-правових актів. Предмет конституційного права. Фактична конституція. Адміністративне право України. Місцеве самоврядування в Україні. Політико-структурні елементи.
2300. Повышение долговечности бетона при проектировании и изготовлении конструкций 176.5 KB
  Основные правила проектирования. Ограничение содержания хлоридов в бетоне. Правила производства работ. Составляющие бетона. Приготовление, транспорт и укладка бетона. Дополнительная защита конструкций. Параметры долговечности и их контроль при изготовлении конструкций.
2301. Чисельне вирішення задачі Коші для звичайних диференціальних рівнянь І-го порядку 106.36 KB
  Основні типи рівнянь інженерної практики. Методи вирішення диференціальних рівнянь. Постановка задач для звичайних диференціальних рівнянь (ЗДР). Метод Ейлера. Модифіковані методи Ейлера та Ейлера-Коші. Метод Рунге-Кутта. Приклад вирішення задачі Коші для ЗДР І-го порядку в середовищі системи Mathcad.
2302. Програмування в Mathcad 76.51 KB
  Принцип програмування в Mathcad. Панель програмування. Локальний оператор присвоєння. Умовний оператор if. Організація обчислень з розгалуженнями. Алгоритми і програми циклічної структури. Оператор циклу з параметром. Оператор циклу з передумовою. Задачі обробки одновимірних та двовимірних масивів.
2303. Расчет затрат на технические обслуживание ПЭВМ 50.87 KB
  Материалы изучения и анализа существующей организации труда и передового опыта работников, занятых сервисным обслуживанием и текущим ремонтом ПЭВМ и ОТ и сопровождением программных средств. Положение по обеспечению работоспособности ПЭВМ.
2304. Расчет клиноременной передачи 43.69 KB
  Исходные данные: мощность на ведущем шкиве Р1 = 7 кВт, вращающий момент на ведущем шкиве Т1 = 45,5 Нм, частота вращения ведущего шкива n1 = 1470 мин-1 , передаточное отношение u = 3, характер нагрузки: имеют место умеренные колебания (например, ленточный конвейер).