10
votes

Structure de données pour le processus de décision de Markov

J'ai mis en œuvre l'algorithme d'itération de la valeur pour le processus de décision de Markov simple Wikipedia en python. Afin de conserver la structure (états, actions, transitions, récompenses) du processus de Markov en particulier et que je les ai utilisés, j'ai utilisé les structures de données suivantes:

  1. Dictionnaire des États et des actions disponibles pour ceux qui sont disponibles États:

    SA = {'State a': {'Action 1', 'Action 2', ..}, ...}, ...}

  2. Dictionnaire pour les probabilités de transition:

    t = {('état a', 'action 1'): {'état b': probabilité}, ...}

  3. Dictionnaire pour les récompenses:

    r = {('State A', 'Action 1'): {'State B': récompense}, ...} .

    Ma question est la suivante: est-ce la bonne approche? Quelles sont les structures de données les plus appropriées (en python) pour le MDP?


0 commentaires

3 Réponses :


9
votes

Si une structure de données convient ou non sur ce que vous faites avec les données. Vous mentionnez que vous souhaitez itération sur le processus, optimisez donc votre structure de données à cet effet.

Les transitions dans les processus Markov sont souvent modélisées par les multiplications matricielles. Les probabilités de transition pa (s1, s2) et les récompenses ra (S1, S2) Pourraient être décrites par (potentiellement clairsemé) Matrices PA et ra indexé par les états. Je pense que cela aurait quelques avantages:

  • Si vous utilisez des tableaux numpus pour cela, l'indexation sera probablement plus rapide qu'avec les dictionnaires.
  • Les transitions de l'état peuvent ensuite être décrites simplement par la multiplication de matrice.
  • La simulation de processus avec par exemple la sélection de la roue de la roulette sera plus rapide et plus clairement implémentée, car il vous suffit de choisir la colonne correspondante de la matrice de transition.

1 commentaires

Merci beaucoup pour vos commentaires. Je vais envisager votre approche au moins en cas de résolution de MDPS plus complexes.



10
votes

J'ai mis en œuvre les processus de décision de Markov dans Python avant et trouvé le code suivant utile.

http://aima.cs.berkeley.edu/python/mdp.html

Ce code est pris de intelligence artificielle: une approche moderne par Stuart Russell et Peter Norvig.


1 commentaires

Tandis que cela peut théoriquement répondre à la question, Ce serait préférable d'inclure les parties essentielles de la réponse ici et de fournir le lien pour référence.



0
votes

Il y a une implémentation de MDP avec python appelé pympdptoolbox . Il est développé sur la base de la mise en œuvre avec MATLAB appelée MDPoolbox . Les deux méritent de noter.

Fondamentalement, la matrice de transition de probabilité est représentée en tant que ( A × S) × ST s ) tableau et récompense en tant que ( S × une matrice ), où s et a représente le nombre d'états et de nombre d'actions. Le paquet a également un traitement spécial pour la matrice clairsemé.


0 commentaires