我已经在Python中为简单的Markov决策过程Wikipedia实现了值迭代算法。为了保持特定马尔可夫过程的结构(状态,动作,转换,奖励)并迭代它,我使用了以下数据结构:
可用于那些状态和操作的字典 陈述:
SA = { 'state A': {' action 1', 'action 2', ..}, ...}
转换概率词典:
T = {('state A', 'action 1'): {'state B': probability}, ...}
奖励字典:
R = {('state A', 'action 1'): {'state B': reward}, ...}
。
我的问题是:这是正确的做法吗? MDP最适合的数据结构(在Python中)是什么?
答案 0 :(得分:9)
我之前在Python中实现了Markov Decision Processes,发现以下代码很有用。
http://aima.cs.berkeley.edu/python/mdp.html
此代码取自Stuart Russell和Peter Norvig的人工智能:现代方法。
答案 1 :(得分:8)
数据结构是否合适主要取决于您对数据的处理方式。您提到要迭代整个过程,因此为此目的优化数据结构。
马尔可夫过程中的转换通常通过矩阵乘法建模。转换概率Pa(s1,s2)
和奖励Ra(s1,s2)
可以由状态索引的(可能是稀疏的)矩阵Pa
和Ra
来描述。我认为这会有一些好处:
答案 2 :(得分:0)
有一个名为pymdptoolbox的python实现MDP。它是基于Matlab实现开发的,名为MDPToolbox。两者都值得注意。
基本上,概率转移矩阵表示为(A
×S
×S
)数组,奖励为(S
×A
)矩阵,其中S
和A
表示状态数和动作数。该包对稀疏矩阵也有一些特殊处理。