教一个神经网络玩纸牌游戏


10

我目前正在编写一个玩纸牌游戏的引擎,因为此特定游戏还没有引擎。

我希望以后能够将神经网络引入游戏中,并让它学会玩游戏。

我正在以对AI播放器有用的方式编写引擎。有选择点,并在这些点上显示有效选项的列表。随机选择将能够玩游戏(尽管效果不佳)。

我已经学习了很多有关神经网络(主要是NEAT和HyperNEAT)的知识,甚至建立了自己的实现。我仍然不确定如何最好地构建可以考虑这些类型游戏之一中所有变量的AI。有没有通用的方法?我知道Keldon为RftG编写了很好的AI,它具有相当高的复杂性,我不确定他如何设法建立这样的AI。

有什么建议吗?可行吗 有什么好的例子吗?输入如何映射?

编辑:我在网上看了一下,了解了神经网络如何工作,通常它们与图像识别或操纵简单代理有关。我不确定是否或如何将其应用于具有复杂协同作用的卡片进行选择。朝我应该研究的方向发展将不胜感激。

关于游戏:游戏类似于《魔术:聚会》。有一个具有健康和能力的指挥官。玩家拥有一个能量池,可用来将小兵和咒语放在棋盘上。仆从具有生命值,攻击值,费用等。纸牌也具有能力,这些能力不易枚举。纸牌是从手中开始的,新的纸牌是从牌组中抽出的。这些都是神经网络考虑的方面。


嘿,欢迎来到AI.SE!从目前的情况来看,我们似乎无法回答这个问题。您认为可以对其进行编辑以将其范围缩小一点吗?谢谢!
神话

尽管问题很广泛,但对于该领域的新手来说,这是一个显而易见且普遍的问题。也是使用Google很难找到答案的地方(因为大多数有关NN的教程似乎都集中在图像识别和语言示例上)。我认为应该得到一个答案,它指向有关使用NN进行游戏的方法和技术的良好资源的答案,在这种情况下,尤其是在纸牌游戏中。
user12889

感谢您的反馈。我已经编辑了我的问题。学习材料的任何方向都将有所帮助。正如您所提到的,我发现大部分图像识别。我渴望学习,很高兴能获得大量推荐读物,而不仅仅是一个简单的答案。
pcaston2

Answers:


3

我认为您提出了一个很好的问题,尤其是WRT,即如何将NN的输入和输出映射到MtG之类的纸牌游戏的机制中,其中可用动作会随上下文而变化很大。

我没有一个令人满意的答案,但是我玩过Keldon's Race for基于银河NN的AI-认为它很棒-并研究了如何解决这个问题。

现在可以在github上搜索和浏览Keldon AI的最新代码。

AI代码位于一个文件中。它使用2个不同的NN,一个用于“评估手牌和活动卡”,另一个用于“预测角色选择”。

您会注意到,它在非NN代码上使用了大量的代码来模拟游戏机制。非常混合的解决方案。

游戏状态进入评估NN的映射完成这里。一键编码各种相关功能,例如转弯时可以出售的商品数量。


Deepmind与暴雪娱乐(Blizzard Entertainment)合作创建的Starcraft II学习环境是将复杂游戏映射到NN的另一个出色案例研究。该给出了如何星际争霸的游戏被映射到一组一个NN可以解释,以及如何操作可以通过NN代理游戏模拟发行功能的概述。


2

这是完全可行的,但是输入的映射方式将在很大程度上取决于纸牌游戏的类型及其玩法。

我将考虑以下几种可能性:

  1. 时间在这个游戏中重要吗?过去的举动会影响未来的举动吗?在这种情况下,最好使用递归神经网络(LSTM,GRU等)。
  2. 您希望神经网络从您收集的数据中学习还是自己学习?如果靠自己,怎么办?如果您收集自己玩游戏数十或数百次的数据,将其输入神经网络,并向您学习,那么您正在做的是“行为克隆”。但是,如果您希望NN自己学习,则可以通过以下两种方式进行:

    a)强化学习 -RL允许神经网络通过与自己对抗很多次来学习。

    b)NEAT /遗传算法 -NEAT允许神经网络通过使用遗传算法学习。

但是,同样,为了更具体地说明应如何编码神经网络的输入和输出,我必须对纸牌游戏本身有更多的了解。


您好,谢谢您的回答!我将研究这些领域,以了解适用情况。我添加了对游戏的简短描述,希望对您有所帮助。我的引擎支持撤消,因此与NN结合使用可能会很有用。由于引擎尚未完成,因此我没有样本集,但计划将托管服务器中的所有游戏历史记录保留在2位玩家之间。我当时正在考虑使用反向传播来加速该过程。
pcaston2

如果游戏状态很重要,但与您如何达到该状态无关,那么您会说时间很重要吗?您能举例说明时间很重要而时间无关紧要的游戏吗?此刻,我只能想到当前状态很重要的情况(轮到谁,什么牌子或游戏已知的零件在哪里),而您如何到达那里(唯一重要的是它们现在的位置,而不是它们的位置)是两个回合之前)
Simon Forsberg

2

您肯定希望您的网络知道有关游戏的重要信息,例如AI代理拥有的牌(它们的值和类型),法力池,桌上有多少张牌及其值,回合次数等等。您必须自己弄清楚这些事情,您应该问自己的问题是“如果我添加此值来输入如何以及为什么它将改善我的系统”。但是首先要了解的是,大多数NN的输入大小都是固定的,我认为这在游戏中很重要,因为玩家手中或桌子上可以有不同数量的卡。例如,您想让NN知道它拥有哪些牌,假设玩家手中最多可以有5张牌,并且每张牌可以具有3个值(法力,攻击和生命值),因此可以将其编码为5 * 3向量 其中前三个值代表第一张卡,依此类推。但是如果玩家当前拥有3张牌怎么办,一种简单的方法就是将0分配给最后6个输入,但这可能会引起问题,因为某些牌的法力消耗为0或攻击为0。因此,您需要弄清楚如何解决此问题。您可能会寻找可以处理可变输入大小的NN模型,或者弄清楚如何将输入编码为恒定大小的向量。

