МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ
Національний університет “Львівська політехніка”
Інститут Комп’ютерних наук та інформаційних технологій
Кафедра автоматизованих систем управління
Звіт
до лабораторної роботи № 3
з курсу «Моделювання систем»
на тему: «Імітаційне моделювання процесу функціонування скінченого дискретного стохастичного автомата»
Мета роботи: вивчити процес функціонування дискретного скінченого стохастичного автомата та знайти його ймовірностні характеристики за даними експерименту.
Короткі теоретичні відомості
У загальному випадку ймовірнісний автомат являє собою дискретний потактний перетворювач інформації з пам’яттю, функціонування якого в кожному такті залежить лише від стану пам’яті і може бути описаний статистично.
Застосування схем ймовірнісних автоматів (Р-схем) має важливе значення для розвитку методів проектування дискретних систем, які виявляють статистично закономірну поведінку, обгрунтування алгоритмічних можливостей таких систем та доцільності їх використання, а також для розв’язування задач синтезу дискретних стохастичних систем за обраним критерієм з урахуванням обмежень.
У загальному випадку ймовірнісний автомат являє собою дискретний потактний перетворювач інформації з пам’яттю, функціонування якого в кожному такті залежить лише від стану пам’яті і може бути описаний статистично.
Застосування схем ймовірнісних автоматів (Р-схем) має важливе значення для розвитку методів проектування дискретних систем, які виявляють статистично закономірну поведінку, обгрунтування алгоритмічних можливостей таких систем та доцільності їх використання, а також для розв’язування задач синтезу дискретних стохастичних систем за обраним критерієм з урахуванням обмежень.
Розглянемо більш загальну математичну схему. Нехай Ф - множина різноманітних пар виду , де yj - елемент Y. Поставимо вимогу, щоб довільний елемент множини G спричиняв на множині Ф деякий закон розподілу:
Елементи з Ф
(xi,zs) b11 b12 ... bk,j-1 bkj
При цьому , bkj - ймовірності переходу автомата в стан Zk та генераці вихідного сигналу yj, якщо він знаходився в стані Zs та на його вхід в цей момент прийшов сигнал xi.
Число таких розподілів, які подаються у вигляді таблиць, дорівнює числу елементів множини G. Позначимо множину таких таблиць В і отримаємо опис стохастичного дискретного автомата в вигляді четвірки .
Окремий випадок Р-автомата - це автомат, у якого перехід в новий стан або вихідний сигнал визначаються детерміновано. В першому випадку такий автомат називається Z-детермінованим стохастичним автоматом, в другому - Y-детермінованим.
Розглянемо Y-детермінований P-автомат, який заданий таблицею переходів та виходів:
Таблиця переходів Y-детермірнованого Р-автомата
Zk
Zk
Z1
Z2
...
Zk-1
Zk
Z1
Z2
...
Zk
p11
p21
...
pk1
p12
p22
...
pk2
...
...
...
...
p1(k-1)
p2(k-1)
...
pk(k-1)
p1k
p2k
...
pkk
Таблицю переходів можна в цьому випадку представити у вигляді квадратної матриці перехідних ймовірностей Р:
.
При цьому має виконуватися умова, що .
Для повного опису Y-детермінованого Р-автомата необхідно також визначити початковий розподіл ймовірностей виду
де dk - ймовірність того, що на початку роботи Р-автомат знаходиться в стані Zk.
До початку функціонування Р-автомат знаходиться в стані Z0 і в нульовий такт часу змінює стан згідно з розподілом D. Подальший процес зміни станів автомата визначається матрицею переходів Р. Можливе також введення інформації про початковий стан в матрицю Р шляхом збільшення її розмірності на одиницю до . Перший рядок цієї матриці відповідає початковому стану Z0 і має вигляд , а перший стовпчик буде нульовим.
З точки зору математичного апарату цей автомат еквівалентний дискретному марківському ланцюгу.
Варіант 38
Z0
Z1
Z2
Z3
Z4
Z5
0
1
1
1
0
0
z0
z1
z2
z3
z4
z5
z0
0
0,3
0,2
0,5
0
0
z1
0
0,5
0,2
0,3
0
0
z2
0
0
0
0
0,5
0,5
p =
z3
0
0,1
0,1
0,3
0,5
0
z4
0
0
0
0,2
0
0,8
z5
0
0
0
0
1
0
Оскільки фінальні ймовірності не залежать від стану z0, то ймовірність знаходження в станах z1, z2, z3, z4 можна знайти з матричного рівняння:
z0
z1
z2
z3
z4
z5
z0
0
0,3
0,2
0,5
0
0
z1
0
0,5
0,2
0,3
0
0
z2
0
0
0
0
0,5
0,5
p =
z3
0
0,1
0,1
0,3
0,5
0
z4
0
0
0
0,2
0
0,8
z5
0
0
0
0
1
0
C = (C0,C1,C2,C3,C4,C5)
c1 = 0,5 c1 +0,1 c3 ;
c2 = 0,2c1 + 0,1 c3;
c3 = 0,3 c1+ 0,3 c3+ 0,2 c4;
c4 = 0,5 c2 + 0,5 c3 +c5;
c5 = 0,5 c2 + 0,8 c4;
c1 + c2 + c3 + c4 + c5 + c6= 1 - умова нормування.
c1 = 0,2c3;
c2 = 0,34c3;
c3 = 0,06 c3 + 0,3 c3+ 0,2 c4; => 0,64c3=0,2c4;
c4 = 3,2 c3;
c5 = 2,73 c3 ;
7,47 c3 = 1 =>
c1 = 0,03
c2 = 0,04
c3 = 0,13
c4 = 0,42
c5 = 0,38
Текст програми
Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace Lab3_System_Modelling
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}
Form.cs
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 Lab3_System_Modelling
{
public partial class Form1 : Form
{
int kStates = 6;
int kTakt = 10;
double[,] P = { {0, 0.3, 0.2, 0.5, 0, 0 },
{0, 0.5, 0.2, 0.3, 0, 0 },
{0, 0, 0, 0, 0.5, 0.5},
{0, 0.1, 0.1, 0.3, 0.5, 0 },
{0, 0, 0, 0.2, 0, 0.8},
{0, 0, 0, 0, 1, 0 } };
int[] Z = { 0, 1, 1, 1, 0, 0 };
double[,] B = new double[10,10];
double[] C = new double[10];
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
fill_p();
fill_zy();
fill_b();
textBox1.Text = "10";
}
//FILL P Matrix
void fill_p()
{
dataGridView1.Rows.Add(kStates);
for (int i = 0; i < kStates; i++)
for (int j = 0; j < kStates; j++)
{
B[i, j] = 0;
C[i] = 0;
}
for (int i = 0; i < kStates; i++)
{
dataGridView1.Rows[i].Cells[0].Value = "Z" + i;
for (int j = 0; j < kStates; j++)
dataGridView1.Rows[i].Cells[j + 1].Value = P[i,j];
}
}
void fill_zy()
{
for (int i = 0; i < kStates; i++)
dataGridView2.Rows[0].Cells[i].Value = Z[i];
}
void fill_b()
{
dataGridView3.Rows.Add(kStates);
for (int i = 0; i < kStates; i++)
{
dataGridView3.Rows[i].Cells[0].Value = "Z" + i;
for (int j = 0; j < kStates; j++)
dataGridView3.Rows[i].Cells[j + 1].Value = 0;
}
}
private void button1_Click(object sender, EventArgs e)
{
try
{
kTakt = Int32.Parse(textBox1.Text);
Random rand = new Random();
//Filling
for (int i = 0; i < kStates; i++)
for (int j = 0; j < kStates; j++)
{
B[i, j] = 0;
C[i] = 0;
}
////////////////////
int curr = 0;
double py = 0;
for (int i = 0; i < kTakt; i++)
{
int j = 0;
double sum = 0;
double temp = Math.Round(rand.NextDouble(),1);
for (j = 0;j < kStates; j++)
{
if (temp < sum)
break;
sum += P[curr, j];
}
B[curr, j - 1]++;
curr = j - 1;
}
for (int i = 0; i < kStates; i++)
{
for (int j = 0; j < kStates; j++)
C[i] += B[j,i];
C[i] /= kTakt;
py += Z[i] * C[i];
}
/////
for (int i = 0; i < kStates; i++)
{
dataGridView4.Rows[0].Cells[i].Value = C[i];
for (int j = 0; j < kStates; j++)
{
dataGridView3.Rows[i].Cells[j+1].Value = B[i, j];
}
}
/////
//last
double tempSum = 0;
for (int i = 0; i < kStates; i++)
{
if (Z[i] == 1)
tempSum += C[i];
}
label8.Text = ""+tempSum;
}
catch(Exception err){
MessageBox.Show(err.Message);
}
}
}
}
Результат виконання програми
Висновок: На цій лабораторній роботі я вивчив процес функціонування дискретного скінченого стохастичного автомата та знайшов його ймовірностні характеристики за даними експерименту.