Моделирование динамики систем на основе цепи Маркова с дискретным временем

Автор работы: Пользователь скрыл имя, 13 Сентября 2011 в 17:20, курсовая работа

Краткое описание

Цепи Маркова названы так в честь выдающегося русского математика, Андрея Андреевича Маркова, который много занимался случайными процессами и внес большой вклад в развитие этой области. В последнее время можно услышать о применении цепей Маркова в самых разных областях: в современных веб-технологиях, при анализе литературных текстов или даже при разработке тактики игры футбольной команды. У тех, кто не знает что такое цепи Маркова, может возникнуть ощущение, что это что-то очень сложное и почти недоступное для понимания.

Содержание работы

1) Введение 2
2) Цели работы 3
3) Постановка задачи 3
1. Исходные данные 3
2. Алгоритм имитационного моделирования динамики ЦМ 3
3. Содержание работы 4
4) Теоретическая часть 5
1. Определение цепи Маркова 5
2. Модель вычислительной системы как цепь Маркова 6
3. Классификация состояний цепей Маркова 8
4. Оценка длительности пребывания системы во множестве Т 10
5. Исследование динамики цепей Маркова при большом числе шагов 12
5) Практическая часть 15
1. Матрица переходных вероятностей Р 15
2. Векторы вероятностей X(t) 15
3. Оценка результатов тестирования программы 1 20
4. Структурирование Р 22
5. Матрица N и средняя трудоёмкость процесса 23
6. Оценка результатов тестирования программы 2 24
7. Среднеквадратичные отклонения от среднего пребывания процесса во
множестве Т и трудоёмкости 24
8. Оценка предельных вероятностей пребывания процесса во множестве Ť 25
6) Используемая литература 27

Содержимое работы - 1 файл

0Курсовая работа.doc

— 464.00 Кб (Скачать файл)
 

    Для того, чтобы убедится в том, что  матрица верна найдем её вторым методом. Как было раньше упомянуто матрицу  Р можно рассматривать как  следующую структуру: 
 

P s s-n
s Q R
s-n 0 W
 

    При возведении матрицы Р в k-ую степень структура имеет следующий вид: 

P s s-n
s Q R(k)
s-n 0 W
 

    При большом числе шагов матрица  Q стремится к нулевой матрице, а R и W – к некоторым придельным. Таким образом, в предельном случае: 

Pпред s s-n
s 0 Rпред
s-n 0 Wпред
 

    Теперь  осталось найти только предельные матрицы  Rпред и Wпред. Wпред также можно найти прямым возведением в степень. 

    Wпред

0,5 0,5 0
0,5 0,5 0
0 0 1

Данная  матрицы вообще не изменяется при возведении её в натуральную степень. 

    Rпред

0,465805471 0,465805471 0,068389058
0,404255319 0,404255319 0,191489362
0,486322188 0,486322188 0,027355623
0,194528875 0,194528875 0,610942249
 

    Rпред совпадает с той, которая входит в состав Рпред, вычисленной возведением в степень. Поэтому можно сказать, что верно определена матрица Рпред. Также и с Wпред.

    Оценив  полученную матрицу можно сказать, что система переходит в одно из эргодических состояний с единичной  вероятностью, то доказывает правильность определения нами множества невозвратных состояний. Но поглощающим состоянием здесь является только S7. Средняя вероятность перехода системы в поглощающее состояние = 0,224544073.

    После вычисления Рпред становится возможным определения вектора Xпред.  

    Xпред

0 0 0 0 0,465805471 0,465805471 0,068389058
 
 
 
 
 
 
 

          Используемая  литература      

1) Г.А.Доррер «Методы моделирования дискретных систем»: Красноярск, 2004, СибГТУ - 202с. 

                  Приложение

               (Листинг программы) 

//--------------------------------------------------------------------------- 

#include <vcl.h>

#include <time.h>

#pragma hdrstop 

#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

const int stat=7; 

int P[stat][stat],j0,tk,N,X[100][stat],Y[100][stat],CL[stat][3];

float V[100][stat]; 

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

        : TForm(Owner)

{

}

//--------------------------------------------------------------------------- 

void __fastcall TForm1::FormActivate(TObject *Sender)

{

srand(time(NULL)); 

mps->Cells[0][0]="P"; 

for(int i=1; i<stat+1; i++){mps->Cells[0][i]=i; mps->Cells[i][0]=i;}//нумерация строк и столбцов 

for(int i=1; i<stat+1; i++) for(int j=1; j<stat+1; j++) mps->Cells[i][j]=0; 

//исходные данные

mps->Cells[1][3]=4;

mps->Cells[2][1]=3;

mps->Cells[3][1]=4; mps->Cells[3][2]=3; mps->Cells[3][4]=2;

mps->Cells[4][2]=3; mps->Cells[4][4]=5;

mps->Cells[5][1]=3; mps->Cells[5][2]=4; mps->Cells[5][3]=3; mps->Cells[5][5]=5; mps->Cells[5][6]=5;

mps->Cells[6][3]=3; mps->Cells[6][5]=5; mps->Cells[6][6]=5;

mps->Cells[7][4]=3; mps->Cells[7][7]=10; 

//цвет каждого  состояния

CL[0][0]=0; CL[0][1]=0; CL[0][2]=255;

CL[1][0]=255; CL[1][1]=0; CL[1][2]=255;

CL[2][0]=255; CL[2][1]=255; CL[2][2]=0;

CL[3][0]=0; CL[3][1]=255; CL[3][2]=255;

CL[4][0]=150; CL[4][1]=50; CL[4][2]=150;

CL[5][0]=190; CL[5][1]=90; CL[5][2]=40;

CL[6][0]=0; CL[6][1]=150; CL[6][2]=50; 

st1->Brush->Color=RGB(CL[0][0],CL[0][1],CL[0][2]);

st2->Brush->Color=RGB(CL[1][0],CL[1][1],CL[1][2]);

st3->Brush->Color=RGB(CL[2][0],CL[2][1],CL[2][2]);

st4->Brush->Color=RGB(CL[3][0],CL[3][1],CL[3][2]);

st5->Brush->Color=RGB(CL[4][0],CL[4][1],CL[4][2]);

st6->Brush->Color=RGB(CL[5][0],CL[5][1],CL[5][2]);

st7->Brush->Color=RGB(CL[6][0],CL[6][1],CL[6][2]); 

koord->Click();

}

