我想了解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)

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

machine-learning - 这是Q-Learning for Checkers的正确实现吗?-LMLPHP

最佳答案

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

另外,有几点警告:


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

关于machine-learning - 这是Q-Learning for Checkers的正确实现吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36822951/

10-08 21:58