Контрольная работа 14 вариант
.docxМинистерство образования Республики Беларусь
Учреждение образования
«БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ»
Институт информационных технологий
Специальность Программное обеспечение информационных технологий
КОНТРОЛЬНАЯ РАБОТА
По курсу Системный анализ и машинное моделирование
Вариант № 14
Студент-заочник 3 курса
Группы № 781074
ФИО Красносельская Полина Юрьевна
Минск, 2020
Задание 1. Аналитическое моделирование дискретно-стохастической СМО. Построить граф состояний СМО. Смысл кодировки состояний раскрыть (время до выдачи заявки, число заявок в накопителе и т.д.).
Схема содержит источник с блокировкой и вероятностью просеивания (не выдачи заявки) , накопитель на 1 заявку, канал с отбрасыванием заявки π1 и канал π2.
Граф состояний кодируется четырехкомпонентным вектором TNК1К2, где
T – состояние источника заявок, T={1,0}
1 – источник пропустил сигнал
0 – источник не пропустил сигнал
N – количество заявок, находящихся в накопителе (длина очереди), N={0,1}
0 – заявок в очереди на обслуживание нет
1 – одна заявка в очереди
К1 и К2 – состояние каналов обслуживания, К1 (К2)={0,1}
0 – канал свободен
1 – канал занят обслуживанием заявки.
Рассмотрев все возможные состояния системы, строим матрицу переходов.
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
|
0000 |
0001 |
0010 |
0011 |
0110 |
0111 |
1010 |
1011 |
1110 |
1111 |
||
1 |
0000 |
р1,1 |
0 |
0 |
0 |
0 |
0 |
р1,7 |
0 |
0 |
0 |
2 |
0001 |
p2,1 |
р2,2 |
0 |
0 |
0 |
0 |
р2,7 |
р2,8 |
0 |
0 |
3 |
0010 |
0 |
р3,2 |
р3,3 |
0 |
0 |
0 |
0 |
р3,8 |
р3,9 |
0 |
4 |
0011 |
0 |
р4,2 |
р4,3 |
р4,4 |
0 |
0 |
0 |
р4,8 |
р4,9 |
р4,10 |
5 |
0110 |
0 |
0 |
0 |
р5,4 |
р5,5 |
0 |
0 |
0 |
0 |
р5,10 |
6 |
0111 |
0 |
0 |
0 |
р6,4 |
р6,5 |
р6,6 |
0 |
0 |
0 |
р6,10 |
7 |
1010 |
0 |
р7,2 |
р7,3 |
0 |
0 |
0 |
0 |
р7,8 |
р7,9 |
0 |
8 |
1011 |
0 |
р8,2 |
р8,3 |
р8,4 |
0 |
0 |
0 |
р8,8 |
р8,9 |
р8,10 |
9 |
1110 |
0 |
0 |
0 |
р9,4 |
р9,5 |
0 |
0 |
0 |
0 |
р9,10 |
10 |
1111 |
0 |
0 |
0 |
р10,4 |
р10,5 |
р10,6 |
0 |
0 |
0 |
р10,10 |
Определим вероятности переходов рi,j и заполним таблицу переходов числовыми значениями
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
|||||||||||
0000 |
0001 |
0010 |
0011 |
0110 |
0111 |
1010 |
1011 |
1110 |
1111 |
||||||||||||
1 |
0000 |
ρ |
0 |
0 |
0 |
0 |
0 |
1- ρ |
0 |
0 |
0 |
||||||||||
2 |
0001 |
ρ*(1- π2) |
ρ* π2 |
0 |
0 |
0 |
0 |
(1-ρ)*π2 |
(1-ρ)*(1-π2) |
0 |
0 |
||||||||||
3 |
0010 |
0 |
ρ*(1- π1) |
ρ* π1 |
0 |
0 |
0 |
0 |
(1-ρ)*π1 |
(1-ρ)*(1-π1) |
0 |
||||||||||
4 |
0011 |
0 |
ρ*(1- π1)* π2+ ρ*(1- π1)* (1- π2) |
ρ*π1* (1- π2) |
ρ*π1* π2 |
0 |
0 |
0 |
(1-ρ)*π1* (1-π2)+ (1-ρ)*π1*π2 |
(1-ρ)*(1-π1)* π2 |
(1-ρ)*(1-π1)* (1-π2) |
||||||||||
5 |
0110 |
0 |
0 |
0 |
ρ*(1- π1) |
ρ* π1 |
0 |
0 |
0 |
0 |
1-ρ |
||||||||||
6 |
0111 |
0 |
0 |
0 |
ρ*(1- π1)* π2+ ρ*(1- π1)* (1- π2) |
ρ*π1* (1- π2) |
ρ*π1* π2 |
0 |
0 |
0 |
1-ρ |
||||||||||
7 |
1010 |
0 |
ρ*(1- π1) |
ρ* π1 |
0 |
0 |
0 |
0 |
(1-ρ)*π1 |
(1-ρ)*(1-π1) |
0 |
||||||||||
8 |
1011 |
0 |
ρ*(1- π1)*(1- π2)+ ρ* (1- π1)* π2 |
ρ*π1* (1- π2) |
ρ*π1* π2 |
0 |
0 |
0 |
(1-ρ)*π1*π2+ (1-ρ)* π1* π2 |
(1-ρ)*(1-π1)* π2 |
(1-ρ)*(1-π1)* (1-π2) |
||||||||||
9 |
1110 |
0 |
0 |
0 |
ρ*(1- π1) |
ρ* π1 |
0 |
0 |
0 |
0 |
1-ρ |
||||||||||
10 |
1111 |
0 |
0 |
0 |
ρ*(1- π1)*(1- π2)+ ρ* (1- π1)* π2 |
ρ*π1* (1- π2) |
ρ*π1* π2 |
0 |
0 |
0 |
1-ρ |
Подставим числовые значения для проверки, что вероятности перехода равны 1:
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
|
0000 |
0001 |
0010 |
0011 |
0110 |
0111 |
1010 |
1011 |
1110 |
1111 |
||
1 |
0000 |
0,7 |
0 |
0 |
0 |
0 |
0 |
0,3 |
0 |
0 |
0 |
2 |
0001 |
0,35 |
0,35 |
0 |
0 |
0 |
0 |
0,15 |
0,15 |
0 |
0 |
3 |
0010 |
0 |
0,245 |
0,455 |
0 |
0 |
0 |
0 |
0,195 |
0,105 |
0 |
4 |
0011 |
0 |
0,245 |
0,2275 |
0,2275 |
0 |
0 |
0 |
0,195 |
0,0525 |
0,0525 |
5 |
0110 |
0 |
0 |
0 |
0,245 |
0,455 |
0 |
0 |
0 |
0 |
0,3 |
6 |
0111 |
0 |
0 |
0 |
0,245 |
0,2275 |
0,2275 |
0 |
0 |
0 |
0,3 |
7 |
1010 |
0 |
0,245 |
0,455 |
0 |
0 |
0 |
0 |
0,195 |
0,105 |
0 |
8 |
1011 |
0 |
0,245 |
0,2275 |
0,2275 |
0 |
0 |
0 |
0,195 |
0,0525 |
0,0525 |
9 |
1110 |
0 |
0 |
0 |
0,245 |
0,455 |
0 |
0 |
0 |
0 |
0,3 |
10 |
1111 |
0 |
0 |
0 |
0,245 |
0,2275 |
0,2275 |
0 |
0 |
0 |
0,3 |
Граф состояний
Задание 2. Для СМО из задания 1 построить имитационную модель и исследовать ее (разработать алгоритм и написать имитирующую программу, предусматривающую сбор и статистическую обработку данных для получения оценок заданных характеристик СМО). Распределение интервалов времени между заявками во входном потоке и интервалов времени обслуживания – геометрическое с соответствующим параметром ( ). Если не задано, то входной поток – регулярный (с указанным в обозначении источника числом тактов между заявками).
№ |
|
|
|
Цель исследования |
14 |
0,7 |
0,65 |
0,5 |
(вероятность блокировки) |
Исходя из графа состояний, построим систему уравнений для нахождения вероятностей состояний.
Подставим значения и приведем к каноническому виду:
Решив данную систему, получим значения вероятностей состояний:
Блокировка источника заявок наблюдается тогда, когда СМО переходит в состояние (1110) или (1111). Вероятность появления одного из двух несовместных событий равна сумме вероятностей этих событий. Поэтому вероятность блокировки равна
Pбл=P1110 + P1111 = 0,036 + 0.068 = 0,104
Схема алгоритма программы
Имитационная модель:
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 WindowsFormsApplication1
{
public partial class Form1 : Form
{
int takts, i;
int N0000, N0010, N0001, N0011, N0111, N1111, N1010, N1011, N1110, N0110;
double p, d1, d2, sp, sd1, sd2, sj, tp, td1, td2;
double paus;
System.Random pp, dd1, dd2;
System.Drawing.Pen MyPen;
System.Drawing.Graphics MyGr;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
MyGr = this.pictureBox1.CreateGraphics();
pp = new Random();
dd1 = new Random();
dd2 = new Random();
sp = 0;
sd1 = 0;
sd2 = 0;
sj = 0;
N0000 = 0;
N0001 = 0;
N0010 = 0;
N0011 = 0;
N0111 = 0;
N1111 = 0;
N1010 = 0;
N1011 = 0;
N1110 = 0;
N0110 = 0;
takts = System.Convert.ToInt32(this.textBox4.Text, 10);
p = System.Convert.ToDouble(this.textBox1.Text)*10;
d1 = System.Convert.ToDouble(this.textBox2.Text)*10;
d2 = System.Convert.ToDouble(this.textBox3.Text)*10;
paus = System.Convert.ToDouble(this.textBox5.Text)*100;
if (takts < 100)
{
MessageBox.Show("Количество тактов не должно быть менее 100!");
return;
};
MyPen = new Pen(System.Drawing.Color.Black);
MyGr.DrawEllipse(MyPen, 20, 120, 60, 60);
MyGr.DrawLine(MyPen, new Point(80, 150), new Point(120, 150));
MyGr.DrawLine(MyPen, new Point(55, 180), new Point(120, 180));
MyGr.DrawLine(MyPen, new Point(55, 180), new Point(60, 175));
MyGr.DrawLine(MyPen, new Point(55, 180), new Point(60, 185));
MyGr.DrawRectangle(MyPen, new Rectangle(120, 120, 130, 60));
MyGr.DrawLine(MyPen, new Point(250, 150), new Point(310, 150));
MyGr.DrawEllipse(MyPen, 310, 120, 60, 60);
MyGr.DrawLine(MyPen, new Point(350, 180), new Point(400, 210));
MyGr.DrawLine(MyPen, new Point(387, 210), new Point(400, 210));
MyGr.DrawLine(MyPen, new Point(400, 210), new Point(400, 200));
MyGr.DrawLine(MyPen, new Point(370, 150), new Point(430, 150));
MyGr.DrawEllipse(MyPen, 430, 120, 60, 60);
MyGr.DrawString(sp.ToString(), new Font("Times New Roman", 20), new SolidBrush(System.Drawing.Color.Black), new PointF(40, 135));
MyGr.DrawString(sj.ToString(), new Font("Times New Roman", 20), new SolidBrush(System.Drawing.Color.Black), new PointF(175, 135));
MyGr.DrawString(sd1.ToString(), new Font("Times New Roman", 20), new SolidBrush(System.Drawing.Color.Black), new PointF(330, 135));
MyGr.DrawString(sd2.ToString(), new Font("Times New Roman", 20), new SolidBrush(System.Drawing.Color.Black), new PointF(450, 135));
i = 0;
this.timer1.Interval = System.Convert.ToInt32(System.Decimal.Round(new decimal((paus * 1000)), 0).ToString(), 10);
this.timer1.Enabled = true;
this.timer1.Start();
}
private void timer1_Tick_1(object sender, EventArgs e)
{
// Поведение накопителя
if (sj == 0)
{
if (sp == 1)
{
sp = 0;
sj = 1;
}
}
// Поведение 1 приемника
if (sd1 == 0)
{
if (sj == 1)
{
sd1 = 1;
sj = 0;
if (sp == 1)
{
sp = 0;
sj = 1;
}
}
}
else
{
if (sd2 == 1)
{
sd1 = 0;
if (sj == 1)
{
sd1 = 1;
sj = 0;
if (sp == 1)
{
sp = 0;
sj = 1;
}
}
}
else
{
td1 = System.Convert.ToInt32(dd1.Next(1,100));
if (td1 < d1)
{
sd1 = 0;
sd2 = 1;
if (sj == 1)
{
sd1 = 1;
sj = 0;
if (sp == 1)
{
sp = 0;
sj = 1;
}
}
}
}
}
// Поведение 2 приемника
if (sd2 == 1)
{
td2 = System.Convert.ToInt32(dd2.Next(1,100));
if (td2 < d2)
sd2 = 0;
}
// Поведение источника заявок
if (sp == 0)
{
tp = System.Convert.ToInt32(pp.Next(1,100));
if (tp < p)
{
if (sd1==1)
sp = 1;
else
sd1 = 1;
}
else
{
sp = 0;
}
};
if ((sp == 0) && (sj == 0) && (sd1 == 0) && (sd2 == 0))
{
N0000 = N0000 + 1;
}
else if ((sp == 0) && (sj == 0) && (sd1 == 0) && (sd2 == 1))
{
N0001 = N0001 + 1;
}
else if ((sp == 0) && (sj == 0) && (sd1 == 1) && (sd2 == 0))
{
N0010 = N0010 + 1;
}
else if ((sp == 0) && (sj == 0) && (sd1 == 1) && (sd2 == 1))
{
N0011 = N0011 + 1;
}
else if ((sp == 0) && (sj == 1) && (sd1 == 1) && (sd2 == 1))
{
N0111 = N0111 + 1;
}
else if ((sp == 1) && (sj == 1) && (sd1 == 1) && (sd2 == 1))
{
N1111 = N1111 + 1;
}
else if ((sp == 1) && (sj == 0) && (sd1 == 1) && (sd2 == 0))
{
N1010 = N1010 + 1;
}
else if ((sp == 1) && (sj == 0) && (sd1 == 1) && (sd2 == 1))
{
N1011 = N1011 + 1;
}
else if ((sp == 1) && (sj == 1) && (sd1 == 1) && (sd2 == 0))
{
N1110 = N1110 + 1;
}
else if ((sp == 0) && (sj == 1) && (sd1 == 1) && (sd2 == 0))
{
N0110 = N0110 + 1;
}
else
label27.Text = sp.ToString() + sj.ToString() + sd1.ToString() + sd2.ToString();
MyGr.Clear(this.BackColor);
MyGr.DrawString("Такт " + (i+1).ToString(), new Font("Times New Roman", 12), new SolidBrush(System.Drawing.Color.Black), new PointF(400, 10));
MyGr.DrawEllipse(MyPen, 20, 120, 60, 60);
MyGr.DrawLine(MyPen, new Point(80, 150), new Point(120, 150));
MyGr.DrawLine(MyPen, new Point(55, 180), new Point(120, 180));
MyGr.DrawLine(MyPen, new Point(55, 180), new Point(60, 175));
MyGr.DrawLine(MyPen, new Point(55, 180), new Point(60, 185));
MyGr.DrawRectangle(MyPen, new Rectangle(120, 120, 130, 60));
MyGr.DrawLine(MyPen, new Point(250, 150), new Point(310, 150));
MyGr.DrawEllipse(MyPen, 310, 120, 60, 60);
MyGr.DrawLine(MyPen, new Point(350, 180), new Point(400, 210));
MyGr.DrawLine(MyPen, new Point(387, 210), new Point(400, 210));
MyGr.DrawLine(MyPen, new Point(400, 210), new Point(400, 200));
MyGr.DrawLine(MyPen, new Point(370, 150), new Point(430, 150));
MyGr.DrawEllipse(MyPen, 430, 120, 60, 60);
MyGr.DrawString(sp.ToString(), new Font("Times New Roman", 20), new SolidBrush(System.Drawing.Color.Black), new PointF(40, 135));
MyGr.DrawString(sj.ToString(), new Font("Times New Roman", 20), new SolidBrush(System.Drawing.Color.Black), new PointF(175, 135));
MyGr.DrawString(sd1.ToString(), new Font("Times New Roman", 20), new SolidBrush(System.Drawing.Color.Black), new PointF(330, 135));
MyGr.DrawString(sd2.ToString(), new Font("Times New Roman", 20), new SolidBrush(System.Drawing.Color.Black), new PointF(450, 135));
this.label14.Text = " " + N0000.ToString();
this.label15.Text = " " + N0010.ToString();
this.label16.Text = " " + N0001.ToString();
this.label17.Text = " " + N0011.ToString();
this.label18.Text = " " + N0111.ToString();
this.label19.Text = " " + N1111.ToString();
this.label6.Text = " " + N1010.ToString();
this.label21.Text = " " + N1011.ToString();
this.label23.Text = " " + N1110.ToString();
this.label25.Text = " " + N0110.ToString();
if (i < takts-1)
{
i++;
}
else
{
this.timer1.Enabled = false;
double res,res1,res2;
takts = System.Convert.ToInt32(this.textBox4.Text, 10);
res1 = System.Convert.ToDouble(N1110) / System.Convert.ToDouble(takts);
res2 = System.Convert.ToDouble(N1111) / System.Convert.ToDouble(takts);
res = res1 + res2;