machine-learning - 训练神经网络来预测纸牌游戏的获胜者

标签 machine-learning neural-network poker

在纸牌游戏中,有 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

总是预测相反的结果。

它也应该与手中牌本身的顺序无关,例如 AsKsQsJsTsJsTsAsKsQs 相同,而 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/

相关文章:

PHP 获取扑克的所有独特棋盘结果

algorithm - 2个神经元的多层神经网络是否与1个神经元相同

machine-learning - 无法使用神经网络近似正弦函数

Python NTL - 识别文本兴趣/主题

numpy - 神经网络不良结果

tensorflow - 使用 Tensorflow 训练神经网络时避免过度拟合

java - 基本扑克程序 - 打印牌组

c - 如何从开源包中检索一般信息,关注 poker-eval 库

python - Tensorflow:tf.case 参数化可调用,案例列表在 for 循环中定义

python - 是否有一些方法可以知道 XGBoost 树适合哪个数据子样本?