这是否是Checkers Q-Learning的正确实现?

时间:2016-04-24 12:14:30

标签: machine-learning pseudocode agent reinforcement-learning q-learning

我想了解 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代理正在失去比获胜更多。此外,胜率的变化几乎不存在,特别是在达到几百场比赛之后。

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

(Rote-Learning,TD(0),TD(Lambda),Q-Learning)

但他们似乎都在产生类似的,令人失望的结果。

enter image description here

1 个答案:

答案 0 :(得分:1)

在跳棋中有大约10²个不同的状态,你需要为每次更新玩一整场游戏,所以在你以这种方式获得有意义的动作值之前,这将是非常非常长的时间。通常,您需要一个简化的状态表示,如神经网络,使用强化学习来解决这类问题。

另外,有几点需要注意:

  • 理想情况下,您应该为每场比赛更新1个值,因为单个游戏中的移动高度相关。
  • 您应该将操作值初始化为较小的随机值,以避免小Q更新的大量策略更改。