鬥地主AI演算法 第十六章 樣例分析

2021-09-08 14:06:43 字數 3064 閱讀 3633

上一章,我們已經完成了測試模組的開發。至此我們已經可以進行整體測試了。本章主要內容就是對隨機生成的對局情況進行簡單的分析。

實際上整個開發過程絕大部分時間都是用在樣例分析上,通過樣例給出的返回操作分析自己設計的策略是否合理,然後不斷的調整策略,調整權值等等。

這個過程持續了蠻久的,而且很多地方都反覆的修改,感覺git都快要被我玩壞了。

下面具體拿出一組測試資料進行簡單的分析

發牌階段:

[cpp]view plain

copy

0號玩家牌為:  

color_nhandcardlist:  

小王,黑桃2,梅花2,紅桃a,方塊a,紅桃k,梅花k,黑桃q,方塊q,紅桃j,方塊j,黑桃10,梅花9,紅  

桃8,梅花8,黑桃7,梅花7  

1號玩家牌為:  

color_nhandcardlist:  

紅桃2,梅花a,黑桃k,方塊k,紅桃10,方塊10,紅桃9,黑桃9,方塊8,紅桃6,方塊6,黑桃5,梅花5,  

方塊4,梅花4,方塊3,梅花3  

2號玩家牌為:  

color_nhandcardlist:  

方塊2,黑桃a,紅桃q,梅花q,黑桃j,梅花j,梅花10,黑桃8,方塊7,黑桃6,梅花6,紅桃5,方塊5,  

紅桃4,黑桃4,紅桃3,黑桃3  

底牌為:  

方塊9,紅桃7,大王  

此時我們人工計算一下3個玩家的手牌權值

0號玩家:

最佳出牌策略是:78910j(+2分)+7(-3分)+8(-2分)+j(+1分)+qqkkaa(+5分)+22(+5分)+小王(+6分)。

總分14分,輪數為7

1號玩家:

最佳出牌策略是:33445566(-3分)+8(-2分)+99(-1分)+1010(+0分)+kk(+3分)+a(+4分)+2(+5分)。

總分為6分,輪數為7

2號玩家:

最佳出牌策略是:33445566(-3分)+7(-3分)+8(-2分)+10(+0分)+jj(+1分)+qq(+2分)+a(+4分)+2(+5分)。

總分為4分,輪數為8

叫分階段:

[cpp]view plain

copy

sumvalue is :14,needround is :7  

sumvalue is :6,needround is :7  

sumvalue is :4,needround is :8  

0號玩家是地主,叫分為:1  

這個結果跟我們想的是一樣的。

叫分結束後:

[cpp]view plain

copy

0號玩家牌為:  

color_nhandcardlist:  

大王,小王,黑桃2,梅花2,紅桃a,方塊a,紅桃k,梅花k,黑桃q,方塊q,紅桃j,方塊j,黑桃10,方  

塊9,梅花9,紅桃8,梅花8,紅桃7,黑桃7,梅花7  

1號玩家牌為:  

color_nhandcardlist:  

紅桃2,梅花a,黑桃k,方塊k,紅桃10,方塊10,紅桃9,黑桃9,方塊8,紅桃6,方塊6,黑桃5,梅花5,  

方塊4,梅花4,方塊3,梅花3  

2號玩家牌為:  

color_nhandcardlist:  

方塊2,黑桃a,紅桃q,梅花q,黑桃j,梅花j,梅花10,黑桃8,方塊7,黑桃6,梅花6,紅桃5,方塊5,  

紅桃4,黑桃4,紅桃3,黑桃3  

地主手牌發生了改變,出牌策略變成了77788+99+10+jjqqkkaa+22+大王小王。

故第一輪出牌為:

[cpp]view plain

copy

0號玩家出牌:  

紅桃7,黑桃7,梅花7,紅桃8,梅花8  

1號玩家出牌:  

2號玩家出牌:  

沒人管的上,第二輪出牌為:

[cpp]view plain

copy

0號玩家出牌:  

方塊9,梅花9  

1號玩家出牌:  

紅桃10,方塊10  

2號玩家出牌:  

黑桃j,梅花j  

0號玩家出牌:  

黑桃2,梅花2  

1號玩家出牌:  

2號玩家出牌:  

對2管上之後,剩餘手牌為10+jjqqkkaa+大王小王,故此時打出10,之後因為只剩天牌及一手牌,所以先打出王炸然後jjqqkkaa收尾

[cpp]view plain

copy

0號玩家出牌:  

黑桃10  

1號玩家出牌:  

梅花a  

2號玩家出牌:  

方塊2  

0號玩家出牌:  

大王,小王  

1號玩家出牌:  

2號玩家出牌:  

0號玩家出牌:  

紅桃j,方塊j,黑桃q,方塊q,紅桃k,梅花k,紅桃a,方塊a  

地主0號玩家獲勝  

地主取得了勝利!

演算法導論 第十六章 貪心演算法

def 貪心演算法是一種以區域性最優最優選擇以期求得全域性最優解得演算法。16.1活動選擇問題 求乙個活動選擇問題的域中求最大相容活動子集。活動選擇問題具有最優子結構 解中若包含活動ak,s.t.s k 和s k 1.都為最大相容活動子集 若用c i,j 來表示s i.j 的大小則有遞迴公式 由此可...

鬥地主AI演算法 第六章 牌型判斷

本章實現了上一章提到的檢查當前是否只是一手牌函式ins surcardstype 檢查剩餘的牌是否只是一手牌 是 返回手牌型別資料 不是 返回錯誤型別 cgerror cardgroupdata ins surcardstype int arr 輸入很簡單,就是乙個狀態陣列。輸出是手牌型別結構 牌型...

鬥地主AI演算法 第六章 牌型判斷

本章實現了上一章提到的檢查當前是否只是一手牌函式ins surcardstype 檢查剩餘的牌是否只是一手牌 是 返回手牌型別資料 不是 返回錯誤型別 cgerror cardgroupdata ins surcardstype int arr 輸入很簡單,就是乙個狀態陣列。輸出是手牌型別結構 牌型...