如何使用贝叶斯网络编写扑克玩家

机器算法验证 机器学习 贝叶斯 采样 推理 贝叶斯网络
2022-04-01 09:01:31

这是我在 stackexchange 上的第一个问题,也是我第一次实现贝叶斯网络,所以我会提前为我犯的任何新手错误道歉。

我的项目的目标是实现一个进行贝叶斯推理的扑克玩家。由 Kevin Korb 领导的澳大利亚莫纳什大学的一个小组在这方面做了一些工作,我用来参考。你可以在这里这里找到他们的作品。第一个参考书,作为一本书,更有帮助和详细(参见第 5.5 章和第 11 章的扑克)。我正在使用名为 Leduc Hold'em 的简化版德州扑克开始。

Leduc Hold'em 是一款两人扑克游戏。Leduc Hold'em 中使用的牌组包含六张牌、两张 J、两张 Q 和两张 K,并且在玩一手牌之前要洗牌。在一手牌开始时,每位玩家向底池支付一个筹码赌注并获得一张私人牌。然后从玩家一开始进行一轮下注。在一轮下注之后,从牌堆中显示一张公共牌,双方玩家都用它来构组自己的手牌。这张牌称为翻牌。翻牌后发生另一轮下注,再次从玩家一开始,然后进行摊牌。在摊牌时,如果任一玩家将他们的私人牌与公共牌配对,他们将赢得底池中的所有筹码。如果没有玩家配对,则拥有较高牌的玩家被宣布为获胜者。

每一轮投注都遵循相同的格式。第一个行动的玩家可以选择过牌或下注。下注时,玩家将筹码添加到底池中,并且行动转移给其他玩家。当玩家面临下注时,他们可以选择弃牌、跟注或加注。弃牌时,玩家放弃这手牌,底池中的所有钱都分配给对方玩家。跟注时,玩家将足够的筹码放入底池以匹配所面对的下注,下注回合结束。加注时,玩家必须将比当前所面对的赌注更多的筹码投入底池,并将行动转移给对方玩家。如果第一个玩家最初过牌,则第二个玩家可以过牌以结束下注轮或下注。在 Leduc Hold'em 中,每轮有一次下注和一次加注的限制。下注和加注的大小是固定的。

如果您查看 pg.185,图 5.14 中的第 5.5.2.1 节,则有一个用于扑克的贝叶斯网络图。

扑克玩家的贝叶斯网络

这与我在项目中使用的基本相同,但假设在 Leduc Hold'em 中没有上牌,则上牌的两个相应节点不适用于它。我能够计算节点对(BPP_Win,BPP_Fin,OPP_Fin),(OPP_Fin,BPP_Fin),(OPP_Fin,OPP_Curr)和(BPP_Fin,BPP_Curr)之间的条件概率表,但我不知道如何计算条件概率(OPP_Curr, OPP_Action) 的

1个回答

从你提到的书中:

请注意,现有结构假设对手的行动仅取决于其当前手牌。

再进一步:

有四个动作概率表,对应四轮下注。这些报告根据对手当前的手牌类型报告每轮动作的条件概率——弃牌、传球/跟注或下注/加注。BPP 会随着时间的推移调整这些概率,使用每个对手的这些行为的相对频率。由于扑克规则不允许观察隐藏牌,除非手牌摊牌,这些计数仅针对此类手牌,无疑会引入一些偏见。Pi(OPP_Action|OPP_Current)

如果我理解,您没有四个这样的表,但逻辑是相同的。你从对玩家行为的先验信念开始。它必须是一个理性的玩家会做的事情(如果他们有高对子,则以高概率加注,如果他们的游戏非常糟糕,则以高概率弃牌)。

当你进入摊牌时,你可以重构对手在每一步的游戏方式,因此你可以根据贝叶斯规则在观察到的手牌的情况下更新观察到的动作的概率。