我试图使用值迭代(通过pymdptoolbox)和NumPy为this diagram中指定的Markov决策过程问题找到最优策略。但是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)
问题是,您使用了所有0值来表示无法访问的状态。你每行的总概率必须是1。由于状态是不可访问的,所以不管如何在第一列中添加“1”,然后均匀地分配值,无论您喜欢什么。当我解决这个问题时,我只需在主对角线上使用一个“1”:让不可能的状态成为一个接收器。在
相关问题 更多 >
编程相关推荐