问题 马尔可夫决策过程的数据结构


我已经为简单的Markov决策过程实现了值迭代算法 维基百科 在Python中。为了保持特定马尔可夫过程的结构(状态,动作,转换,奖励)并迭代它,我使用了以下数据结构:

  1. 可用于那些状态和操作的字典 状态:

    SA = { 'state A': {' action 1', 'action 2', ..}, ...}

  2. 转换概率字典:

    T = {('state A', 'action 1'): {'state B': probability}, ...}

  3. 奖励词典:

    R = {('state A', 'action 1'): {'state B': reward}, ...}

我的问题是:这是正确的方法吗? MDP最适合的数据结构(在Python中)是什么?


3896
2017-12-20 20:36


起源



答案:


数据结构是否合适主要取决于您对数据的处理方式。您提到要迭代该过程,因此为此目的优化数据结构。

马尔可夫过程中的过渡通常通过矩阵乘法建模。转换概率 Pa(s1,s2) 和奖励 Ra(s1,s2) 可以用(可能是稀疏的)矩阵来描述 Pa 和 Ra 由各州索引。我认为这会有一些好处:

  • 如果为此使用numpy数组,索引可能会比使用字典更快。
  • 然后,可以通过矩阵乘法简单地描述状态转换。
  • 使用例如轮盘赌选择的过程模拟将更快且更清晰地实现,因为您只需要选择过渡矩阵的相应列。

8
2017-12-20 21:09



非常感谢您的评论。至少在更复杂的MDP要解决的情况下,我会考虑您的方法。 - JackAW


答案:


数据结构是否合适主要取决于您对数据的处理方式。您提到要迭代该过程,因此为此目的优化数据结构。

马尔可夫过程中的过渡通常通过矩阵乘法建模。转换概率 Pa(s1,s2) 和奖励 Ra(s1,s2) 可以用(可能是稀疏的)矩阵来描述 Pa 和 Ra 由各州索引。我认为这会有一些好处:

  • 如果为此使用numpy数组,索引可能会比使用字典更快。
  • 然后,可以通过矩阵乘法简单地描述状态转换。
  • 使用例如轮盘赌选择的过程模拟将更快且更清晰地实现,因为您只需要选择过渡矩阵的相应列。

8
2017-12-20 21:09



非常感谢您的评论。至少在更复杂的MDP要解决的情况下,我会考虑您的方法。 - JackAW


我之前在Python中实现了Markov Decision Processes,发现以下代码很有用。

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

此代码取自 人工智能:现代方法 作者:Stuart Russell和Peter Norvig。


8
2018-01-11 08:43



虽然理论上这可以回答这个问题, 这会更好 在这里包括答案的基本部分,并提供参考链接。 - Spontifixus


有一个叫做python的MDP实现 pymdptoolbox。它是基于Matlab的实现而开发的 MDPToolbox。两者都值得注意。

基本上,概率转移矩阵表示为(A × S × S)阵列和奖励(S × A)矩阵,在哪里 S 和 A 表示状态数和动作数。该包对稀疏矩阵也有一些特殊的处理方法。


0
2017-11-12 05:16