hittime

Вычислите время наезда на марковскую цепь

Описание

пример

ht = hittime(mc,target) возвращает ожидаемое время первого столкновения ht для заданного подмножества состояний target, начиная с каждого состояния в Марковской цепи mc. Если target образует повторяющийся класс, элементы ht являются expected absorption times.

пример

ht = hittime(mc,target,'Graph',true) строит графики ориентированного графа mc с цветами узлов, представляющими ожидаемое время первого столкновения. Цветовая панель суммирует расцветку.

[ht,h] = hittime(mc,target,'Graph',true) также возвращает указатель на график. Использование h для изменения свойств графика после его создания.

[ht,h] = hittime(ax,mc,target,'Graph',true) графики на осях, заданных ax вместо текущих систем координат (gca).

Примеры

свернуть все

Рассмотрим эту теоретическую, правостохастическую переходную матрицу стохастического процесса.

P=[10001/201/200001001/21/2].

Создайте марковскую цепь, которая характеризуется переходной матрицей P.

P = [1 0 0 0; 1/2 0 1/2 0; 0 0 0 1; 0 0 1/2 1/2];
mc = dtmc(P);

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

figure;
graphplot(mc,'ColorNodes',true);

Figure contains an axes. The axes contains 4 objects of type graphplot, line. These objects represent Transient, Aperiodic.

Вычислите ожидаемое первое время столкновения для состояния 3, начиная с каждого состояния в цепи Маркова.

ht = hittime(mc,3)
ht = 4×1

   Inf
   Inf
     0
     2

Поскольку состояние 3 недоступно из состояния 1, состояние 1 является удаленным состоянием относительно состояния 3 с ожидаемым временем первого столкновения Inf.

Состояние 3 доступно из состояния 2, но состояние 2 имеет положительную вероятность перехода в состояние 1, которое является поглощающим состоянием. Поэтому состояние 2 является удаленно-достижимым состоянием относительно состояния 3 с ожидаемым временем первого столкновения Inf.

Поскольку состояние 3 является целью, его ожидаемое первое время столкновения для себя 0.

Ожидаемое первое время столкновения для состояния 3, начиная с состояния 4 2 временные шаги.

Рассмотрим эту теоретическую, правостохастическую переходную матрицу стохастического процесса.

P=[01/201/22/301/3001/201/21/302/30].

Создайте марковскую цепь, которая характеризуется переходной матрицей P.

P = [0   1/2 0   1/2 
     2/3 0   1/3 0   
     0   1/2 0   1/2 
     1/3 0   2/3 0  ];
mc = dtmc(P);

Постройте график Марковской цепи mc. Отобразите вероятности перехода.

graphplot(mc,'ColorEdges',true)

Figure contains an axes. The axes contains an object of type graphplot.

Вычислите ожидаемое первое время столкновения для состояния 1, начиная с каждого состояния в цепи Маркова.

ht = hittime(mc,1)
ht = 4×1

         0
    2.3333
    4.0000
    3.6667

Постройте график марковской цепи. Задайте цвета узлов, представляющие ожидаемое первое время столкновения для состояния 1, начиная с каждого состояния в цепь Маркова.

hittime(mc,1,'Graph',true);

Figure contains an axes. The axes contains 2 objects of type graphplot, line. This object represents Target State (ht = 0).

Постройте еще один диграф. Включите состояние 4 в качестве целевого состояния.

hittime(mc,[1 4],'Graph',true);

Figure contains an axes. The axes contains 2 objects of type graphplot, line. This object represents Target States (ht = 0).

Создайте марковскую цепь, характеризующуюся этой матрицей перехода:

P=[1/201/2000001/302/30001/403/4000002/301/30001/41/81/81/81/41/801/61/61/61/61/61/601/2000001/2].

P = [1/2 0   1/2 0   0   0   0
     0   1/3 0   2/3 0   0   0
     1/4 0   3/4 0   0   0   0
     0   2/3 0   1/3 0   0   0
     1/4 1/8 1/8 1/8 1/4 1/8 0
     1/6 1/6 1/6 1/6 1/6 1/6 0
     1/2 0   0   0   0   0   1/2];
mc = dtmc(P);

Вычислите ожидаемое первое время столкновения для состояния 1, начиная с каждого состояния в цепи Маркова mc. Кроме того, постройте график и задайте цвета узлов, представляющие ожидаемое первое время столкновения для состояния 1.

ht = hittime(mc,1,'Graph',true)

Figure contains an axes. The axes contains 4 objects of type graphplot, line. These objects represent Target State (ht = 0), Remote (ht = Inf), Remote-Reachable (ht = Inf).

ht = 7×1

     0
   Inf
     4
   Inf
   Inf
   Inf
     2

Состояния 2 и 4 образуют поглощающий класс. Поэтому состояние 1 недоступно из этих состояний. Класс поглощения является удаленным относительно состояния 1 с ожидаемым временем первого столкновения Inf.

Состояние 1 достижимо из состояний 5 и 6, но вероятность перехода в класс поглощения из состояний 5 и 6 ненулевая. Поэтому состояния 5 и 6 являются удаленно достижимыми относительно состояния 1 с ожидаемым временем первого столкновения Inf.

Ожидаемое первое время столкновения для состояния 1, начиная с состояния 7, составляет 2 временные шаги. Ожидаемое первое время столкновения для состояния 1, начиная с состояния 3, составляет 4 временные шаги.

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

numStates = 8;
Zeros = 50;
stateNames = strcat(repmat("Regime ",1,8),string(1:8));
rng(1617676169) % For reproducibility
mc = mcmix(8,'Zeros',Zeros,'StateNames',stateNames);

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

figure;
graphplot(mc,'ColorNodes',true);

Figure contains an axes. The axes contains 5 objects of type graphplot, line. These objects represent Transient, Aperiodic.

Найдите повторяющийся класс в марковской цепи mc следуя этой процедуре:

  1. Классифицируйте состояния путем прохождения mc на classify. Верните массив членств классов ClassStates и логический вектор, определяющий, являются ли классы повторяющимися ClassRecurrence.

  2. Извлеките рекуррентные классы из массива классов путем индексации в массив с помощью логического вектора.

[~,ClassStates,IsClassRecurrent] = classify(mc);
recurrent = ClassStates{IsClassRecurrent}
recurrent = 1x4 string
    "Regime 2"    "Regime 3"    "Regime 6"    "Regime 8"

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

ht = hittime(mc,recurrent);

Извлеките и отобразите ожидаемое время поглощения, начиная с переходных состояний.

istransient = ~ismember(mc.StateNames,recurrent);
absorbtime = ht(istransient);
table(absorbtime,'RowNames',mc.StateNames(istransient))
ans=4×1 table
                absorbtime
                __________

    Regime 1      5.8929  
    Regime 4           1  
    Regime 5      1.7777  
    Regime 7      4.8929  

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

rng(1) % For reproducibility
mc = mcmix(50,'Zeros',2400);

Визуализируйте время смешения марковской цепи путем построения графика и определения цветов узлов, представляющих ожидаемое первое время столкновения для состояния 1, начиная с каждого состояния.

hittime(mc,1,'Graph',true);

Figure contains an axes. The axes contains 2 objects of type graphplot, line. This object represents Target State (ht = 0).

Визуализируйте время смешения марковской цепи для состояния 5.

hittime(mc,5,'Graph',true);

Figure contains an axes. The axes contains 2 objects of type graphplot, line. This object represents Target State (ht = 0).

Ожидаемое время коммутации из состояния i указывать j - ожидаемое время перехода марковской цепи из состояния i указывать j (ожидаемое время первого столкновения ht(i,j)), затем вернемся к состоянию i (ht(j,i)). Формально ожидаемое время коммутации

C(i,j)=ht(i,j)+ht(j,i).

Создать «гантель» марковской цепи, содержащей по 10 состояний в каждом «весе» и три состояния в «планке».

  • Задайте случайные вероятности перехода между состояниями в каждом весе.

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

  • Задайте равномерные переходы между состояниями на панели.

rng(1); % For reproducibility
w = 5;                              % Dumbbell weights
DBar = [0 1 0; 1 0 1; 0 1 0];        % Dumbbell bar
DB = blkdiag(rand(w),DBar,rand(w));  % Transition matrix

% Connect dumbbell weights and bar
DB(w,w+1) = 1;                       
DB(w+1,w) = 1; 
DB(w+3,w+4) = 1; 
DB(w+4,w+3) = 1;

mc = dtmc(DB);

Постройте график Марковской цепи mc. Подавление меток узлов.

figure;
graphplot(mc);

Figure contains an axes. The axes contains an object of type graphplot.

Рассмотрите вычисление ожидаемого времени коммутации из состояния 1 в состояние 10.

Вычислите ht(1,10), ожидаемое время первого столкновения для состояния 10, начиная с состояния 1.

ht = hittime(mc,10);
ht1to10 = ht(1);

Вычислите ht(10,1), ожидаемое время первого столкновения для состояния 1, начиная с состояния 10.

ht = hittime(mc,1);
ht10to1 = ht(10);

Вычислите ожидаемое время коммутации из состояния 1 в состояние 10.

C1to10 = ht1to10 + ht10to1
C1to10 = 236.6165

Ожидаемое время переключения от состояния 1 до состояния 10 и назад составляет 236,62 временные шаги.

Входные параметры

свернуть все

Дискретная цепь Маркова с NumStates состояния и матрица переходов P, заданный как dtmc объект. P должен быть полностью задан (нет NaN записи).

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

  • Для числового вектора элементы target соответствуют строкам матрицы переходов mc.P.

  • Для строкового вектора или вектора камеры из векторов символов, элементов target должны быть именами состояний в mc.StateNames.

Пример: ["Regime 1" "Regime 2"]

Типы данных: double | string | cell

Оси, на которых нужно построить график, заданные как Axes объект.

По умолчанию, hittime графики для текущей системы координат (gca).

Выходные аргументы

свернуть все

Ожидалось первое попадание, возвращенное как числовой вектор длины mc.NumStates. ht (j) - ожидаемое время первого столкновения заданного подмножества целевых состояний target от начального состояния j.

Если ht (j) = Inf, состояние j является удаленным состоянием или удаленно доступным состоянием для целевых состояний target.

Указатель на график, возвращенный как графический объект, когда 'Graph' Аргумент пары "имя-значение" true. h является уникальным идентификатором, который можно использовать для запроса или изменения свойств графика.

Подробнее о

свернуть все

Удаленное состояние

Remote states те состояния, из которых целевые состояния недоступны. Удаленное состояние имеет вероятность столкновения 0 и ожидаемое время первого столкновения Inf. Для получения дополнительной информации о вероятностях столкновения, см. hitprob.

Состояние удаленного доступа

Remote-reachable states те состояния, из которых целевые состояния достижимы и которые имеют положительную вероятность достижения поглощающего класса. Состояние удаленного доступа имеет ожидаемое время первого столкновения Inf для целевых состояний.

Алгоритмы

hittime использование linprog для нахождения неотрицательного решения минимальной нормы в системе:

{kiA=0,iAkiA=1+jAPijkjA,iA,

где

  • kiA = ht (i)ожидаемое первое время столкновения для подмножества состояний A, начиная с состояния i.

  • A - набор индексов состояний в target.

  • P = mc.P.

  • N = mc.NumStates [1].

Ссылки

[1] Norris, J. R. Markov Chains. Кембридж, Великобритания: Cambridge University Press, 1997.

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