machine-learning - 这是跳棋 Q-Learning 的正确实现吗?

标签 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 代理的输球远多于胜出。此外,胜率的变化几乎不存在,尤其是在达到几百场比赛之后。

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

(死记硬背、TD(0)、TD(Lambda)、Q-Learning)

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

enter image description here

最佳答案

跳棋中有大约 10²⁰ 种不同的状态,每次更新你都需要玩一整盘游戏,所以你需要花费非常非常长的时间才能通过这种方式获得有意义的 Action 值。一般来说,您需要一个简化的状态表示(例如神经网络)来使用强化学习解决此类问题。

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

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

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

相关文章:

maven - 向 Team Services 构建代理添加 maven 功能

algorithm - K均值中如何选取簇质心个数

python - 哪些特征可以帮助对句尾进行分类?序列分类

python - 如何修改 tf.nn.embedding_lookup() 的返回张量?

java - 查找整数的最小 "factorization"到平方数

java - JADE 代理与 WSIG 集成

TensorFlow:多 GPU 配置(性能)

recursion - 如何使用柏林噪声或其他算法点对点 "bolt"的闪电?

java - 令人困惑的伪代码示例

ios - PerformSegueWithIdentifier 不起作用