Добавил:
polinakrasnoselskaya@mail.ru Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Контрольная работа 14 вариант

.docx
Скачиваний:
11
Добавлен:
01.11.2020
Размер:
240.84 Кб
Скачать

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

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

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

Институт информационных технологий

Специальность Программное обеспечение информационных технологий

КОНТРОЛЬНАЯ РАБОТА

По курсу Системный анализ и машинное моделирование

Вариант № 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 – состояние каналов обслуживания, К12)={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-ρ)*π12

(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-ρ)*π12+ (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);