【发布时间】:2018-03-18 20:47:44
【问题描述】:
我正在设计一个机器人来玩德州扑克,最多可容纳 10 名玩家,该设计包括一些前馈神经网络 (FFNN)。这些神经网络每个都有 8 到 12 个输入、2 到 6 个输出以及 1 或 2 个隐藏层,因此我必须优化数百个权重。我通过反向传播进行训练的主要问题是获得足够的训练数据。我在业余时间玩扑克,但不足以自己收集数据。我曾考虑从扑克网站购买几百万手牌,但我认为如果我这样做了,我的钱包不会对我很满意……所以,我决定通过设计遗传算法来解决这个问题。我已经看到过使用遗传算法训练 FFNN 玩超级马里奥和俄罗斯方块等游戏的例子,但从来没有玩过像扑克这样的游戏,所以我想知道这是否是训练我的机器人的可行方法。
首先,让我提供一些背景信息(如果您不熟悉扑克,这可能会让人感到困惑)。我有一个系统可以让机器人将其对手置于特定范围内,以便做出相应的智能决策,但它完全依赖于三个不同神经网络的准确输出:
NN_1) 这决定了对手 a) 玩他的牌的实际价值,b) 诈唬,或 c) 玩一手有可能在以后变得更强的手的可能性。
NN_2) 这假设对手正在玩他的手牌的实际价值并输出可能的力量。它代表来自第一个神经网络的选项 (a)。
NN_3) 这与 NN_2 做同样的事情,但假设对手在虚张声势,代表选项 (b)。
然后我有一个不使用 FFNN 的选项 (c) 算法。然后根据 NN_1 的输出组合 (a)、(b) 和 (c) 的输出,以更新我对手的范围。
每当机器人面临一个决定(即它应该弃牌、跟注还是加注?)时,它会根据对手的手牌范围以及他们可能如何响应不同的赌注来计算哪个最有利可图尺寸。这是第四个也是最后一个神经网络的用武之地。它根据每个玩家的独特属性和牌桌状态接受输入,并输出对手弃牌、跟注或加注的可能性。
机器人还将具有侵略性(加注而不是跟注的可能性)及其开局范围(翻牌前玩哪些牌)的价值。这四个神经网络和两个值将在我的遗传算法中定义每一代机器人。
这是我的训练计划:
我将模拟多个大型锦标赛,其中有 10n 个初始机器人,每个机器人都有随机值。在最初的几十场比赛中,他们都将被放置在 10 人的桌子上。他们将一直玩到剩下一个机器人,或者他们玩 1,000 手牌。如果他们达到该手牌限制,剩余的机器人将立即在每一手牌中全押,直到剩下一手牌。每张桌子完成后,最准确的 FFNN 将被放入获胜的机器人中,该机器人将进入下一轮(即使包含最佳 FFNN 的机器人不是获胜者)。获胜的机器人将保留其侵略性和开局范围值。比赛在只剩下 100 个机器人时结束,这些机器人的随机变化将产生下一场比赛的球员。我假设前几场比赛会完全混乱,所以我不想过早地缩小我的选择范围。
如果出于某种奇迹,机器人实际上制定了一种有利可图的策略,或者至少是某种连贯的策略(我会定期检查这一点),我将开始减少机器人之间的变化量。任何玩扑克的人都会告诉你,有不同类型的玩家,每个人都有不同的策略。我想确保在整个过程中为不同策略的发展留出足够的空间。然后我可能会开发某种“超级机器人”,如果其中一个失败,它可以在这些不同的策略之间切换。
那么,这种方法有什么明显的问题吗?如果是这样,你会如何建议修复它们?你对加快这个过程或增加我成功的机会有什么建议吗?我只是想确保我不会在注定要失败的事情上浪费数百个小时。另外,如果这个网站不是问这个问题的正确地方,请在标记这个之前让我参考另一个网站。我真的很感激。谢谢大家!
【问题讨论】:
-
这个问题在 cs.stackexchange.com 上可能更合适?我不确定。
-
好的,我也去那里试试。谢谢。
标签: performance neural-network simulation genetic-algorithm poker