在卡片和动作数量可变的情况下,如何表示纸牌游戏的状态和动作空间?

人工智能 强化学习 游戏-ai 深度学习 参考请求 马尔可夫决策过程
2021-11-11 23:58:13

我知道机器如何学习玩 Atari 游戏(Breakout):Playing Atari with Reinforcement Learning使用同样的技术,甚至可以玩 FPS 游戏(Doom):Playing FPS Games with Reinforcement Learning进一步的研究甚至调查了多智能体场景(Pong):深度强化学习的多智能体合作与竞争

在深度强化学习的背景下,对于感兴趣的用户,甚至还有另一篇很棒的文章(简单且初学者必读):Demystifying Deep Reinforcement Learning

我对这些结果感到兴奋,并立即想在一些简单的“棋盘/纸牌游戏场景”中尝试它们,即为一些简单的游戏编写 AI 以了解更多关于“深度学习”的知识。当然,认为我可以在我的场景中轻松应用上述技术是愚蠢的。以上所有示例均基于卷积网络(图像识别)和其他一些假设,可能不适用于我的场景。

我有两个主要问题。

  1. 如果你有一个纸牌游戏并且 AI 应该从它的手上打出一张牌,你可以将这些牌(以及其他东西)视为当前的游戏状态。您可以轻松定义某种神经网络并将卡片数据提供给它。在一个微不足道的情况下,卡片只是编号。我不知道适合的网络类型,但我想深度强化学习策略可以很容易地应用。

    但是,如果手牌数量不变,我只能想象这一点。在上述示例中,例如,像素的数量也是恒定的。如果玩家可以拥有不同数量的牌怎么办?如果玩家可以拥有无​​限数量的牌,该怎么办?当然,这只是一个理论问题,因为没有游戏有无限数量的牌。

  2. 在最初的例子中,动作空间是恒定的。如果行动空间不是,你能做什么?这或多或少源于我之前的问题。如果你有 3 张牌,你可以打牌 1、2 或 3。如果你有 5 张牌,你可以打牌 1、2、3、4 或 5 等。这在纸牌游戏中也很常见,即不允许打牌。可以用负奖励来解决这个问题吗?

那么,可以使用哪些“技巧”,例如始终假设具有“填充值”的卡片数量恒定,这仅适用于非无限情况(无论如何都不现实,甚至人类也无法很好地玩)?是否有文章已经研究过这些事情?

3个回答

除了让 AI 学习要采取的行动之外,您还可以训练它来判断一个位置的“好”程度。为了确定要采取什么行动,你不要问人工智能“这是当前状态,我应该采取什么行动”,而是遍历所有可能的行动,并将结果状态输入人工智能询问“有多好你认为这个新状态是什么?”。然后,您选择了具有 AI 最喜欢的结果状态的移动。(或者你甚至可以将它与传统的 MinMax 方法结合起来)我自己是这个领域的新手,但我猜你会在动作空间很大时使用这种方法,特别是当大多数可能的动作不是大多数州的法律选择。

  1. 填充值完全没问题。在图像识别的情况下,填充将是图像的背景(示例)。例如,在 Belot 中,您总共有 32 张卡片,可以是 32 个布尔特征。您可以将玩家拥有的那些设置为 1,而其余的设置为 0。请注意,在大多数游戏中,您需要的功能比手牌更多。即回合数,到目前为止已经玩过的牌,已经打过的电话等。
  2. 定义“动作空间”的范围将特定于游戏。对于 Belot,它可以对 32 张卡片中的每一张进行数字编码。

您可以通过 Google 查找文章。是一篇关于纸牌游戏机器学习的论文。我建议不要查看文章,而是查看有关 ML 的课程(即 Coursera 和 Udacity 有很好的免费在线课程)。

考虑到您的用例,我不会使用深度学习方法……有什么意义?

优秀的 AI 不仅能赢,而且玩起来很有趣。在实践中,当微调游戏机制时,您需要分析游戏中的搅动事件。如果你能向 AI 展示“嘿,这搞砸了,当这种情况发生时,你能想出一个好的游戏方式吗?”那就太好了。然后 AI 会说“好吧,当然,我不知道,我一直在赢不是人类认为有趣的东西……下次我会更有趣,同时也要努力赢”。

最近我一直在玩计算创造力,特别是偏序因果链接规划器 (POCL) 和代理。

POCL 试图制定计划以实现目标;这使得它们在计算上很有效,因为它们只需要满足目标中的缺陷(在桌上有最好的牌)并迭代到初始条件(桌上的特定牌和手上的一些牌等)。我相信,使用冲突驱动的 POCL,您可以轻松引入虚张声势。我以声明的方式编写了 POCL 算法,因此您不必对动作空间进行编码,而是使用模态逻辑对其进行配置。

然后您将拥有代理,他们将使用 POCL 算法生成的计划工件以便以有趣的方式进行游戏(代理的评估功能),同时还试图获胜(寻找获胜的最佳赔率)。代理的有趣之处在于,您可以轻松地组合它们并发现个性;我不知道深度学习方法如何轻松提供。

因此,通过使用 POCL 和代理,您可以首先通过使用一些启发式系统(就像您在使用强化学习时所做的那样)来教代理如何有效地获胜或优化计划以提供良好的“基本动作”。我不知道特定游戏的计算复杂性问题;然而,已经实现了这样的 POCL 算法,它们是上下文感知的(= 减少动作空间),所以如果你添加更多战略游戏抽象,POCL 应该没问题(记住使用某种阻尼因子来减少路径长度计划,以类似于 PageRank 的方式)。

在所有编程中,一个好的心智模型将使许多事情变得容易得多。通过深度学习,您将使用图像识别或类似的算法/方法来解决不同的问题,因为没有人会阻止您使用错误的工具来解决手头的问题。在真实游戏中,有玩家(Agents)、策略(POCL 计划)、虚张声势(POCL 冲突)和规则(由模态逻辑定义的 POCL 的动作空间)。当然,有些游戏可能存在计算复杂性问题;然而,通常这些可以通过对算法进行轻微优化来解决,这提供了一个很好的问题心理模型。