J'ai une très grande chaîne de Markov absorbante. Je veux obtenir la matrice fondamentale de cette chaîne pour calculer le expected number of steps before absortion. A partir de ce question je sais que cela peut être calculé par l'équationLe meilleur moyen itératif de calculer la matrice fondamentale d'une chaîne de Markov absorbante?
(I - Q) t = 1
qui peut être obtenu en utilisant le code de python suivant:
def expected_steps_fast(Q):
I = numpy.identity(Q.shape[0])
o = numpy.ones(Q.shape[0])
numpy.linalg.solve(I-Q, o)
Cependant, Je voudrais le calculer en utilisant une sorte de méthode itérative similaire à la méthode d'itération de puissance utilisé pour calculer le PageRank. Cette méthode me permettrait de calculer une approximation du nombre attendu d'étapes avant l'absorption dans un système de type mapreduce.
¿Est-ce que quelque chose de similaire existe?
Avez-vous examiné des solveurs itératifs pour les systèmes d'équations linéaires comme GMRES? Ils fournissent des estimations d'erreur pour vérifier le nombre d'itérations dont vous avez besoin. Python les fournit dans ['scipy.sparse.linalg'] (https://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.linalg.gmres.html # scipy.sparse.linalg.gmres) –
Ah désolé, j'ai mal compris votre question! Avez-vous regardé la [représentation de la série Neumann] (https://en.wikipedia.org/wiki/Absorbing_Markov_chain#Fundamental_matrix) de la matrice fondamentale? Il pourrait être possible d'approximer l'inverse en utilisant seulement un nombre limité d'invocations de la série de puissance –
Merci pour vos commentaires @TobiasRibizel. Je pense que la série Neumann n'est pas ce que je recherche car cela impliquerait de multiplier la matrice plusieurs fois. Cependant, si je comprends bien l'algorithme GMRES, cette solution pourrait être parallélisée par composant. –