马尔可夫决策过程的转移矩阵必须是随机的吗?

Jam*_*s C 1 python markov-chains dynamic-programming stochastic mdptoolbox

我正在尝试使用值迭代(通过 pymdptoolbox)和 NumPy找到此图中指定的马尔可夫决策过程问题的最佳策略。但是 pymdptoolbox 说我的转换矩阵“不是随机的”。

是不是因为有 [0, 0, 0, 0] 的数组?有些转换是不可能的,比如从状态 1 到状态 3。如果不是用零,我如何表示这些不可能的转换?

我的代码:

import mdptoolbox 
import numpy as np

transitions = np.array([
#action1
    [
            [0.2, 0.8, 0, 0], #s1
            [0, 0, 0, 0], #s2
            [0, 0, 0, 0], #s3
            [0, 0, 0.9, 0.1] #s4
    ],

#action2
    [
            [0.2, 0, 0, 0.8], #s1
            [0, 0.2, 0.8, 0], #s2
            [0, 0, 0, 0], #s3
            [0, 0, 0, 0] #s4
    ],

#action3
    [
            [0, 0, 0, 0], #s1
            [0.8, 0.2, 0, 0], #s2
            [0, 0, 0, 1], #s3
            [0, 0, 0, 0] #s4
    ],

#action4
        [
                [0.8, 0, 0, 0.2], #s1
                [0, 0, 0, 0], #s2
                [0, 1, 0, 0], #s3
                [0, 0, 0, 0] #s4
        ]
])

rewards = np.array([
        [0, 0, 0, 0],
        [0, 0, 0, 0],
        [1, 1, 1, 1],
        [0, 0, 0, 0]
        ])

vi = mdptoolbox.mdp.ValueIteration(transitions, rewards, 0.4)
Run Code Online (Sandbox Code Playgroud)

Pru*_*une 5

问题是您使用了所有 0 值来表示无法访问的状态。你必须有1每行的总概率。由于状态无法访问,因此无论您如何操作都无所谓——将“1”放入第一列,均匀分配值,无论您喜欢什么。当我遇到这个问题时,我只是在主对角线上使用“1”:让不可能的状态成为一个接收器。