** Temps continu ** Implémente une simulation de transition d'état de la chaîne de Markov. L'algorithme utilisé est l'algorithme de Gillespie. Après avoir publié la mise en œuvre, j'expliquerai brièvement le plan.
** Temps discret ** Pour la simulation de transition d'état de la chaîne de Markov, veuillez vous référer à cet article. Python - Simulation de transition d'état de la chaîne de Markov
Considérons la chaîne de Markov dans le cas de trois états (état = 0,1,2).
CTMC.py
import numpy as np
import math
import random
import matplotlib.pyplot as plt
#Nombre d'états
N=3
#Matrice des taux de transition
TRANSITION_MATRIX = [[-0.3, 0.1, 0.2],
[0.2, -0.9, 0.7],
[0.7, 0.2, -0.9]]
initial_state = 0 #Etat initial
current_state = initial_state #État actuel
next_state = 0 #État suivant
dt = 0 #État du temps de séjour
state_list = [] #Liste de stockage d'état
dt_list=[] #Liste de stockage du temps de séjour
state_list.append(current_state)
dt_list.append(dt)
time = 0
T=15 #Temps d'observation
#Algorithme de Gillespy(Gillespie Algorithm)
while(time <= T):
rand_s = random.random() #Nombre aléatoire qui détermine l'état
rand_t = random.random() #Nombre aléatoire qui détermine la durée du séjour
q = -TRANSITION_MATRIX[current_state][current_state] #propensity function
total = 0
#Déterminer le prochain état de transition
for i in range(N):
if(i == current_state):
continue
total += TRANSITION_MATRIX[current_state][i]
if(rand_s < total/q):
next_state = i
break;
current_state = next_state
state_list.append(current_state)
#Déterminer la durée du séjour dans l'état actuel
dt = 1/q * math.log(1/rand_t)
time += dt
dt_list.append(dt)
#terrain
arr_state = np.array(state_list)
arr_dt = np.array(dt_list)
arr_cumsum = np.cumsum(arr_dt)
arr_state_repeat = np.repeat(arr_state,2)
arr_time_repeat = np.repeat(arr_cumsum,2)
plt.plot(arr_time_repeat[1:],arr_state_repeat[:-1],label="state")
plt.xlabel("time")
plt.ylabel("state")
plt.title("DTMC")
plt.legend()
plt.grid(color='gray')
C'est un graphique du résultat.
On voit que la transition se répète entre les états [0,1,2] jusqu'au temps T = 15. (Dans ce graphique, il passe à environ 17,5, mais c'est une spécification. Il peut être supprimé en supprimant la fin de la liste, mais il n'est pas supprimé ici car le code devient compliqué. )
L'idée principale de cet algorithme est en fonction du taux de transition