Подсчёт количества поглощающих состояний и построение матриц переходов марковской цепи — различия между версиями
Arimon (обсуждение | вклад) м (→Псевдокод:  изменен тип transition)  | 
				Arimon (обсуждение | вклад)  м (Косметические изменения, введена структура jump, исправлен псевдокод)  | 
				||
| Строка 1: | Строка 1: | ||
==Подсчет количества поглощащих состояний==  | ==Подсчет количества поглощащих состояний==  | ||
| − | Пусть <tex>\mathtt{transition}</tex> —   | + | Для хранения переходов марковской цепи создадим структуру <tex> \mathtt{jump}</tex> jump.   | 
| − | Тогда, по определению поглощающего состояния, если <tex>\mathtt{j}</tex> — поглощающее состояние, то <tex>\mathtt{transition}[\mathtt{j}]  | + | Пусть <tex>\mathtt{transition}</tex> — <tex> \mathtt{jump}[\mathtt{m}], где <tex>\mathtt{transition}[\mathtt{i}]\mathtt{.prob}</tex> — вероятность перехода из состояния  <tex>\mathtt{transition}[\mathtt{i}]\mathtt{.from}</tex> в <tex>\mathtt{transition}[\mathtt{i}]\mathtt{.to}</tex>.  | 
| + | Тогда, по определению поглощающего состояния, если <tex>\mathtt{j}</tex> — поглощающее состояние, то <tex>\mathtt{transition}[\mathtt{j}]\mathtt{.prob} = 1</tex>. По этому признаку можно определить все поглощающие состояния в цепи.  | ||
===Псевдокод===  | ===Псевдокод===  | ||
| Строка 8: | Строка 9: | ||
*<tex>\mathtt{m}</tex> — количество переходов  | *<tex>\mathtt{m}</tex> — количество переходов  | ||
| − |   '''boolean[]''' findAbsorbings(transition: '''  | + |   '''boolean[]''' findAbsorbings(transition: '''jump'''[m]):  | 
     '''boolean''' absorbing[n]    |      '''boolean''' absorbing[n]    | ||
| − |      '''for''' i   | + | |
| − |         absorbing  | + |      '''for''' jump i: transition   | 
| + |         absorbing[i.from] = i.from == i.to '''and''' i.prob == 1  | ||
| + | |||
     '''return''' absorbing  |      '''return''' absorbing  | ||
| Строка 21: | Строка 24: | ||
*<tex>\mathtt{R}</tex> — матрица из несущественных состояний в поглощающие.  | *<tex>\mathtt{R}</tex> — матрица из несущественных состояний в поглощающие.  | ||
| − |   '''  | + |   '''float[][]''' buildTransitionMatrix(absorbing: '''boolean'''[n], transition: '''jump'''[m]):  | 
     '''int''' count_q = 0  |      '''int''' count_q = 0  | ||
     '''int''' count_r = 0  |      '''int''' count_r = 0  | ||
| + | |||
     '''for''' i = 0 '''to''' n - 1  |      '''for''' i = 0 '''to''' n - 1  | ||
        '''if''' absorbing[i]  |         '''if''' absorbing[i]  | ||
| Строка 31: | Строка 35: | ||
           position[i] = count_q  |            position[i] = count_q  | ||
           count_q++  |            count_q++  | ||
| + | |||
     '''for''' i = 0 '''to''' m - 1  |      '''for''' i = 0 '''to''' m - 1  | ||
| − |         '''if''' absorbing[transition[i]  | + |         '''if''' absorbing[transition[i].to]  | 
| − |            '''if''' !absorbing[transition[i]  | + |            '''if''' !absorbing[transition[i].from]  | 
| − |               R[position[transition[i]  | + |               R[position[transition[i].from]][position[transition[i].to]] = transition[i].prob  | 
        '''else'''  |         '''else'''  | ||
| − |            Q[position[transition[i]  | + |            Q[position[transition[i].from]][position[transition[i].to]] = transition[i].prob  | 
| + | |||
| + |     '''return Q'''  | ||
== См. также ==  | == См. также ==  | ||
Версия 23:37, 23 июня 2018
Содержание
Подсчет количества поглощащих состояний
Для хранения переходов марковской цепи создадим структуру jump. Пусть — — вероятность перехода из состояния в . Тогда, по определению поглощающего состояния, если — поглощающее состояние, то . По этому признаку можно определить все поглощающие состояния в цепи.
Псевдокод
- — массив состояний. Если — посглощающее состояние иначе
 - — количество состояний
 - — количество переходов
 
boolean[] findAbsorbings(transition: jump[m]): boolean absorbing[n]
   for jump i: transition 
      absorbing[i.from] = i.from == i.to and i.prob == 1
return absorbing
Построение матриц переходов
Cоздадим сначала массив где -ый элемент указывает под каким номером будет находиться -ое состояние среди существенных если оно существенное или несущественных в обратном случае, и заполним эти массивы.
Псевдокод
- — массив нумерации состояний относительно существенной/несущественной матрицы.
 - — матрица перехода мужду несущественными состояниями.
 - — матрица из несущественных состояний в поглощающие.
 
float[][] buildTransitionMatrix(absorbing: boolean[n], transition: jump[m]): int count_q = 0 int count_r = 0
   for i = 0 to n - 1
      if absorbing[i]
         position[i] = count_r
         count_r++
      else 
         position[i] = count_q
         count_q++
   for i = 0 to m - 1
      if absorbing[transition[i].to]
         if !absorbing[transition[i].from]
            R[position[transition[i].from]][position[transition[i].to]] = transition[i].prob
      else
         Q[position[transition[i].from]][position[transition[i].to]] = transition[i].prob
return Q
См. также
- Марковская цепь
 - Расчет вероятности поглощения в состоянии
 - Математическое ожидание времени поглощения