51190

Построить аналитическую модель и, решив ее, определить вероятности состояний

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

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

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

Русский

2014-02-10

100.94 KB

13 чел.

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

Кафедра ПОИТ

Отчёт

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

Вариант 8

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

Огородник Р.В.        ст.гр. 050504

Краснов А.Ю.                    

Минск 2013

Задание: 

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

   Р1

  P           2    

   Р2     

P – вероятность неприхода заявки

P1- вероятность необработки

P2-вероятность необработки

Аналитические расчеты:

Таблица переходов:

Результаты работы программы:

Код программы:

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 Mylabs_model_3

{

   public partial class Form1 : Form

   {

       List<double> massivR = new List<double>();

       int pozition = 0;

       List<Knot> Tree = new List<Knot>();

       Knot root;

       List<string> text = new List<string>();

       string[] state= new string[10000];

       double p1;

       double p2;

       double r;

       public Form1()

       {

           InitializeComponent();

           // * * * * * * * * * * * * * * * * * *

           this.textBox_state.ScrollBars = ScrollBars.Vertical;

           generator();

           //ConstructTree();

       }

       private void generator()

       {

           double a = 31234;           

           double m = 512354231;       

           double R0 = 1235;           

           double Rn = 0;

           int size = 10000;           

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

           {

               Rn = (a * R0) % m;

               double R = Rn / m;

               massivR.Add(R);

               R0 = Rn;

           }

       }

       private int RandomOfDiapozon(List<double> SpisDia)

       {

           double R = massivR[pozition];

           pozition++;

           double a = 0;

           for (int i = 0; i < SpisDia.Count; i++)

           {

               a += SpisDia[i];

               if (R < a)

               {

                   return i;

               }

           }

           return 0;

       }

       private void ConstructTree()

       {

           int size = 7;

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

           {

               Knot a = new Knot();

               Tree.Add(a);

           }

           root = Tree[0];

           //0000

           int[] a0    = { 0,3 };

           double[] b0 = { r,1.0-r };

           Tree[0].Sets(M(b0),P(a0),"0000");

           //0001

           int[] a1 = { 0 ,1,2,3};

           double[] b1 = { r * (1 - p2), r * p2, (1 - r) * p2, (1 - r) * (1 - p2) };

           Tree[1].Sets(M(b1), P(a1),"0001");

           //0011

           int[] a2 = { 0,1,2,3,4 };

           double[] b2 = {r*(1-p1)*(1-p2), r*(1-p1)*p2, r*p1*p2+(1-r)*(1-p1)*p2+(1 - r) * (1 - p2) * p1,

                             r * p1 * (1 - p2) + (1 - r) * (1 - p1) * (1 - p2), (1 - r) * p1*p2 };

         

           

           Tree[2].Sets(M(b2), P(a2),"0011");

           //0010

           int[] a3 = { 0,2,3};

           double[] b3 = { r * (1 - p1), (1 - r) * p1, r*p1 + (1 - r)*(1 - p1) };

           Tree[3].Sets(M(b3), P(a3),"0010");

           //0111

           int[] a4 = { 2,3,4,5};

           double[] b4 = {r*(1-p1)*p2+r*(1-p2)*p1+(1-r)*(1-p1)*(1-p2), r*(1-p1)*(1-p2),r*p1*p2+(1-r)*(1-p1)*p2+(1-r)*(1-p2)*p1,(1-r)*p1*p2 };

           Tree[4].Sets(M(b4), P(a4),"0111");

           //0211

           int[] a5 = { 2,4,5,6};

           double[] b5 = {r*(1-p1)*(1-p2),r*(1-p1)*p2+r*(1-p2)*p1+(1-r)*(1-p1)*(1-p2),(1-r)*p1*(1-p2)+(1-r)*(1-p1)*p2+r*p1*p2,(1-r)*p1*p2  };

           Tree[5].Sets(M(b5), P(a5),"0211");

           //2111

           int[] a6 = {4,5,6  };

           double[] b6 = {(1-p1)*(1-p2),p1*(1-p2)+p2*(1-p1),p1*p2  };

           Tree[6].Sets(M(b6), P(a6), "1211");

         

       }

       

       private List<double> M(double[] spis)

       {

           List<double> m = new List<double>();

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

           {

               m.Add(spis[i]);

           }

           return m;

       }

       private List<Knot> P(int[] v)

       {

           List<Knot> m = new List<Knot>();

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

           {

               m.Add(Tree[v[i]]);

           }

           return m;            

       }

       private void button1_Click(object sender, EventArgs e)

       {

           pozition = 0;

           textBox1.Clear();

           text.Clear();

           Tree.Clear();

           this.textBox_state.Clear();

           if (this.textBox_p1.Text == "" || this.textBox_p2.Text == "")

           {

               MessageBox.Show("Error!!! p1 or p2 is NoN");

               return;

           }

           p1 = double.Parse(this.textBox_p1.Text);

           p2 = double.Parse(this.textBox_p2.Text);

           r = double.Parse(this.textBox_r.Text);

           ConstructTree();

        

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

           {

               root.inc();

               state[i] = root.GetName();

               root = root.GetChild()[RandomOfDiapozon(root.GetProbability())];

           }

           this.textBox_A.Text = ((1 - r) * (1 - (Tree[6].GetKol() / 10000.0))).ToString();

           double L = 0;

           

           for (int i = 0; i < Tree.Count; i++)

           {

               string rst = "Состояние:    " + Tree[i].GetName() ;

        

               Printf(rst + "   Веротяность = " + (Tree[i].GetKol() / 10000.0).ToString());

               string str = "";

               L += Tree[i].GetKol() / 10000.0 * double.Parse((str += Tree[i].GetName()[1]));

         

           }

           this.textBox_state.Lines = state;

           this.textBox_Loch.Text = L.ToString();

       }

       private void Printf(string str)

       {

           text.Add(str);

           textBox1.Clear();

           textBox1.Lines = VecToStr(text);

       }

       private string[] VecToStr(List<string> str)

       {

           string[] ms = new string[str.Count];

           for (int i = 0; i < str.Count; i++)

           {

               ms[i] = str[i];

           }

           return ms;

       }

 

   }

}

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace Mylabs_model_3