//---------------------------------------------------------------------------

//прочтение исходных данных

void __fastcall TForm1::datareaderClick(TObject *Sender)

{

j0=StrToInt(nss->Text);

tk=StrToInt(chvsh->Text);

N=StrToInt(chse->Text); 

for(int i=0; i<stat; i++) for(int j=0; j<stat; j++) P[i][j]=StrToInt(mps->Cells[j+1][i+1]);

}

//--------------------------------------------------------------------------- 

void __fastcall TForm1::imitationClick(TObject *Sender)

{

int st,r; 

for(int n=0; n<N; n++){ 

//обнуление матрицы У

for(int i=0; i<stat; i++) for(int j=0; j<100; j++) Y[j][i]=0; 

st=j0-1;

Y[0][j0-1]=1; 

        for(int i=0; i<tk; i++){

                int d=0;

               

                r=1+rand()%10;

               

                for(int j=0; j<stat; j++){

                        if(P[st][j]>0){

                                d+=P[st][j];

                                if(r<=d){

                                        Y[i+1][j]+=1;

                                        st=j;

                                        break;

                                }

                        }

                } 

                //if(st==7) break;

        } 

for(int i=0; i<stat; i++) for(int j=0; j<tk+1; j++) X[j][i]+=Y[j][i];

} 

vyvod->Lines->Add("---Оценки  среднего числа пребывания системы  в каждом состоянии с точностью  до 6 знаков. Тестов - "+IntToStr(N)+"---"); 

int Z[stat]; 

for(int i=0; i<stat; i++) Z[i]=0; 

AnsiString B=""; 

for(int i=0; i<stat; i++) for(int j=0; j<tk+1; j++) Z[i]+=X[j][i]; 

for(int i=0; i<stat; i++) B+=FloatToStr((float)(int)((float)Z[i]/N*1000000)/1000000)+"  ";

vyvod->Lines->Add(B); 

vyvod->Lines->Add("---Вероятности  пребывания системы в каждом состоянии с точностью до 6 знаков. Тестов - "+IntToStr(N)+"---");

for(int j=0; j<tk+1; j++){

        AnsiString A="t"+IntToStr(j)+":  ";

        int S=0; 

        for(int i=0; i<stat; i++) S+=X[j][i];

        for(int i=0; i<stat; i++){

                V[j][i]=(float)(int)((float)X[j][i]/S*1000000)/1000000;

                A+=FloatToStr((float)(int)((float)X[j][i]/S*1000000)/1000000)+"  ";

        }

        vyvod->Lines->Add(A);

}

vyvod->Lines->Add("");

} 

//---------------------------------------------------------------------------

//главая функция тестирования

void __fastcall TForm1::Button1Click(TObject *Sender)

{

for(int i=0; i<stat; i++) for(int j=0; j<100; j++) X[j][i]=0; 

datareader->Click();

imitation->Click();

grafik->Click();

}

//--------------------------------------------------------------------------- 

void __fastcall TForm1::koordClick(TObject *Sender)

{

gr->Picture=NULL; 

gr->Canvas->Pen->Width=1;

gr->Canvas->Pen->Color=RGB(170,170,170);

gr->Canvas->MoveTo(20,20); gr->Canvas->LineTo(490,20);

gr->Canvas->MoveTo(20,85); gr->Canvas->LineTo(490,85);

gr->Canvas->MoveTo(20,150); gr->Canvas->LineTo(490,150);

gr->Canvas->MoveTo(20,215); gr->Canvas->LineTo(490,215);

gr->Canvas->Pen->Color=RGB(0,0,0); 

gr->Canvas->Pen->Width=2;

gr->Canvas->MoveTo(20,280); gr->Canvas->LineTo(20,15);

gr->Canvas->MoveTo(20,280); gr->Canvas->LineTo(490,280); 

gr->Canvas->TextOutA(5,282,"0");

gr->Canvas->TextOutA(5,20,"1");

gr->Canvas->TextOutA(1,152,"0,5"); 

gr->Canvas->MoveTo(17,20); gr->Canvas->LineTo(24,20);

gr->Canvas->MoveTo(17,150); gr->Canvas->LineTo(24,150); 

for(int i=0; i<15; i++){

        gr->Canvas->TextOutA(40+30*i,282,IntToStr(i+1));

        gr->Canvas->MoveTo(45+30*i,282); gr->Canvas->LineTo(45+30*i,277);

}

}

//--------------------------------------------------------------------------- 

void __fastcall TForm1::grafikClick(TObject *Sender)

Информация о работе Моделирование динамики систем на основе цепи Маркова с дискретным временем