gpt4 book ai didi

python - 当我尝试将值迭代算法与 mdptoolbox 一起使用时出现 OverflowError

转载 作者:太空宇宙 更新时间:2023-11-03 21:33:12 24 4
gpt4 key购买 nike

我为一个板设置了一个简单的 MDP,它有 4 种可能的状态和 4 种可能的操作。棋盘和奖励设置如下:

enter image description here

这里,S4 是目标状态,S2 是吸收状态。我在编写的代码中定义了转移概率矩阵和奖励矩阵,以获得该 MDP 的最优值函数。但当我运行代码时,我收到一条错误:OverflowError:无法将浮点无穷大转换为整数。我无法理解其中的原因。

import mdptoolbox
import numpy as np

transitions = np.array([
# action 1 (Right)
[
[0.1, 0.7, 0.1, 0.1],
[0.3, 0.3, 0.3, 0.1],
[0.1, 0.2, 0.2, 0.5],
[0.1, 0.1, 0.1, 0.7]
],
# action 2 (Down)
[
[0.1, 0.4, 0.4, 0.1],
[0.3, 0.3, 0.3, 0.1],
[0.4, 0.1, 0.4, 0.1],
[0.1, 0.1, 0.1, 0.7]
],
# action 3 (Left)
[
[0.4, 0.3, 0.2, 0.1],
[0.2, 0.2, 0.4, 0.2],
[0.5, 0.1, 0.3, 0.1],
[0.1, 0.1, 0.1, 0.7]
],
# action 4 (Top)
[
[0.1, 0.4, 0.4, 0.1],
[0.3, 0.3, 0.3, 0.1],
[0.4, 0.1, 0.4, 0.1],
[0.1, 0.1, 0.1, 0.7]
]
])

rewards = np.array([
[-1, -100, -1, 1],
[-1, -100, -1, 1],
[-1, -100, -1, 1],
[1, 1, 1, 1]
])


vi = mdptoolbox.mdp.ValueIteration(transitions, rewards, discount=0.5)
vi.setVerbose()
vi.run()

print("Value function:")
print(vi.V)


print("Policy function")
print(vi.policy)

如果我将 discount 的值从 0.5 更改为 1,效果很好。值迭代不适用于折扣值 0.5 或任何其他十进制值的原因可能是什么?

更新:我的奖励矩阵似乎存在一些问题。我没能按照我的预期来写它。因为如果我更改奖励矩阵中的某些值,错误就会消失。

最佳答案

所以结果是我定义的奖励矩阵不正确。根据上图定义的奖励矩阵,应该是(S,A)类型如 documentation 中给出的,其中每一行对应于从 S1 开始的状态直到S4每列对应于从 A1 开始的操作直到A4 。新的奖励矩阵如下所示:

#(S,A)
rewards = np.array([
[-1, -1, -1, -1],
[-100, -100, -100, -100],
[-1, -1, -1, -1],
[1, 1, 1, 1]
])

用这个效果很好。但我仍然不确定,内部发生了什么导致了溢出错误。

关于python - 当我尝试将值迭代算法与 mdptoolbox 一起使用时出现 OverflowError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53411530/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com