我正在尝试了解Q-Learning,
<小时/>我当前的算法运行如下:
1.维护一个查找表,将状态映射到有关其即时奖励和每个可用操作的效用的信息。
2.在每个状态下,检查它是否包含在查找表中,如果不包含则初始化它(默认效用为0)。
3.选择要采取的操作,概率为:
(*ϵ* = 0>ϵ>1 - probability of taking a random action)
1-ϵ = Choosing the state-action pair with the highest utility.
ϵ = Choosing a random move.
ϵ decreases over time.
4.根据以下内容更新当前状态的实用程序:
Q(st, at) += a[rt+1, + d.max(Q(st+1, a)) - Q(st,at)]
<小时/>
我目前正在与我的代理对抗一个简单的启发式玩家,他总是采取能够给它最好的立即奖励的举动。
结果 - 结果非常差,即使在几百场比赛之后,Q-Learning 代理的输球远多于胜出。此外,胜率的变化几乎不存在,尤其是在达到几百场比赛之后。
我错过了什么吗?我已经实现了几个代理:
(死记硬背、TD(0)、TD(Lambda)、Q-Learning)
但它们似乎都产生了相似的、令人失望的结果。
最佳答案
跳棋中有大约 10²⁰ 种不同的状态,每次更新你都需要玩一整盘游戏,所以你需要花费非常非常长的时间才能通过这种方式获得有意义的 Action 值。一般来说,您需要一个简化的状态表示(例如神经网络)来使用强化学习解决此类问题。
此外,还有一些注意事项:
- 理想情况下,您应该每场比赛更新 1 个值,因为单场比赛中的 Action 高度相关。
- 您应该将操作值初始化为较小的随机值,以避免因较小的 Q 更新而导致较大的策略更改。
关于machine-learning - 这是跳棋 Q-Learning 的正确实现吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36822951/