鬥地主AI演算法 第一章 業務邏輯

2021-07-31 04:53:05 字數 1897 閱讀 7981

轉眼間快到了五月,帝都的天氣也變的非常夢幻。 時而酷暑炎熱,時而狂風席捲。

而不管外面如何,我們也只能在辦公室裡煢煢無依的擼著**,無可奈何的負著韶華。

世界是寂寞的,寂寞到不只是寂寞,而是死一般的寂寞。

或許ai就是因此而生吧,因為到了最後,能一直陪伴我們走下去的,或許也就只有程式了。

下面步入正題

相信大家已經對鬥地主遊戲及其玩法不陌生了。對於玩家而言,我們所做出的操作也就只有三種,分別是:叫地主,主動出牌,被動出牌。之所以把主動出牌和被動出牌分開講,因為從邏輯方面兩者差別還是蠻大的。主動出牌沒有牌型限制,而被動出牌則必須出指定的一種牌型或炸彈、王炸。顯然,當你處於被動出牌的階段時,可供你選擇的操作本身就很少,就算你列舉出所有情況也是可以的,而主動出牌一般就不能這麼搞了,這點從各大鬥地主遊戲平台提供的提示策略也能看出來。

所以從業務的角度來說,我們主要需要完成叫地主,主動出牌,被動出牌這三種處理邏輯。

再分別看這三種處理:

叫地主:叫地主還算比較簡單,無非就是通過一系列的計算,得出手牌的乙個價值,我們先簡稱這個計算函式為f,即根據f(手牌)返回的這個價值分一下區間,然後返回乙個叫分值(1分2分3分)

主動出牌:主動出牌所做的工作是篩選出當前形勢最佳的出牌決策,顯然,這個篩選的標準就是如何打出一手牌使得接下來手牌的價值最高,我們可以認為主動出牌的邏輯為:先列舉了n種出牌策略,然後通過計算f(剩餘手牌),選擇返回值最高的一種策略。另外,若只剩一手牌,那麼即可直接打出獲勝。

被動出牌:被動出牌第一步便是排除多個不合法的出牌型別,可想而知,排除之後可供參考的選擇回變的非常少,然後接下來便和主動出牌類似,選擇打出一手牌使得剩餘價值最高,與主動出牌不同的是,被動出牌可以選擇不出牌,比如,34567789,當你可以打對7的時候你不一定要打,因為打了之後接下來的手牌會變的更難出。所以需要對比考慮一下出牌的收益,對比的方法也是看看原手牌的價值與出牌後的價值關係。

通過上述邏輯,我們可以整理出整體的業務流程

那麼現在大體的解決方案框架我們已經確定了,重點的問題就是這個手牌價值如何計算。

第一,不同的牌根據其點數首先就要有一定的價值區分,王和3的價值肯定是不一樣的,比如說大王的價值是+10分,3的價值是-10分等等。

第二,鬥地主存在很多牌型,且三牌四牌還可以帶出其他的牌,炸彈王炸又可以通管,所以不同的牌型要有自己的價值體系

第三,一手牌也很有可能拆分成兩手,舉個例子,當你就剩四張牌時,你認為qqq3和qqq2的價值是否相等呢?

這三個問題實際上反映的就是【單牌】【組合牌】【整手牌】三者之間的關係。

由上可知:①每個單牌都有乙個基礎價值②組合牌型的整體價值與這個基礎價值有關,但顯然計算規則不完全一樣。③整手牌可以分成若干個組合牌,但分法不唯一。

那麼如何解決這三個問題呢?首先①和②我們大概可以想到,可以直接去定義。③就比較複雜,因為拆分的方法不唯一,所以需要篩選出乙個最優解,這個最優解如何得到呢?

一定是這些拆分出來的組合牌的總和。也就是,當我們只剩一手牌的時候,我們可以通過組合牌的價值定義直接賦予他價值。若非一手牌,則打出一手牌然後繼續計算。

不難看出,這是乙個遞迴,遞迴的出口即只剩一手牌的時候。再看,打出一手牌這一步,是不是和主動出牌的計算最佳決策類似?那麼我們現在可以確立這個解決方式。

假設:f()為計算當前手牌的價值   g()為主動出一手牌使接下來的牌價值最大

g()的實現方法是選出若干個f(剩餘牌)返回值最優的那個

f()的實現方法是若剩餘牌可以一手打出,返回其組合牌價值,否則 f(手牌)=f(g())+f(手牌-g())

以上就是針對鬥地主ai實現方法的基本概念,業務邏輯確立之後,我們便可以進行開發了。

第一章 布林邏輯

一 背景,一些概念 0 布林代數 1 邏輯門 2 基本布林運算元 and or not 3 結論 每個布林函式不管有多複雜,都可以只使用三個布林運算元進行表達 4 門 是用來實現布林函式的物理裝置。最簡單的門由微笑的開關裝置 電晶體 transistors 構成,這些微小開關按照設計的拓補結構進行連...

數字邏輯 第一章 邏輯代數基礎

a bc a 1 b c bc 由於1與上任何數都為1 a ab ac bc 分配律 aa ab ac bc 重疊律 aa ac ab bc 交換律和結合律 a a c b a c 分配律 a b a c 分配律 邏輯變數與邏輯函式的取值都只可能是0或1,但相對某一邏輯網路而言,邏輯變數的取值是 自...

演算法基礎第一章

不同常數時間的操作 加或定址運算或位運算 執行時間不一樣 選擇最小的數,放到陣列的第乙個位置 時間複雜度 c n c n 1 c n 2 c 1 o n 2 額外空間複雜度 o 1 兩兩比較並交換,直到無交換 時間複雜度 o n 2 額外空間複雜度 o 1 左邊序列有序,右邊新加入乙個數,從右往左找...