Подсчёт количества поглощающих состояний и построение матриц переходов марковской цепи — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
м (Подсчет количества поглощащих состояний: все переменные в mathtt)
м (Убрано mathtt с констант)
Строка 1: Строка 1:
 
==Подсчет количества поглощащих состояний==
 
==Подсчет количества поглощащих состояний==
Пусть <tex>\mathtt{transition}</tex> — массив переходов марковской цепи, где <tex>\mathtt{transition[i][2]}</tex> — вероятность перехода из состояния  <tex>\mathtt{transition[i][0]}</tex> в <tex>\mathtt{transition[i][1]}</tex>.
+
Пусть <tex>\mathtt{transition}</tex> — массив переходов марковской цепи, где <tex>\mathtt{transition}[\mathtt{i}][2]</tex> — вероятность перехода из состояния  <tex>\mathtt{transition}[\mathtt{i}][0]</tex> в <tex>\mathtt{transition}[\mathtt{i}][1]</tex>.
Тогда, по определению поглощающего состояния, если <tex>\mathtt{j}</tex> — поглощающее состояние, то <tex>\mathtt{transition[j][2] = 1}</tex>. По этому признаку можно определить все поглощающие состояния в цепи.
+
Тогда, по определению поглощающего состояния, если <tex>\mathtt{j}</tex> — поглощающее состояние, то <tex>\mathtt{transition}[\mathtt{j}][2] = 1</tex>. По этому признаку можно определить все поглощающие состояния в цепи.
  
 
===Псевдокод===
 
===Псевдокод===
*<tex>\mathtt{absorbing}: boolean:[\mathtt{n}]</tex> — массив состояний. Если <tex>\mathtt{i}</tex> — посглощающее состояние <tex>\mathtt{absorbing[i] = true}</tex>
+
*<tex>\mathtt{absorbing}: boolean:[\mathtt{n}]</tex> — массив состояний. Если <tex>\mathtt{i}</tex> — посглощающее состояние <tex>\mathtt{absorbing}[\mathtt{i}] = true</tex>
 
*<tex>\mathtt{n}</tex> — количество состояний
 
*<tex>\mathtt{n}</tex> — количество состояний
 
*<tex>\mathtt{m}</tex> — количество переходов
 
*<tex>\mathtt{m}</tex> — количество переходов
  
  '''function''' findAbsorbings(transition: '''int'''[m][2]):
+
  '''boolean[]''' findAbsorbings(transition: '''int'''[m][2]):
 
     '''boolean''' absorbing[m]
 
     '''boolean''' absorbing[m]
 
     '''for''' i = 0 '''to''' m - 1
 
     '''for''' i = 0 '''to''' m - 1
Строка 18: Строка 18:
 
Cоздадим сначала массив <tex>\mathtt{position}</tex> где <tex>\mathtt{i}</tex>-ый элемент указывает под каким номером будет находиться <tex>\mathtt{i}</tex>-ое состояние среди существенных если оно существенное или несущественных в обратном случае, и заполним эти массивы.
 
Cоздадим сначала массив <tex>\mathtt{position}</tex> где <tex>\mathtt{i}</tex>-ый элемент указывает под каким номером будет находиться <tex>\mathtt{i}</tex>-ое состояние среди существенных если оно существенное или несущественных в обратном случае, и заполним эти массивы.
 
===Псевдокод===
 
===Псевдокод===
*<tex>\mathtt{position[n]}</tex> — массив нумерации состояний относительно существенной/несущественной матрицы.
+
*<tex>\mathtt{position}[\mathtt{n}]</tex> — массив нумерации состояний относительно существенной/несущественной матрицы.
 
*<tex>\mathtt{Q}</tex> — матрица перехода мужду несущественными состояниями.
 
*<tex>\mathtt{Q}</tex> — матрица перехода мужду несущественными состояниями.
 
*<tex>\mathtt{R}</tex> — матрица из несущественных состояний в поглощающие.
 
*<tex>\mathtt{R}</tex> — матрица из несущественных состояний в поглощающие.
  
  '''procedure''' buildTransitionMatrix()
+
  '''procedure''' buildTransitionMatrix():
 
     count_q = 0
 
     count_q = 0
 
     count_r = 0
 
     count_r = 0

Версия 23:57, 19 июня 2018

Подсчет количества поглощащих состояний

Пусть [math]\mathtt{transition}[/math] — массив переходов марковской цепи, где [math]\mathtt{transition}[\mathtt{i}][2][/math] — вероятность перехода из состояния [math]\mathtt{transition}[\mathtt{i}][0][/math] в [math]\mathtt{transition}[\mathtt{i}][1][/math]. Тогда, по определению поглощающего состояния, если [math]\mathtt{j}[/math] — поглощающее состояние, то [math]\mathtt{transition}[\mathtt{j}][2] = 1[/math]. По этому признаку можно определить все поглощающие состояния в цепи.

Псевдокод

  • [math]\mathtt{absorbing}: boolean:[\mathtt{n}][/math] — массив состояний. Если [math]\mathtt{i}[/math] — посглощающее состояние [math]\mathtt{absorbing}[\mathtt{i}] = true[/math]
  • [math]\mathtt{n}[/math] — количество состояний
  • [math]\mathtt{m}[/math] — количество переходов
boolean[] findAbsorbings(transition: int[m][2]):
   boolean absorbing[m]
   for i = 0 to m - 1
      if transition[i][0] == transition[i][1] and transition[i][2] == 1
        absorbing[transition[i][0]] = true
   return absorbing

Построение матриц переходов

Cоздадим сначала массив [math]\mathtt{position}[/math] где [math]\mathtt{i}[/math]-ый элемент указывает под каким номером будет находиться [math]\mathtt{i}[/math]-ое состояние среди существенных если оно существенное или несущественных в обратном случае, и заполним эти массивы.

Псевдокод

  • [math]\mathtt{position}[\mathtt{n}][/math] — массив нумерации состояний относительно существенной/несущественной матрицы.
  • [math]\mathtt{Q}[/math] — матрица перехода мужду несущественными состояниями.
  • [math]\mathtt{R}[/math] — матрица из несущественных состояний в поглощающие.
procedure buildTransitionMatrix():
   count_q = 0
   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][1]]
         if !absorbing[transition[i][0]]
            R[position[transition[i][0]]][position[transition[i][1]]] = transition[i][2]
      else
         Q[position[transition[i][0]]][position[transition[i][1]]] = transition[i][2]

См. также

Источники информации