SimonFang1 / PokerRaceAI

双人明牌斗地主博弈AI

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

这个做得好厉害,对于非完备信息的博弈呢

IamHuskar opened this issue · comments

你好,你这个做得非常不错。但是对于非完备信息的博弈是否有研究呢。比如两人非明牌的斗地主,这类如何处理。希望可以交流一下哦。请问是否有联系方式。我的邮件 iamhuskar@qq.com

你好,你这个做得非常不错。但是对于非完备信息的博弈是否有研究呢。比如两人非明牌的斗地主,这类如何处理。希望可以交流一下哦。请问是否有联系方式。我的邮件 iamhuskar@qq.com

双人非明牌的斗地主其实加个记牌器,就是明牌了。如果自己的牌型已知,而且发出的牌也已知,可以准确地知道对方的牌。如果发的牌不固定,感觉难度甚至比标准的三人斗地主更大,运气占优。

标准的单副牌三人斗地主,我玩得不多,只能提供一些我个人的思路。

如果要设计三人斗地主的AI,游戏前半段主要是估计牌型的轮次。比如,拿到的牌是“c2AAKJJ888776543”,先通过一定的算法,把这幅牌分成 “{c 2 K } {AA JJ} {8887} {76543}”这种形式,估计出最优的轮次大概是3+2+1+1=7。决定是否要叫地主,以及判断对手是不是失误抢了自己的地主。

形势胶着的情况下,第二阶段是根据一些数据,训练一个出牌应牌的模型,主要目的是收集信息,推断出各方的牌型。

等赛程过半,信息也搜集的差不多了,样本空间已经不大,可以依次搜索出确定情况下的最优解(感觉目前的双人斗地主有很大的改进空间,目前生成出牌的选择太多了,通过剪枝应该可以秒出最佳应对结果,三人明牌斗地主应该也类似),最后综合出最优的出牌策略。

alpha-beta搜索本质上是带启发信息的有限深度搜索。扩展成三人游戏的话,在估值函数方面,地主方优势就是正数,农民方优势就是负数。搜索树的节点记录三方的牌型、当前出牌方、当前出牌的形式,应该也有相应的极大极小值搜索和alpha-beta剪枝。

斗地主本质上是一个轮次游戏,只有在牌型占优的情况下,叫地主有优势;否则当农民的优势更大。
所以,一开始需要对自己的牌型有一个正确的评估,原则就是:

  1. 出牌的轮次少,也就是零碎的单牌少,能尽可能地出复杂的牌型保持先手。如果统计的平均出牌轮次是6-7次,现在只要4-5次就能出完,那就应该积极地叫地主。
  2. 大牌的数量(包括炸弹等,能夺回主动权)
  3. 叫到地主后,加入的三张不确定的牌有较大的容错性,至少轮次不会反而落后太多。

地主确定之后,接下来的2-3个回合,出牌的难度不是很大,地主和农民博弈的重点在于搜集信息。

作为地主,应该优先出比较复杂且牌面较小,比如(顺子、连对、三带一、三带二等),但是还有对应牌面较大的牌能接应,保持先手出牌的优势。地主如果不积极出牌,开局丢掉主动权,一般会导致劣势。

作为农民,应该想办法跟着应,出掉一些小牌,给同伴提供信息。如果只有大牌可以出,而且牌面价值间隔的特别大,比如三个2对付三个5,应该慎重,容易暴露过多的信息给地主,而且大牌被小牌轻易的消耗掉,容易造成后期的轮次落后。

经过若干个回合,我们得到的信息有:

  1. 未出的牌
  2. 三方已出的牌型
    接下来重点在于分析各方拥有的牌型。
    感觉难以实现,参考: https://www.sohu.com/a/297118403_120099905)

如果,还有3张9没有出,那么上家下家分别持有9的个数可能是 (3,0), (2,1), (1, 2), (0,3),可以初始化一个先验分布。再根据各方出牌的牌型,可以得到更准确的后验分布。

又比如,发现记牌器的结果如下:

大王 小王 2 A K Q J 10 9 8 7 6 5 4 3
x x x x 2 1 2 1 1 0 1 1 1 1 2

上家和下家都保留了大量的单牌没出,很有可能是为了出5连顺。根据历史的出牌记录,结合最新的后验分布,双方剩余的牌数,可以进一步推断出双方可能的牌型。当不确定性因素很小后,开始搜索最优的出牌策略。

斗地主是两个牌型较弱的农民能否战胜地主的问题。斗地主的博弈,包括前面说的估计牌型,都是围绕着轮次进行的。
如果地主的轮次优势明显,集中了大量的大牌,那么无论两个农民怎么抵抗都是必败的,重点在于怎么降低失败的赔率。
如果地主的轮次优势不明显,就莽撞地叫了地主,农民反而更容易获胜。
因此只剩下地主轮次优势略优于农民这种情况,而且地主手中的大牌应该约等于两个农民手中的大牌之和。

如果出牌顺序是(地主,农民1,农民2),那么对于地主的牌,农民1如果消极应对,农民2就应该积极对抗,想办法夺取控制权或者努力消耗掉地主的大牌。如果农民1积极了,那么农民2就应该消极,否则地主用一张不那么大的牌,就可以消耗掉两个农民手中的大牌。

事实上,大部分普通人玩斗地主,不记牌,通过和地主对抗大牌抢夺先手,就能够保证一定的胜率。但是在游戏后期,随着各方信息的充分暴露,就已经接近明牌斗地主了。