如何训练ANN玩纸牌游戏?

vrw*_*wim 5 neural-network

我想教一个ANN来玩Hearts,但我仍然坚持如何实际进行训练.

一位朋友建议使用weka来实现实际的ANN,但我从未使用它,所以我倾向于自定义实现.

我编写了规则,我可以让电脑玩游戏,每回合选择随机但合法的卡片.

现在我不知道将什么发送到人工神经网络作为输入以及如何提取输出(每回合减少卡的数量,所以我不能让每个输出神经元成为可能的卡)以及如何教它以及何时进行教学.

我的猜测是将ANN作为输入:

  • 以前玩过的牌,其中有哪个牌手的元数据已经玩过哪张牌
  • 此回合中桌面上的牌也具有相同的元数据
  • 人工神经网络中的卡片

然后输出为13个神经元(每个玩家的最大卡数),其中我采用了最激活的仍然在ANN手中的牌.

我也不知道什么时候教它(每次转弯之后或每场比赛之后),因为拥有所有的罚款卡是有益的,但除了一张罚单之外都不好.

任何和所有的帮助表示赞赏.我真的不知道在哪里提出这个问题.

我目前在Swift中编程,但它只有200行,我知道其他一些语言,所以我可以翻译它.

IVl*_*lad 5

请注意,神经网络可能不是最好的选择.更多关于答案的结尾,我会先回答你的问题.

现在我不知道将什么发送到人工神经网络作为输入以及如何提取输出(每回合减少卡的数量,所以我不能让每个输出神经元成为可能的卡)以及如何教它以及何时进行教学.

ANN需要标记的输入数据.这意味着对(X, y)其中X可任何(结构化)与您问题相关的数据,并y您所期望的ANN学习为X正确答案的列表.

例如,想想你将如何在学校学习数学.老师会在黑板上做几个练习,你会把它们写下来.这是您的训练数据.

然后,老师会邀请你到黑板上自己做一个.一开始你可能做得不好,但他/她会引导你朝着正确的方向前进.这是培训部分.

然后,你必须自己做问题,希望能够学会如何.

问题是,即使这个简单的例子对于ANN来说也太复杂了.ANN通常采用实值数字并输出一个或多个实数值.所以它实际上比学习ax + b = 0类型方程的小学生更笨.

对于您的特定问题,很难看出它是如何适合这种格式的.总的来说,它不是:你不能用人工神经网络呈现游戏并让它学习移动,这太复杂了.您需要使用与您相关联的正确数字标签的内容来呈现它,并且您希望ANN学习基础模式.

为此,您应该将问题分解为子问题.例如,输入当前玩家的牌并期望输出正确的移动.

以前玩过的牌,其中有哪个牌手的元数据已经玩过哪张牌

人工神经网络应该只关心当前的玩家.我不会使用元数据或任何其他识别玩家的信息.

给它一个历史可能会变得复杂.您可能需要循环神经网络.

此回合中桌面上的牌也具有相同的元数据

是的,但同样,我不会使用元数据.

人工神经网络中的卡片

也不错.

确保您输入的单位数量与要输入的最大卡数一样多(2张可能的卡,用于手中的卡和桌上的卡).这将是一个二进制向量,i如果对应于该位置的卡存在于手中/桌面上,则该位置为真.

然后对移动做同样的事情:你将拥有m二进制输出单位,i如果人工神经网络认为你应该移动i,那么这将是真的m,总共有可能的移动(如果m取决于游戏中的阶段,则选择最大值).

您的训练数据也必须采用这种格式.为简单起见,假设在总共5张牌中最多可以有2张牌和2张牌,我们可以选择2张牌(比如弃牌和全押牌).然后一个可能的训练实例是:

Xi = 1 0 0 1 0 0 0 0 1 1 (meaning cards 1 and 4 in hand, cards 4 and 5 on table) 
yi = 0 1 (meaning you should go all in in this case)
Run Code Online (Sandbox Code Playgroud)

我也不知道什么时候教它(每次转弯之后或每场比赛之后),因为拥有所有的罚款卡是有益的,但除了一张罚单之外都不好.

您应该以我描述的格式收集大量标记的训练数据,对其进行训练,然后使用它.你需要成千上万甚至上万的游戏才能看到出色的表现.每次转弯或比赛后教学都不太可能.

这将导致非常大的神经网络.您可能尝试的另一件事是预测在当前游戏配置下谁将获胜.这将显着减少输出单元的数量,使学习更容易.例如,鉴于当前桌面和手中的牌,当前玩家获胜的概率是多少?有了足够的训练数据,神经网络就可以尝试学习这些概率.

存在明显的缺点:需要大量的训练数据集.到目前为止,没有记忆游戏如何发展(除非你使用更先进的网络).

对于像这样的游戏,我建议你阅读有关强化学习或特定游戏的专用算法.例如,教导人工智能国际象棋没有多少运气,我怀疑你会教它玩纸牌游戏.


Yur*_*kyy 0

首先,您需要创建一些好的学习数据集来训练 ANN。如果您的预算允许,您可以请一些纸牌专业人士与您分享足够多的比赛以及他们如何打牌。另一种生成数据的方式可能是一些打牌的机器人。然后你需要考虑如何将比赛数据集表示为神经网络。另外,我建议您不要用卡片的值(0.2、0.3、0.4、...、0.10、0.11(对于杰克)来表示卡片,而是将其作为单独的输入来表示。还要寻找可用于此类任务的弹性神经网络。