2

我正在尝试了解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)

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

在此处输入图像描述

4

1 回答 1

1

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

另外,有几点需要注意:

  • 理想情况下,您应该每局更新 1 个值,因为单个游戏中的移动是高度相关的。
  • 您应该将操作值初始化为小的随机值,以避免小 Q 更新导致大的策略更改。
于 2016-04-24T12:45:01.057 回答