如何在可能算牌的情况下进行类似二十一点的纸牌游戏?

人工智能 强化学习 深度学习 q学习 状态空间
2021-11-15 11:45:31

考虑一个单人纸牌游戏,它与“不专业”(不在赌场玩,请参阅第 2 点)有许多共同特征,即:

  • 您正在与有固定规则的庄家对战。
  • 你有一副牌,完全打完。
  • 等等。我的问题不需要对游戏的准确描述,因此我保留这些简单的要点。

尤其是第二点具有重要意义。看到的牌越多,预测下一张牌的几率就越高 - 最后一张牌的概率高达 100%。显然,该规则允许精确利用所述游戏。

动作状态空间而言:动作空间是离散的,玩家只有固定数量的动作(本例为五个——由于缺少对规则的解释,我不再深入这个)。更重要的是状态空间。就我而言,我决定将其结构如下:

一个 2 3 4 5 6 7 8 9 10 Ĵ
4 4 4 4 4 4 4 4 4 14 2

我的状态空间的第一部分描述了留在堆栈中的每张牌的价值,因此在第一次移动时,所有 52 张牌仍然在牌堆中。仅这一部分就允许大约 700 万种可能的变化。

状态空间的第二部分描述了游戏中的各种套牌(同样没有规则,很难详细解释)。基本上是从 0 到 21 的五个整数,具体取决于之前的操作。另一个 200k 不同的情况。

第三部分是两个细节——一些已知的卡片和信息,虽然它们只占很小的因素,但仍然给我的状态空间带来了相当大的变化。

因此,一个完整的状态空间可能看起来像这样:示例一个是 start setup: 444444444142;00000;00游戏中的另一个例子:42431443081;1704520;013. 为了便于阅读,添加了分号。

所以现在出现了一个问题:根据我的理解,我的状态空间肯定是有限且离散的,但太大而无法通过 SARSA、Q-learning、Monte Carlo 或类似方法来解决。我如何在不丢失大量可预测性的情况下处理具有大状态空间的项目(我可能会担心使用 DQN、DDPQ 或 TD3)?特别是由于只使用了一个套牌——而且它在这个游戏中被玩过了——似乎更精确的解决方案是可能的。

1个回答

我如何在不丢失大量可预测性的情况下处理具有大状态空间的项目(我可能会担心使用 DQN、DDPQ 或 TD3)?

您可以通过选择函数逼近器和工程特征的组合来影响这一点,这些特征非常适合预测代理需要产生的价值函数或策略函数。

很难先验地告诉您在这方面需要多少工作。鉴于您有时间玩尽可能多的训练游戏,使用具有硬件加速功能的深度神经网络,那么一种方法是简单地对特征向量进行归一化/缩放,然后进行大量训练。RL 中的这种方法一再展示了新的最先进的结果,例如 AlphaZero、Open AI 的 DoTA 代理等。如果您可以解决问题的计算资源足够大,这似乎可行。正如您所提到的,算牌二十一点是一个已解决的问题,因此在消费类硬件上这样做可能是您力所能及的。

不过,一些智能特征工程可能会有所帮助,因为它可以让代理更容易解决核心问题。由于这是一个爱好项目,你做什么将取决于你想让代理学习什么。你的项目的目的是教代理人如何从头开始算牌吗?鉴于您已告诉代理该州剩余卡片的数量,它似乎并非如此。

下一个问题:您是否需要智能体学习总结所有剩余的牌,以计算在迄今为止未见过的牌中展示每种类型牌的原始概率?这就是您当前的主要状态功能正在做的事情。如果您不需要代理了解这一点,您可以通过使用每张卡被视为特征的概率而不是剩余计数来提供帮助。此功能可能会降低价值和策略功能的复杂性,从而减少计算时间,还可能提高准确性。

对于可以通过分析解决的游戏,您可以直接推导出最优策略,而根本不使用 RL(即,您的 NN 的输入将是正确的动作或动作值!)。那么你的项目的问题是:你希望证明你的代理可以学习什么?或者也许:你想通过将 RL 应用于这个问题来获得什么?