其次,输出也是恒定大小的向量。在这种类型的游戏中,它可以是对代理可以采取的行动进行编码的向量。假设我们有3个动作:放一张卡片,跳过转身并让步。因此它可以是一个热编码器,例如,如果您有1 0 0输出,则意味着代理应放置一些卡。要知道应该放入哪张牌,您可以在输出中添加另一个元素,该元素将产生一个介于1到5之间的数字(5是最大手牌数量)。

但是,训练神经网络最重要的部分是您必须提出适合您任务的损失函数。也许标准损失函数(例如均方损失或L2)会很好,也许您需要更改它们才能满足您的需求。这是您需要进行研究的部分。我以前从未使用过NEAT,但据我所知,它使用某种遗传算法来创建和训练NN,GA使用某些适应度函数来选择一个人。因此,基本上,您将需要知道要使用什么度量来评估模型的性能,并根据该度量来更改模型的参数。

PS。用神经网络可以解决这个问题,但是,神经网络不是魔术,也不是所有问题的通用解决方案。如果您的目标是解决这个问题,我也建议您深入研究博弈论及其在AI中的应用。我想说,解决这个问题需要来自AI不同领域的复杂知识。

但是,如果您的目标是学习神经网络,我建议您执行简单得多的任务。例如,您可以实现将对基准数据集起作用的NN,例如,将MNIST数据集中的数字进行分类的NN。这样做的原因是,撰写了许多有关如何对该数据集进行分类的文章,您将学到很多东西,并且从实现简单的事情中学到的东西会更快。


1

是。这是可行的。

问题概述

通过将一个或多个人工网络与纸牌游戏引擎结合使用,该系统的设计目标似乎已获得了制胜的战略优势。

该问题显示了对游戏基础的普遍认识,正如Morgenstern和von Neuman的博弈论所述

  • 在游戏进行期间的特定时间点,可能需要玩家执行移动。
  • 根据游戏规则,有一组最终的移动选项。
  • 与其他策略相比,某些选择举动的策略在多个游戏中产生更高的获胜记录。
  • 可以使用人工网络来产生比随机移动选择更为频繁地获胜的游戏策略。

游戏玩法的其他功能可能会也可能不会那么明显。

  • 在每个移动点都有一个游戏状态,任何参与提高游戏成功度的组件都需要该状态。
  • 除了不知道对手什么时候虚张声势之外,在纸牌游戏中,改组纸牌的秘密顺序可以引入虚拟玩家的等价物,其移动近似随机。
  • 在三个或更多的玩家游戏中,合作伙伴或潜在合作伙伴的信号可以在任何时候为确定获胜游戏策略增加复杂性。根据编辑,它似乎不会像这款游戏那样复杂。
  • 诸如恐吓之类的心理因素也可以在赢得游戏中发挥作用。引擎是否向对手展示面孔是未知的,因此此答案将跳过该答案。

常用方法提示

有一种映射输入和输出的通用方法,但是在Stack Exchange答案中有太多要解释的内容。这些只是一些基本原则。

  • 应该可以进行所有可以明确完成的建模。例如,尽管人工网络理论上可以学习如何对卡进行计数(跟踪每个卡的可能位置),但是可以使用简单的计数算法来实现,因此请使用已知算法,并将这些结果作为输入。
  • 将与最佳输出相关的任何信息用作输入,但不要将与最佳输出不相关的任何信息用作输入。
  • 在训练过程中和自动游戏过程中,对数据进行编码以减少输入向量中的冗余。抽象和概括是实现此目的的两种常用方法。特征提取可以用作抽象或概括的工具。这可以在输入和输出上完成。一个例子是,如果在此游戏中J> 10的方式与A> K,K> Q,Q> J和10> 9的方式相同,则将纸牌编码为2到14或0到12的整数减一。将西装编码为0到3,而不是四个文本字符串。

图像识别工作只是远程相关,与纸牌游戏有很大不同,无法直接使用,除非您需要从视觉图像中识别纸牌,在这种情况下,可能需要LSTM来查看其他玩家为移动选择的内容。学习获胜策略很可能会受益于MLP或RNN设计或其衍生的人工网络设计之一。

人工网络将要做什么以及培训示例

这些类型的人工网络的主要作用是从示例数据中学习功能。如果您具有真实游戏的移动顺序,那么这对于您的项目来说是一笔巨大的财富。其中很大一部分将对培训非常有帮助。

如何安排示例以及是否以及如何对示例进行标记是值得考虑的,但是,如果没有纸牌游戏规则,很难给出任何可靠的方向。是否有合作伙伴,是否基于得分,胜利的举动次数以及其他十二个因素提供了做出这些决策所需的场景参数。

学习了

我可以提供的主要建议是,阅读而不是阅读网络上的常规文章,而是阅读一些您可以了解上述主题的书籍和一些论文。然后找到一些可以下载的代码,并在充分理解术语后尝试尝试下载什么。

这意味着书本搜索和学术搜索比一般的网络搜索更有可能将您引向正确的方向。在一般的网络空间中,有成千上万的装腔作势者,解释了带有大量错误的AI原理。书籍和学术文章出版商对作者的尽职调查要求更高。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.