这是我关于 stackoverflow 的第一个问题,也是我第一次实现 Baysian 网络,所以我会提前为我犯的任何新手错误道歉。
我项目的目标是实现一个进行贝叶斯推理的扑克玩家。由 Kevin Korb 领导的澳大利亚莫纳什大学的一个小组在这方面做了一些工作,我用来参考。你可以在这里找到他们的作品:
- http://www.scribd.com/doc/55485155/Bayesian-Artificial-Intelligence
- http://www.csse.monash.edu.au/~annn/poker/UAI99.pdf
第一个参考书,作为一本书,更有帮助和详细(参见第 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),(BPP_Win,OPP_Fin),(OPP_Fin,BPP_Fin),(OPP_Fin,OPP_Curr)和(BPP_Fin,BPP_Curr)之间的联合概率表,但我不知道如何计算 (OPP_Curr, OPP_Action) 的联合概率。据我了解,某种采样技术是必要的。
作为一个后续问题,如果我能够计算这个联合概率,那么我应该能够通过使用 BP 并将联合概率作为因素来计算给定我当前卡的 BPP_win 的边际概率,对吗?