这是对跳棋游戏Q-Learning实现的正确方法吗?

我正在尝试理解Q-Learning


我当前的算法运行如下:

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

2. 在每个状态下,检查该状态是否包含在查找表中,如果没有则进行初始化(默认效用值为0)。

3. 选择执行一个动作的概率如下:

    (*ϵ* = 0>ϵ>1 - 执行随机动作的概率)    1-ϵ = 选择效用最高的状态-动作对。    ϵ = 选择一个随机移动。    ϵ 随时间减少。

4. 根据以下公式更新当前状态的效用:

    Q(st, at) += a[rt+1, + d.max(Q(st+1, a)) - Q(st,at)]

我目前让我的智能体与一个简单的启发式玩家对战,后者总是选择能带来最佳即时奖励的移动。

结果 – 结果非常差,即使在几百场比赛之后,Q-Learning智能体输的次数远多于赢的次数。此外,胜率的变化几乎不存在,尤其是在达到几百场比赛之后。

我是不是遗漏了什么?我已经实现了几个智能体:

(机械学习,TD(0),TD(Lambda),Q-Learning)

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

enter image description here


回答:

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

此外,还有一些需要注意的地方:

  • 理想情况下,你应该每场游戏更新一个值,因为单场游戏中的移动高度相关。
  • 你应该将动作值初始化为小的随机值,以避免小的Q值更新导致大的策略变化。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注