我已经使用 python 实现了 VI(值迭代)、PI(策略迭代)和 QLearning 算法。比较结果后,我注意到了一些东西。VI 和 PI 算法收敛到相同的实用程序和策略。使用相同的参数,QLearning 算法收敛到不同的实用程序,但与 VI 和 PI 算法的策略相同。这是正常的吗?我阅读了很多关于 MDP 和 RL 的论文和书籍,但找不到任何东西可以说明 VI-PI 算法的实用程序是否应该与 QLearning 收敛到相同的实用程序。
以下信息是关于我的网格世界和结果的。
我的网格世界
- 状态=> {s0, s1, ... , s10}
- 动作 => {a0, a1, a2, a3}其中:a0 = 上,a1 = 右,a2 = 下,a3 = 左,适用于所有状态
- 有 4 个终结状态,分别有+1、+1、-10、+10奖励。
- 初始状态为s6
- 一个动作的转移概率是P,并且(1 - p) / 2移动到该动作的左侧或右侧。(例如:如果 P = 0.8,当智能体尝试向上移动时,智能体有 80% 的机会向上移动,并且有 10% 的机会向右移动,10% 向左移动。)
结果
- VI 和 PI 算法结果,奖励 = -0.02,折扣因子 = 0.8,概率 = 0.8
- VI在50次迭代后收敛,PI在3次迭代后收敛
- QLearning 算法结果,奖励 = -0.02,折扣因子 = 0.8,学习率 = 0.1,Epsilon(用于探索)= 0.1
- QLearning 结果图像上的结果效用是每个状态的最大 Q(s, a) 对。
qLearning_1million_10million_iterations_results.png
此外,我还注意到,当 QLearning 进行 100 万次迭代时,距离 +10 奖励终端同样远的状态具有相同的效用。代理似乎并不关心它是否从接近 -10 终端的路径获得奖励,而代理在 VI 和 PI 算法上关心它。这是因为在 QLearning 中,我们不知道环境的转移概率吗?