在纸牌游戏中,有 2 名玩家,每人发 5 张牌(标准 52 张牌),之后通过某个任意函数决定获胜玩家。目标是根据每位玩家持有的 5 张牌来预测游戏结果。训练数据可能如下所示:
Player A Player B Winner
AsKs5d3h2d JcJd8d7h6s 1
7h5d8s9sTh 2c3c4cAhAs 0
6d6s6h6cQd AsKsQsJsTs 0
其中“玩家”列是 5 张牌,当玩家 A 获胜时,“获胜者”列为 1
,当玩家 A 输时,“Winner”列为 0
。
对手的顺序应该漠不关心,这样在训练之后,向网络提供镜像输入数据,例如:
Player A Player B
2d3d6h7s9s TsTdJsQc3h
和
Player A Player B
TsTdJsQc3h 2d3d6h7s9s
总是预测相反的结果。
它也应该与手中牌本身的顺序无关,例如 AsKsQsJsTs
与 JsTsAsKsQs
相同,而 JsTsAsKsQs
与 相同JsQsTsAsKs
等
构建神经网络及其训练数据来解决此类问题有哪些合理的方法?
最佳答案
您将需要一个具有 104 个输入的网络(玩家 * 卡牌数量) 前 52 个输入对应于玩家 A,接下来的 52 个输入对应于玩家 B。 将所有输入初始化为 0,然后对于每个玩家拥有的每张卡,将相应的输入设置为 1。
对于输出层,通常有两种二元分类选项。你可以有一个输出神经元,如果该神经元的输出大于某一阈值,则玩家 A 获胜,否则玩家 B 获胜。或者你可以有两个输出神经元,然后看看哪一个产生最高的输出。两者通常都能正常工作。
对于训练数据,您需要一种单热编码,而不是“AsKs5d3h2d”之类的内容,例如“0001000001000000100100000100000000011001000000001001”(假设有104个数字,其中10个是1,其余的是0)并用于输出你只需要一个 1 或 0 对应谁获胜的数据(在有一个输出神经元的情况下)
这将使您的网络对牌的顺序保持不变(给定手牌的所有可能顺序将创建相同的输入)并且至于交换玩家 A 和 B 的手并获得相反的结果,这是应该发生的事情自然地适合任何训练有素的网络。
关于machine-learning - 训练神经网络来预测纸牌游戏的获胜者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35421356/