Небольшой модуль на Python, позволяющий характеризовать дискретный Марковский процесс. Основные возможности:
Цель | Метод |
---|---|
Построить граф переходов Марковской цепи | createTransitionGraph() |
Визуализация графа переходов | draw() |
Описать (циклические подклассы, существенные состояния и их период) | describe() |
import numpy as np
task = MarkovChain(np.array([
[1 / 2, 0, 0, 0, 1 / 2],
[0, 1 / 2, 0, 1 / 2, 0],
[0, 0, 1, 0, 0],
[0, 1 / 4, 1 / 4, 1 / 4, 1 / 4],
[1 / 2, 0, 0, 0, 1 / 2]]))
# MATRICES['5'] - в examples.py содержатся примеры различных матриц перехода
print(task.describe())
print(task.canonicalForm())
Характеристики этого процесса:
{1, 5}: существенная, период 1
{3}: существенная, период 1
{2, 4}: несущественная.
Сверху представлен переход матрицы в каноническую форму - такая перестановка состояний, чтобы существенные состояния были в верхней левой подматрице, несущественные в нижней.
task.draw_trajectory(25, [np.array([[0, 1/2, 0, 1/2, 0]]), np.array([[1/3, 1/3, 1/3, 0, 0]])])
construct_vt(v0, t)
позволяет смоделировать вектор find_stationary()
:
{1, 2, 3, 4, 5}: существенная, период 2
Циклические подклассы: [[1, 4], [2, 3, 5]]
[0.0723 0.1431 0.0181 0.4277 0.3389]
Свойство отсутствия памяти, "живи настоящим, а не прошлым". Вероятности перехода в следующие состояния зависят только от того, в каком состоянии система находится сейчас.