{

   class Knot

   {

       List<double> Probability = new List<double>();

       List<Knot> child = new List<Knot>();

       string name;

       int kolvo = 0;

       public Knot(List<double> P,List<Knot> ch)

       {

           Probability = P;

           child = ch;

       }

       public Knot()

       {

           

       }

       public void Sets(List<double> P, List<Knot> ch,string str)

       {

           Probability = P;

           child = ch;

           name = str;

       }

       public List<double> GetProbability()

       {

           return Probability;

       }

       public List<Knot> GetChild()

       {

           return child;

       }

       public string GetName()

       {

           return name;

       }

       public void inc()

       {

           kolvo++;

       }

       public void Dec()

       {

           kolvo = 0;

       }

       public int GetKol()

       {

           return kolvo;

       }

   }

}

Вывод:

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

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


 

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

63262. Урок узагальнення з теми «Пізня Римська імперія» 20.76 KB
  Після цього уроку учні зможуть: називати час вторгнення варварів реформ Діоклетіана і Константина прийняття християнства як державної релігії Римської імперії вторгнення гунів дати поділу Римської імперії на Західну і Східну падіння Західної...
63264. Слов’яни напередодні Великого переселення народів 31.24 KB
  Мета: ознайомити учнів із джерелами з історії словян, сформувати уявлення про суспільне, господарське життя і духовний світ давніх словян, розглянути різні наукові підходи до визначення прабатьківщини словян.
63265. Сусіди давніх слов’ян 33.53 KB
  Мета: розглянути господарське, суспільне та духовне життя міст-держав північного Причорноморя в римський період їхньої історії; ознайомитися з особливостями історичного розвитку сусідів словян та простежити, який вплив мали словяни та їхні сусіди один на одного.
63266. Слов’яни під час Великого переселення народів 21.63 KB
  Мета. Показати напрямки розселення словян, розглянути різні наукові підходи до визначення витоків українського народу. Очікувані результати. Після цього уроку учні зможуть: називати час Великого переселення народів, вторгнення готів, гунів, народи, що населяли територію України...
63267. Урок узагальнення з теми «Давні слов’яни та їхні сусіди» 18.19 KB
  Мета. систематизувати та узагальнити знання, здобуті учнями впродовж вивчення теми, удосконалити навички роботи в групі, надати учням можливість висловлювати власне ставлення до проблем, що розглядаються.
63268. Оцінювання навчальних досягнень учнів із тем «Пізня Римська імперія» та «Давні слов’яни та їхні сусіди» 20.37 KB
  Мета: оцінити навчальні досягнення учнів за результатами вивчення тем шляхом проведення гри «Брейн-ринг», підвищити пізнавальну активність шестикласників у вивченні історії стародавнього світу.