在一个制作的纸牌游戏中,有2个玩家,每个玩家获得5张牌(标准52张牌),之后一些任意功能决定一个获胜玩家。考虑到每个玩家持有的5张牌,目标是预测游戏的结果。训练数据可能如下所示:
Player A Player B Winner
AsKs5d3h2d JcJd8d7h6s 1
7h5d8s9sTh 2c3c4cAhAs 0
6d6s6h6cQd AsKsQsJsTs 0
“玩家”栏数为5张牌,牌手A获胜时“获胜者”列为1
,玩家A失败时为0
。
应该对手的顺序漠不关心,以便在训练之后,为网络提供镜像输入数据,如:
Player A Player B
2d3d6h7s9s TsTdJsQc3h
和
Player A Player B
TsTdJsQc3h 2d3d6h7s9s
总会预测相反的结果。
对于牌本身内牌的顺序也应该无动于衷,因此AsKsQsJsTs
与JsTsAsKsQs
相同,与JsQsTsAsKs
等相同。
构建神经网络及其训练数据以解决此类问题有哪些合理的方法?
答案 0 :(得分:1)
你需要一个有104个输入的网络(玩家*卡数) 前52个输入对应于玩家A,接下来的52个对应于玩家B. 将所有输入初始化为0,然后对于每个玩家拥有的每张卡,将相应的输入设置为1.
对于输出层,通常有两种二元分类选项。您可以拥有一个输出神经元,如果此神经元的输出大于某个阈值,则玩家A获胜,否则玩家B获胜。或者你可以有两个输出神经元,只看看哪一个产生最高输出。两者一般都很好。
对于训练数据,而不是像“AsKs5d3h2d”这样的东西,你需要一个热门编码,比如“0001000001000000100100000100000000011001000000001001”(假装有104个数字,其中10个是1,剩下的是0)和输出数据你只需要1或0对应谁赢了(在有一个输出神经元的情况下)
这将使您的网络对卡的顺序不变(给定手的所有可能的命令将创建相同的输入)并且对于交换玩家A和B的手并获得相反的结果,这应该是对任何训练有素的网络来说都很自然。
答案 1 :(得分:0)
首先,在继续解决此问题之前,您应该了解神经网络(NN)的使用。 NN试图找出输入和输出之间的复杂关系。 (这里你的输入是五张卡,输出是预测类)。
在这个问题中,可以很容易地制定输入和输出之间的关系。即你可以轻松选择一套宣布最终获胜者的规则。
仍然像其他任何问题一样,这个问题也可以用NN处理。首先,您需要准备数据。
总共有52种输入可能。因此,在数据集中取52列。现在在这52列中,您可以填写三种类型的分类数据。它属于'A'或'B'或没有身体。 'C'和输出可以成为赢家。
现在您可以使用NN进行训练。