51190
Построить аналитическую модель и, решив ее, определить вероятности состояний
Лабораторная работа
Информатика, кибернетика и программирование
По графу построить аналитическую модель и, решив ее, определить вероятности состояний. Рассчитать теоретическое значение показателя эффективности, заданного целью исследования задания..
Русский
2014-02-10
100.94 KB
13 чел.
БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ
Кафедра ПОИТ
Отчёт
по лабораторной работе №3
Проверил: Выполнил:
Огородник Р.В. ст.гр. 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;
}
}
}
Вывод:
В результате лабораторной работы были построены имитационная и аналитическая модели,
Были исследованы характеристики данных моделей.
А также другие работы, которые могут Вас заинтересовать | |||
52923. | Этимология приходит на помощь | 37.5 KB | |
Этимология приходит на помощь Одно из направлений работы учителя языковеда углублённое исследование слова как единицы языка изучение его семантики строения орфографии. Например на уроке русского языка в 5м классе задаю вопрос заставляющий задуматься: Что общего между словами капитан и капуста . Вывод к которому подводим детей: оба слова родственники по происхождению произошли от латинского слова cput голова по латыни для капусты голова это её шаровидная форма а для капитана голова ... | |||
52925. | Речовий етикет і загальна культура молодших школярів | 9.99 MB | |
Виявити, теоретично обґрунтувати педагогічні умови формування базової культури учнів початкової школи й емпірично довести ефективність їх реалізації | |||
52926. | Сценарій уроку - гри „Еврика” | 60 KB | |
Як називається чотирикутник у якого сторони протилежні паралельні 2. Як називається паралелограм у якого всі сторони рівні 6. 7 Як називається паралелограм у якого діагоналі перпендикулярні 8. Як називається відрізок що сполучає протилежні вершини 10. | |||
52928. | Сценарій пісенного конкурсу «Євробачення – 2012» | 71.5 KB | |
Ведучий 1: Увага Увага Починаємо пісенний конкурс гімназійної молоді Євробачення 2012 звучить патетична мелодія Ведучий 2: Дім наш рідний Україна Ріки гори і озера У Європу несемо ми Жовтосинії знамена. Ведучий 1: Бо є доля в нас єдина... | |||
52929. | Донецк -- один из городов-хозяев Евро-2012» для 5 класса | 97.5 KB | |
Донецк один из городов хозяев Евро 2012 Цель: познакомить детей с Донецком городом где будет проходить Евро 2012 с его историей значимыми местами города выда ющимися людьми Донбасса прославившими родной край Украину; развивать познавательный интерес желание и возможность прославить родной город своими достижениями; ... | |||