这是对跳棋游戏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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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