斗地主AI算法——第十七章の總結整理


2.0版本的斗地主AI算法在這里就算告一段落了。

**********************完結撒花**********************

不過后續應該還會開發更智能的版本,畢竟當前版本還有很多策略沒有加入。

比如說角色位置(地主上家下家打法)、比如說記牌算牌、又比如對於一些殘局的分析等等。

斗地主規則看似簡單,實際變幻莫測,可勝可負的局面非常多,不但涉及到基本的策略,還有配合、判斷,甚至涉及到暗示與反暗示的心理戰。而我想做的AI,不一定要做到最牛逼,天下無敵。因為斗地主和象棋圍棋不一樣,首先是非完全信息博弈。其次是非公平局勢博弈。所以勝負是把控不了的,那么我想達到的效果就是符合正常人的思維,給出正常人選擇的操作。從現在的2.0版本來看,和我想象中的還有很長的距離,革命尚未成功,同♂志仍需努力。

 

【關於枚舉牌型】牌型蠻多的,所以看起來代碼量很大,不過很多牌型的邏輯都是共通的,比如單牌、對牌、三不帶等。像這種分支枚舉不是low逼,而是讓邏輯更簡單,讓代碼更規矩。對人對機器都是好事。但是下文中飛機邏輯里我做的分支,就是100%的low逼了。

【關於飛機策略】我最惡心的就是飛機,這個東西真的煩死。首先就是長度不確定,帶出去牌的個數不確定而無法統一構造出帶出牌的序列。其次就是飛機打破了很多種策略上本應可以篩選的情況。比如說飛機里面可能存在炸彈,又比如說3連飛機帶了3張相同的牌。看起來蠻怪的,但是實際對局中這種策略確實有可能成為最佳選擇,所以不能忽視。

【關於權值設計】權值的設計我想了很久,也改了很多次,因為確實有些地方價值賦予的不是很公平。尤其是考慮拆分價值的時候,因為原來我的想法是考慮該牌型拆分后與不拆分的雙重價值。舉個例子,AAAKKK其實拆成兩手出威力也很大。但是因為后期必須要考慮到輪次參數,計算權值的時候就不能再把拆分價值算進去了,不然四帶二什么的權值爆炸。但是不考慮拆分價值又感覺有點對不起222等牌型。這也是我時至今日也很苦惱的一點。

【關於地主叫分】地主叫分策略里我只考慮了權值而不考慮輪次,因為實際打牌中其他兩個人確實會針對你進行出牌,地主必須保證要有絕對的控手能力。確實我們實際玩牌時是否叫地主還是取決於你大牌的數量的。

【關於嵌入交互】交互相關的代碼就不放出來了,根據自身實際的需求而定吧。我個人比較喜歡的方式是生成一個服務當做一個偽客戶端。當然也可以封裝成類庫供調用,像我現在使用的方式是skynet里lua腳本調用類庫,數據以json串形式傳遞。或許哪天閑着了我也會封裝一個lua特有的庫。這樣通過struct lua_State交互數據會更可視化一些。

 

 

最后強調一下,策略中帶有我自己本人主觀因素太多,比如說炸彈拆分處理等。我給出的策略並非斗地主游戲最佳策略,所以希望大家如果引用的話最好根據自己的想法稍作修改。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM