我正在玩pymdptoolbox。它具有内在的森林管理问题。通过为林函数指定状态值(默认值为3),可以生成过渡矩阵P
和R
。 Q-Learning
,PolicyIteration
和ValueIteration
的实现可以找到最佳策略很简单。但是,通过将状态更改为大于4(从5开始)的值来创建一个稍微复杂的问题,只有PI
和VI
返回相同的策略,而QL
无法找到最佳政策。这是非常令人惊讶和困惑的。谁能帮助我了解为什么此软件包中的QL
为何如此?
通过查看QL
的原始代码(使用epsilon-greedy),似乎将概率与迭代次数(即prob = 1 - (1/log(n+2))
)联系在一起,学习率是(1/math.sqrt(n+2)
) 。是否有任何特定的原因将概率/学习率与迭代次数联系在一起,而不是使它们成为独立变量(尽管代码本身可以轻松修改)。
我认为我最大的困惑是要了解为什么QL
找不到解决问题的政策。谢谢。
from mdptoolbox.mdp import ValueIteration, QLearning, PolicyIteration
from mdptoolbox.example import forest
Gamma = 0.99
states = [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 20, 30, 50, 70, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000]
compare_VI_QI_policy = [] # True or False
compare_VI_PI_policy = []
for state in states:
P, R = forest(state)
VI = ValueIteration(P, R, Gamma)
PI = PolicyIteration(P, R, Gamma)
QL = QLearning(P, R, Gamma)
## run VI
VI.run()
# run PI
PI.run()
# run QL
QL.run()
compare_VI_QI_policy.append(QL.policy == VI.policy)
compare_VI_PI_policy.append(VI.policy == PI.policy)
print compare_VI_QI_policy
print compare_VI_PI_policy