在扑克机器人中使用遗传算法训练神经网络是否可行



我正在设计一个机器人,在最多10名玩家的桌子上玩德州扑克,该设计包括一些前馈神经网络(FFNN)。这些神经网络每个都有8到12个输入,2到6个输出,以及1或2个隐藏层,所以我必须优化几百个权重。我通过反向传播进行训练的主要问题是获得足够的训练数据。我在业余时间玩扑克,但不足以独自收集数据。我已经考虑过从一个扑克网站上购买几百万只手牌,但我认为如果我这样做,我的钱包不会对我很满意……所以,我决定通过设计遗传算法来解决这个问题。我见过FFNN被训练使用遗传算法玩《超级马里奥》和《俄罗斯方块》等游戏的例子,但从来没有玩过扑克这样的游戏,所以我想知道这是否是训练我的机器人的可行方法。


首先,让我提供一点背景信息(如果你不熟悉扑克,这可能会让人困惑)。我有一个系统,允许机器人将对手放在特定范围的手上,这样它就可以做出相应的智能决策,但它完全依赖于三个不同神经网络的准确输出:
NN_1)这决定了对手a)发挥其手的实际价值,b)虚张声势,或c)玩一只有可能在以后变得更强的手。
NN_2)这假设对手正在玩他的手的实际值,并输出可能的力量。它表示来自第一个神经网络的选项(a)
NN_3)这与NN_2的作用相同,但假设对手在虚张声势,代表选项(b)
然后我有一个选项(c)的算法,它不使用FFNN。然后根据NN_1的输出组合(a)、(b)和(c)的输出,以更新对手的射程。

每当机器人面临决定时(即,它应该折叠、呼叫还是提高?),它会根据对手的手部范围以及他们对不同赌注大小的反应来计算哪一个最有利可图。这就是第四个也是最后一个神经网络的作用。它根据每个玩家特有的属性和桌子的状态进行输入,并输出对手折叠、呼叫或举起的可能性。

机器人还将具有攻击性(它提高而不是呼叫的可能性有多大)和开放范围(在失败前玩哪只手)。这四个神经网络和两个值将在我的遗传算法中定义每一代机器人

以下是我的训练计划:
我将用10个n初始机器人模拟多个大型锦标赛,每个机器人都有随机值。在最初的几十场比赛中,他们都将被安排在10人的桌子上。他们会一直玩到只剩下一个机器人,或者玩1000手。如果他们达到了手的极限,剩下的机器人将立即全力以赴,直到只剩下一只手。每个表格完成后,最准确的FFNN将被放置在获胜的机器人中,该机器人将进入下一轮(即使包含最佳FFNN的机器人不是赢家)。获胜的机器人将保留其攻击性和开放范围值。比赛结束时,只剩下100个机器人,这些机器人的随机变化将产生下一场比赛的玩家。我认为前几场比赛将是一片混乱,所以我不想过早地缩小我的选择范围。

如果奇迹般的是,机器人真的制定了一个有利可图的,或者至少有点连贯的策略(我会定期检查),我会开始减少机器人之间的变化量。任何玩扑克的人都可以告诉你,有不同类型的玩家,每个人都有不同的策略。我想确保在整个过程中有足够的空间来制定不同的战略。然后,我可能会开发某种"超级机器人",如果失败,它可以在这些不同的策略之间切换

那么,这种方法有什么明显的问题吗?如果是,您建议如何修复它们?你对加快这个过程或增加我成功的机会有什么建议吗?我只是想确保我不会在注定要失败的事情上浪费数百个小时。此外,如果这个网站不是问这个问题的正确地方,请在标记之前让我参考另一个网站。我真的很感激。谢谢大家!

扑克机器人很难使用人工神经网络。最好考虑专家系统。您可以使用赔率计算器对手部力量进行数值评估,然后使用专家系统进行资金管理(风险管理)。Ann在其他问题上也很好。

最新更新