这是 Q-Learning for Checkers 的正确实施吗?

Is this a correct implementation of Q-Learning for Checkers?

我正在尝试理解 Q-Learning,


我目前的算法运行如下:

1. 维护一个查找 table,将状态映射到有关其即时奖励和每个可用操作的效用的信息。

2. 在每个状态下,检查它是否包含在查找中 table,如果不包含则初始化它(默认实用程序为 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 智能体也在输掉 更多[=50= 】 比是赢。此外,胜率的变化几乎不存在,尤其是在达到几百场比赛之后。

我错过了什么吗?我实施了几个代理:

(死记硬背,TD(0),TD(Lambda),Q-学习)

但它们似乎都产生了相似的结果,令人失望

西洋跳棋有大约 10²⁰ 种不同的状态,每次更新都需要玩一局完整的游戏,所以要用这种方式获得有意义的动作值需要非常非常长的时间。通常,您需要一个简化的状态表示,例如神经网络,以使用强化学习来解决此类问题。

此外,还有一些注意事项:

  • 理想情况下,您应该每局更新 1 个值,因为单局棋的走法是高度相关的。
  • 您应该将动作值初始化为小的随机值,以避免小的 Q 更新导致大的策略变化。