Этот пример сравнивает предполагаемые времена смешивания нескольких Цепей Маркова с отличными структурами. Теоремы сходимости обычно требуют эргодического unichains. Поэтому прежде, чем сравнить смешивание временных оценок, этот пример гарантирует, что Цепи Маркова являются эргодическим unichains.
Создайте Цепь Маркова с 23 состояниями из случайной матрицы перехода, содержащей 250 неосуществимых переходов 529 общих переходов. Неосуществимый переход является переходом, чья вероятность появления является нулем. Постройте диграф Цепи Маркова и идентифицируйте классы при помощи цветов узла и маркеров.
rng(1); % For reproducibility numStates = 23; Zeros1 = 250; mc1 = mcmix(numStates,'Zeros',Zeros1); figure; graphplot(mc1,'ColorNodes',true);
mc1
представляет unichain, потому что это - один, текущий, апериодический класс.
Определите, является ли Цепь Маркова эргодической.
tf1 = isergodic(mc1)
tf1 = logical
1
tf1 = 1
указывает на тот mc1
представляет эргодический unichain.
Постройте собственные значения Цепи Маркова на комплексной плоскости.
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
представляет unichain, потому что он имеет один, текущий, апериодический класс и несколько переходных классов.
Определите, является ли Цепь Маркова эргодической.
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
представляет эргодический unichain.
Постройте собственные значения подцепи на комплексной плоскости.
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
представляет unichain, потому что он имеет один, текущий, апериодический класс.
Определите, является ли Цепь Маркова эргодической.
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 временными шагами.