- A+
Alpha Go的行动是根据对手的行动实时计算的,因为不可能让AI记住所有的可能场景。但是一般德扑游戏AI的办法不一样,因为实时计算的计算量庞大,但是AI遇到的场景种类比围棋少。所以冷扑和其他德扑游戏AI的主要打法都是事先算好的,比赛时拿到什么牌,对手怎么行动很大程度是靠着之前算好的游戏行动规则执行就好了。不过要让AI知道当前处于什么口袋德扑博弈情形是一大难点。
首先,一般AI都会缩减德州游戏的复杂度,德扑游戏有10亿种牌型组合,但是不少游戏牌型其实是一样的,比如5红桃6黑桃其实和5方块6梅花没什么区别。之前德扑AI把A黑桃5梅花和A红桃5方块这样的牌也归为一类,这就有些危险。因为在3个黑桃牌面中,前者是阻断牌,后者不是两种牌的打法其实并不一样,用前者去咋呼更可行。这里冷扑做了改进,使得决策更科学。
一般的德扑游戏AI也会将玩家下注额度进行四舍五入,比如你下注101元和下注100元在AI眼中是一样的。这种下法有时候会有非常大的潜在漏洞,很多聪明的玩家都会利用AI的这个漏洞剥削AI,我们后面再解析。
冷扑对前两个下注轮(翻牌前和翻牌后)手牌牌型不做任何缩减,也就是德州游戏规则5红桃6黑桃其实和5方块6梅花是不同手牌。这两轮中冷扑计算对手10种下注大小。而且这两个下注轮,冷扑的行动会完全按照自己之前算好的游戏行动一览表游戏,不会做实时计算。
▲ 冷扑的机房
冷扑对后两轮下注(转牌与河牌圈)手牌进行很大的缩减。一个是上面提到的牌型缩减,另外它只把对手的下注简单归类为2到3种下注类型。后面这两轮,冷扑只利用行动一览表计算EV(刨除运气成分的盈利),并不利用行动一览表来指导具体操作。这样做是为了减少计算量,因为翻牌前和翻牌圈(前两轮下注)都是预先设计好的,但是后两轮下注如果场景太多,会让计算难度指数增长。
经过这样的简化,冷扑每手牌的计算量为5万G大小。(看来在自己家电脑跑一个冷扑是不可能的了)
其次,在缩减了游戏复杂度后,AI利用一种叫做“蒙特卡罗虚拟事实模拟后悔最小化”(MCCFR)的算法,来计算纳什均衡。
具体算法就不详细解释了,免得文章太无聊。这算法大致有点像人类讨论牌局,打个比方:我拿了AK翻牌前平跟,在带A的翻牌下了注,河牌出了同花面,面对别人下注,我选择all in结果对手拿同花跟注,我输掉了牌局。
事后我后悔说:我应该翻牌前加注10个大盲,而不是平跟。
对手说:那你下10个大盲,我翻牌就fold掉咯,你也没拿到什么德州下载价值。
我再后悔说:那我翻牌加注3个大盲,你call,我翻牌下重注保护,你肯定弃牌。
这样每次把后悔降到最低,对手针对自己的改动再做改动,一次次推演,最后达到一个自己的最优方案。
这个算法本身不是冷扑发明的,但是冷扑改进了这个算法,把一些明显不合理的打法排除在外,比如拿27非同花这种最弱的牌翻牌前加注或者拿AA这种强牌翻牌前弃牌。如果某种打法一直都是负EV,那么之后冷扑会越来越少地去考虑这种打法。之前的德扑AI会反复考虑这种不合理打法,从而挤占了大量的计算资源。有数学论文证明刨除这种不合理打法并不影响纳什均衡的正确性。通过这种改进,冷扑计算纳什均衡的速度提升了100多倍。