有一段時間我沉迷于手機鬥地主,無奈牌技太差經常輸,于是想到手動編寫一個類似的鬥地主輔助程式,包括記牌、分析對手牌等等功能(感覺有點像作弊)。然而能力有限,目前也就隻做到了一個自動出牌。開學去了以後也沒有時間再做這些了,于是我把這段時間的工作寫下來,既是一個總結,也是一個分享。當時寫程式時,查了好多資料但是卻沒有太多有用的。故也希望這些文章對後來的朋友有所幫助。文筆不佳,請多指教。
主要思路
由于鬥地主屬于非完備資訊博弈,我認為算法的核心是機率推斷。即通過手牌的出牌政策,來推斷除本人以外的玩家的手牌的機率值。再依據機率矩陣,便可以推斷出本人的最優出牌組合及其他玩家的可能手牌。
組成
- 遊戲初始化:這部分主要是根據本人手牌來初始化場外剩餘牌數、以及機率矩陣,為叫地主作準備
- 叫地主:對手牌進行組合,再依據機率矩陣計算手牌價值,進而決定是否叫地主
- 機率矩陣算法:機率矩陣在出牌過程中的變化政策
- 手牌價值計算及組合算法:手牌的拆分與組合,以及如何加快組合速率
- 出牌政策:根據手牌價值以及組合,給出此時的最佳出牌
這些部分我将在後面的文章中具體展開叙述。