Моделирование цепи Маркова в MATLAB

МЕНЮ


Главная страница
Поиск
Регистрация на сайте
Помощь проекту
Архив новостей

ТЕМЫ


Новости ИИРазработка ИИВнедрение ИИРабота разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика

Авторизация



RSS


RSS новости


Цепи Маркова (или процессы Маркова) - это математическая модель, которая используется для описания случайных процессов с дискретным временем, в которых вероятность перехода из одного состояния в другое зависит только от текущего состояния, но не от предыдущих.

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

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

Прогнозирование с помощью цепей Маркова осуществляется на основе математической модели, которая позволяет оценить вероятность перехода из текущего состояния в будущее состояние. Вероятности перехода определяются матрицей переходных вероятностей, которая характеризует зависимость вероятности перехода от текущего состояния к будущему состоянию.

Граф состояний - это графическое представление цепи Маркова, где узлы графа представляют собой возможные состояния системы, а дуги соответствуют вероятностным переходам между этими состояниями.

Пример графа состояний цепи Маркова представлен ниже:

На приведенном выше графе состояний показана модель цепи Маркова, которая моделирует светофор. У этой модели есть два состояния: "Зеленый" и "Красный". Дуга, соединяющая "Зеленый" со "Стоп" представляет собой вероятность перехода в состояние "Стоп" (например, когда светофор переключается с зеленого на красный). Аналогичным образом, дуга, соединяющая "Красный" со "Продолжить" представляет собой вероятность перехода в состояние "Продолжить" (например, когда светофор переключается с красного на зеленый).

Таким образом, граф состояний позволяет наглядно представить вероятностные переходы между состояниями в цепи Маркова.

Для прогнозирования с помощью цепей Маркова необходимо выполнить следующие шаги:

· Определить состояния системы, которые могут быть достигнуты и определить матрицу переходных вероятностей.

· Определить текущее состояние системы и рассчитать вероятность перехода в следующее состояние.

· Повторять шаг 2 на каждом следующем шаге, для прогнозирования следующих состояний системы.

Для построения цепей Маркова в MATLAB можно использовать функцию markovchain. Она принимает на вход матрицу переходных вероятностей и возвращает объект, представляющий собой цепь Маркова.

Пример:

A = [0.9 0.1; 0.2 0.8]; % матрица переходных вероятностей

mc = markovchain(A); % создание объекта цепи Маркова

mc.States = {'State 1', 'State 2'}; % задание названий состояний

mc.pi = [0.6 0.4]; % начальное распределение вероятностей состояний

Теперь можно использовать объект цепи Маркова для генерации случайных последовательностей состояний (simulate) и вычисления стационарного распределения (stationaryDistribution).

Пример:

X = simulate(mc, 10); % генерация 10 случайных состояний

Для прогнозирования переходов необходимо задаться матрицей вероятности, матрица будет описывать с какой вероятностью перехода к следующему состоянию

Листинг 1 – скрипт matlab для прогнозирования состояний

clear
clc
close all
%% матрица вероятностей переходов между состояниями
P = [0.1 0.2 0.1 0.8;
0.1 0.5 0.6 0.2;
0.5 0.6 0.6 0.8;
0.1 0.3 0.4 0.8];
%% построение цепи маркова
mc = dtmc(P,'StateNames',["1" "2" "3" "4"]);
figure;
graphplot(mc,'ColorEdges',true);
title('Графическое отображение цепи Маркова')
%% построение собственных значений цепи
figure;
eigplot(mc);
title('собственные значения цепи Маркова')
%% симуляция блуждания по цепи маркова
x0 = 3*ones(1,mc.NumStates);
numSteps = 20;
X0 = simulate(mc,numSteps,'X0',x0);
figure;
simplot(mc,X0)
title('Симуляция блуждания по цепи Маркова')
%% прозноз потока цепи маркова
disp('Прогноз блужданий по цепи Маркова')
X = X0+1
%% перераспределение цепи Маркова
rng(1); % For reproducibility
x0 = rand(mc.NumStates,1);
rd = redistribute(mc,20,'X0',x0);
figure;
distplot(mc,rd);
title('Перераспределение цепи Маркова')
%% асимптотика цепи маркова
disp('асимптотика цепи маркова')
[xFix,tMix] = asymptotics(mc)
%% проверка цепи маркова на сходимость
disp('проверка цепи маркова на сходимость')
tf = isreducible(mc)
%% классификация состояния цепи маркова
[bins,ClassStates,ClassRecurrence,ClassPeriod] = classify(mc)
%% число состояний
disp('число состояний')
length(bins)
%% состояния
disp('состояния')
ClassStates{1}
%% признак повторяемости
disp('')
ClassRecurrence
%% период повторения
disp('')
ClassPeriod

Результат моделирования:


Источник: m.vk.com

Комментарии: