Этот пример сравнивает предполагаемое время смешения нескольких марковских цепей с отличными структурами. Теоремы сходимости обычно требуют эргодических уничаев. Поэтому перед сравнением временных оценок смешения этот пример гарантирует, что марковские цепи являются эргодическими унихенами.
Создайте марковскую цепь с 23 состояниями из матрицы случайных переходов, содержащей 250 недопустимых переходов из 529 общих переходов. Недопустимый переход является переходом, вероятность наступления которого равна нулю. Постройте график марковской цепи и идентифицируйте классы с помощью цветов узлов и маркеров.
rng(1); % For reproducibility numStates = 23; Zeros1 = 250; mc1 = mcmix(numStates,'Zeros',Zeros1); figure; graphplot(mc1,'ColorNodes',true);
mc1
представляет собой унихейн, потому что это один, повторяющийся, апериодический класс.
Определите, является ли марковская цепь эргодичной.
tf1 = isergodic(mc1)
tf1 = logical
1
tf1 = 1
указывает, что mc1
представляет собой эргодический унихаин.
Постройте графики собственных значений марковской цепи на комплексной плоскости.
figure; eigplot(mc1);
Розовый диск на графике показывает спектральную погрешность (различие между двумя самыми большими модулями собственных значений). Спектральная погрешность определяет время смешения марковской цепи. Большие погрешности указывают на более быстрое смешивание, в то время как тонкие погрешности указывают на более медленное смешивание. В этом случае зазор является большим, что указывает на быстрое перемешивание цепи.
Оцените время смешения цепи.
[~,tMix1] = asymptotics(mc1)
tMix1 = 0.8357
В среднем это занимает 0.8357
шаги для общего расстояния изменения до распада в множителе .
Ожидаемое первое время столкновения для целевого состояния является другим способом просмотра скорости смешения марковской цепи. Расчет времени наезда не требует эргодичной марковской цепи.
Постройте график марковской цепи с цветами узлов, представляющими ожидаемое первое время столкновения для режима 1.
hittime(mc1,1,'Graph',true);
Ожидаемое время первого столкновения для режима 1, начиная с режима 2, составляет приблизительно 16 временных шагов.
Создайте еще одну цепь Маркова с 23 состояниями из матрицы случайного перехода, содержащей 475 недопустимых переходов. При меньшем количестве допустимых переходов эта цепь должна занимать больше времени. Постройте график марковской цепи и идентифицируйте классы с помощью цветов узлов и маркеров.
Zeros2 = 475; mc2 = mcmix(numStates,'Zeros',Zeros2); figure; graphplot(mc2,'ColorNodes',true);
mc2
представляет собой унихейн, потому что он имеет один, рекуррентный, апериодический класс и несколько переходных классов.
Определите, является ли марковская цепь эргодичной.
tf2 = isergodic(mc2)
tf2 = logical
0
tf2 = 0
указывает, что mc2
не эргодичен.
Извлеките повторяющуюся подцепь из mc2
. Определите, является ли подцепь эргодичной.
[bins,~,ClassRecurrence] = classify(mc2); recurrentClass = find(ClassRecurrence,1); recurrentState = find((bins == recurrentClass),1); sc2 = subchain(mc2,recurrentState); tf2 = isergodic(sc2)
tf2 = logical
1
sc2
представляет собой эргодический унихаин.
Постройте график собственных значений подцепи на комплексной плоскости.
figure; eigplot(sc2);
Спектральная погрешность в подцепи намного тоньше, чем погрешность в mc1
, что указывает на то, что подцепь смешивается медленнее.
Оцените время смешения подцепи.
[~,tMix2] = asymptotics(sc2)
tMix2 = 5.0201
В среднем это занимает 5.0201
шаги для общего расстояния изменения до распада в множителе .
Постройте график марковской цепи с цветами узлов, представляющими ожидаемое первое время столкновения для первого режима в рекуррентном подклассе.
sc2.StateNames(1)
ans = "2"
hittime(sc2,1,'Graph',true);
Ожидаемое время первого столкновения для режима 2, начиная с режима 8, составляет около 30 временных шагов.
Создать «гантель» марковской цепи, содержащей по 10 состояний в каждом «весе» и три состояния в «планке».
Задайте случайные вероятности перехода между состояниями в каждом весе.
Если марковская цепь достигает состояния в весе, ближайшем к планке, задайте высокую вероятность перехода к планке.
Задайте равномерные переходы между состояниями на панели.
w = 10; % 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; mc3 = dtmc(DB);
Постройте ориентированный график цепи гантелей и идентифицируйте классы с помощью цветов узлов и маркеров. Подавление меток узлов.
figure;
h = graphplot(mc3,'ColorNodes',true);
h.NodeLabel = {};
mc3
представляет собой унихейн, потому что он имеет один, рекуррентный, апериодический класс.
Определите, является ли марковская цепь эргодичной.
tf3 = isergodic(mc3)
tf3 = logical
1
tf3 = 1
указывает, что mc3
является эргодическим.
Постройте графики собственных значений гантели на комплексной плоскости.
figure; eigplot(mc3);
Спектральная щель в подцепи очень тонкая, что указывает на то, что цепь гантеля смешивается очень медленно.
Оцените время смешения цепи гантели.
[~,tMix3] = asymptotics(mc3)
tMix3 = 90.4334
В среднем это занимает 90.4334
шаги для общего расстояния изменения до распада в множителе .
Постройте график марковской цепи с цветами узлов, представляющими ожидаемое первое время столкновения для режима 1.
hittime(mc3,1,'Graph',true);
Ожидаемое время первого столкновения для режима 1, начиная с режима 15, составляет около 300 временных шагов.