Neural network 如何训练安玩纸牌游戏?

Neural network 如何训练安玩纸牌游戏?,neural-network,Neural Network,我想教安玩,但我被困在如何实际执行训练 一位朋友建议将其用于实际ANN的实现,但我从未使用过它,因此我倾向于自定义实现 我已经编好了规则,我可以让电脑玩游戏,每回合随机选择合法的牌 现在,我不知道将什么作为输入发送给ANN,以及如何提取输出(减少每圈的卡片数量,因此我不能让每个输出神经元成为一张可能的卡片),以及如何进行教学以及何时进行教学 我的猜测是将ANN作为输入: 以前玩过的牌,带有哪个玩家玩过哪张牌的元数据 本回合桌上的卡片也具有相同的元数据 安手中的牌 然后让输出是13个神经元(每

我想教安玩,但我被困在如何实际执行训练

一位朋友建议将其用于实际ANN的实现,但我从未使用过它,因此我倾向于自定义实现

我已经编好了规则,我可以让电脑玩游戏,每回合随机选择合法的牌

现在,我不知道将什么作为输入发送给ANN,以及如何提取输出(减少每圈的卡片数量,因此我不能让每个输出神经元成为一张可能的卡片),以及如何进行教学以及何时进行教学

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

  • 以前玩过的牌,带有哪个玩家玩过哪张牌的元数据
  • 本回合桌上的卡片也具有相同的元数据
  • 安手中的牌
然后让输出是13个神经元(每个玩家的最大牌数),其中我拿的是仍然在ANN手中的最活跃的牌

我也不知道什么时候教它(在每次回合之后或每场比赛之后),因为拥有所有的点球卡是有益的,但拥有除了一张点球卡以外的所有点球卡是不好的

非常感谢您的帮助。我真的不知道该把这个问题放在哪里


我目前用Swift编程,但它只有200行,我还懂一些其他语言,所以我可以翻译它。

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

注意,神经网络可能不是最好的选择。在答案的最后,我将首先回答你的问题

现在,我不知道将什么作为输入发送给ANN,以及如何提取输出(减少每圈的卡片数量,因此我不能让每个输出神经元成为一张可能的卡片),以及如何进行教学以及何时进行教学

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

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

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

然后,你将不得不自己解决问题,希望已经学会如何解决

问题是,即使是这个简单的例子对ANN来说也太复杂了。ANN通常会接受实数并输出一个或多个实数。因此,它实际上比一个学习
ax+b=0
类型方程的小学生要愚蠢得多

对于你的特定问题,很难看出它是如何符合这种格式的。总的来说,它不是这样的:你不能向ANN展示一个游戏并让它学习动作,这太复杂了。你需要向ANN展示一些你有正确数字标签的东西,并且你希望ANN学习基本模式n

要做到这一点,你应该将你的问题分解成子问题。例如,输入当前玩家的牌,并期望输出正确的移动

以前玩过的牌,带有哪个玩家玩过哪张牌的元数据

ANN应该只关心当前的玩家。我不会使用元数据或任何其他识别玩家的信息

给它一个历史记录可能会变得复杂。你可能需要递归神经网络来实现这一点

本回合桌上的卡片也具有相同的元数据

是的,但是再一次,我不会使用元数据

安手中的牌

也很好

确保您有尽可能多的输入单位作为您想要输入的卡的最大数量(手上的卡和表上的卡的总数量为可能的卡的2倍)。这将是一个二进制向量,其中
i
th位置为true,如果与该位置对应的卡存在于手上/表上

然后对移动做同样的操作:你将有
m
二进制输出单位,如果ANN认为你应该移动
i
,那么
i
th将为真,其中总共有
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)
我也不知道什么时候教它(在每次回合之后或每场比赛之后),因为拥有所有的点球卡是有益的,但拥有除了一张点球卡以外的所有点球卡是不好的

你应该以我描述的格式收集大量标记的训练数据,进行训练,然后使用它。你需要数千甚至上万场比赛才能看到良好的表现。在每回合或每场比赛后教授它不太可能取得好成绩

这将导致非常大的神经网络。你可以尝试的另一件事是预测谁将在给定的当前游戏配置中获胜。这将非常重要