2013-11-24 4 views
1

У меня есть следующая цепь Маркова:
Моделирование цепей Маркова

enter image description here

Эта цепь показывает состояния звездолета, который находится в поясе астероидов: S1 - исправна, S2 - сломана. 0.12 - вероятность уничтожения космического корабля путем столкновения с астероидом. 0.88 - вероятность того, что столкновение не будет критическим. Необходимо найти вероятность исправного состояния судна после третьего столкновения.

Аналитическое решение показало ответ - 0,681. Но решить эту проблему необходимо с помощью метода моделирования с помощью любого инструмента моделирования (MATLAB Simulink, AnyLogic, Scilab и т. Д.).

Знаете ли вы, какие компоненты следует использовать для имитации этого процесса в Simulink или в любой другой среде моделирования? Любые примеры или ссылки. (Извините за мой английский.)

+0

Цепочка марков основана на дискретных событиях, не так ли? Это может стать немного громоздким в Simulink, если у вас нет инструментария «SimEvents». (или, возможно, использовать эту [FEX-альтернативу] (http://www.mathworks.com/matlabcentral/fileexchange/42875-function-chart-v-3-2), на самом деле для управления приводом)), в любом случае ее можно сделать это в Simulink без каких-либо дополнительных инструментов. Этот вопрос может быть скоро закрыт, так как здесь нет темы. – thewaywewalk

ответ

0

Для более сложной системы вы захотите использовать Stateflow или SimEvents, но для этого простого примера вам нужен только один блок задержки блока (output = 0 => S1, output = 1 => S2), с блоком коммутатора, случайным блоком и некоторыми сравнительными блоками для построения логики, определяющей следующее значение состояния.

Предположительно, вы должны выполнить симуляцию (очень) большое количество раз и усреднить результаты, чтобы получить статистически значимый результат. Вам нужно будет изменить «семя» случайного генератора каждый раз, когда вы запускаете симуляцию. Это можно сделать, установив семя «сейчас» (или что-то похожее на это).

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

0

Если вы хотите, чтобы имитировать это, довольно легко в MATLAB:

servicable = 1; 
t = 0; 
while servicable =1 
    t = t+1; 
    servicable = rand()<=0.88 
end 

t Теперь представляет количество шагов до того, как судно разбито.

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


Обратите внимание, что это действительно может дать вам распределение, если вы хотите знать, это после того, как в 3 раза, просто добавьте && t<3 в состояние в то время.

Смежные вопросы