為了研究詐金花自動策略,本文一共做了以下幾件事情:

依據機率論的知識,確定了單個人抽牌的機率分佈,能夠衡量出自己的手牌在所有手牌可能性中大概的位置;

利用數理統計中次序統計量的知識,結合上文中單個人抽牌的機率分佈,得到其他所有玩家的手牌都小於我們手牌的聯合機率分佈,換而言之,就是我們手牌獲勝的機率分佈;

設計了一個基於手牌勝率的決策模型,用以實現詐金花的自動策略。為了確保決策模型是一個期望值為正的系統,進行了一系列的驗證;

對我們的策略進行實測,並根據結果對決策模型進行了改進,得到如下結論:

五人場,每次主動看牌

場上無人看牌則對4以上留;

場上一人看牌且跟了,則對11及以上留;

場上兩人看牌且跟了,則對A及以上留;

場上三人看牌且跟了,則順子678及及以上留。

以下便是我們在網上與其他玩家進行詐金花博弈時的賬號淨值圖,可以看出本文的策略期望為正且效果良好:

#FormatImgID_1##FormatImgID_2#

目錄

目錄

摘要

1。詐金花遊戲規則

1。1遊戲流程

1。2牌面大小規則

2。詐金花機率模型

2。1排序

2。2單人情況的抽牌機率模型

2。3多人情況的抽牌機率模型

2。3。1其他玩家抽牌的機率分佈

2。3。2獲勝的機率分佈

2。4驗證

3。詐金花策略模型

3。1勝率的頻率

3。2自動策略

3。2。1策略的描述

3。2。2策略的期望

3。3其他策略

3。4風險管理

3。5錢從何來

4。敏感性分析

4。1閾值T取值對於系統的影響

5。實測驗證

5。1模型結果驗證

5。2結果分析

6。改進模型

6。1改進模型結果驗證

6。2結果分析

6。3策略評估

7。演算法實現

7。1排序

摘要

詐金花又叫炸金花,是在全國廣泛流傳的一種民間多人紙牌遊戲,具有獨特的牌面大小規則

,玩家以手中的三張牌比輸贏,根據條件和判斷形勢可以進行加、跟、看牌、放棄、開牌等操作,非常考驗參與者的膽略和智慧。

首先,本文詳細的介紹了詐金花遊戲的規則,並對詐金花的抽牌規律做了簡單的統計分析,為後文的機率模型打下了基礎。然後,本文依據機率論的知識,確定了單個人抽牌的機率分佈,目的是能夠衡量出自己的手牌在所有手牌可能性中大概的位置。為此,本文還創造出了一種排序演算法,將每一種手牌都對映到實數域上的一個數字,實現了手牌大小的比較。

接下來,本文利用數理統計中次序統計量的知識,結合上文中單個人抽牌的機率分佈,得到其他所有玩家的手牌都小於我們手牌的聯合機率分佈,換而言之,就是我們手牌獲勝的機率分佈。最後,還利用其他研究者的資料,驗證了本文模型的有效性。

然後,本文設計了一個基於手牌勝率的決策模型,用以實現詐金花的自動策略。為了確保我們的決策模型是一個期望值為正的系統,本文進行了一系列的驗證,並提出了保證系統可行的必要條件。此外,本文還提出了一種風險管理方法,以確保自己不會因為連續的不走運而虧空掉所有的資金。

最後,本文對自動策略在網上進行了實測,發現本文的策略期望為正且效果良好:

關鍵字

詐金花 機率模型 聯合機率分佈 正期望值的自動策略 風險管理

詐金花自動策略研究

1。詐金花遊戲規則

1。1遊戲流程

詐金花受眾極廣,規則也是千變萬化,本人單就最基礎的玩法進行考量,從遊戲流程和牌面大小兩個部分來細說這個局,首先來看看完整的一局詐金花都有哪些步驟(引自百度百科詐金花詞條):

1。投入鍋底:發牌之前大家先下注來獲得本局的牌權

2。發牌:一副牌(52張無大小王),從莊家開始發牌,第一次開局的話,隨機選擇一個使用者為莊家先發牌。每人發三張牌,牌面向下,為暗牌。

3。遊戲:遊戲人數為2-6人。莊家逆時針的下一家先開始下注,其他玩家依次逆時針操作。輪到玩家操作時,玩家根據條件和判斷形勢可以進行加、跟、看牌、放棄、比牌等操作。

①看牌:沒有選擇“放棄”的玩家,輪到自己動作時,可以選擇看自己的牌,看過的牌為明牌。可以在看牌後再選擇是否跟、加,或比牌,這時你的牌就是明牌了,跟、加也是按照明牌的規矩跟、加;當然也可以暗牌操作。

②跟注:只要不退出牌局,每次輪到玩家時,都必須壓入與單次投注數相同的籌碼。

③加註:玩家可以增大每一回合的單次投注數。

④棄牌:當玩家手裡的牌不夠好時,可以放棄手中的籌碼,退出牌局。

4。比牌:當到達一定跟注輪數後,可以選擇與玩家比牌,贏的人留下,輸的人退出牌局。

5。結算:贏者通吃。

以上就是詐金花的遊戲規則。當然,詐金花,除了好的手牌外,詐也是關鍵,詐能使其他玩家退卻,能小牌吃大牌,也能在大牌時留住場上更多的籌碼。這是從人性的角度上去考量的。

從數學的角度上來看,抽好牌抽壞牌是個機率問題,如果能夠找到一套可行的策略,衡量自己手中的牌的勝率,再根據勝率採取事先確定好的行為,從而更加理性地進行遊戲,長遠來看,這或許是一個期望為正的系統。

1。2牌面大小規則

如果想衡量自己的勝率,首先得知道什麼樣的牌能贏,接下來我們就介紹一下,詐金花中的牌面大小規則。

牌面共有四種花色,分別是:黑桃,紅桃,方塊,梅花;

牌面一共有13種數字,分別是 2 3 。。。 9 1 0 J Q K A(1) , 其中2最小,A最大;

牌面的大小就是從這兩個方面確定的,按照下列組合,從大到小:

詐金花自動策略研究

可以看出來,在牌面為豹子時,數字一樣,則一定不可能花色一樣,這說明數字和牌面

絕對不會是相互獨立事件

,這點在考量勝率的時候是非常重要的。

一副牌組共52張牌參與遊戲,則按照組合數C(52, 3)共有22100種可能性牌組,以“數字連號”的組合為例,共有C(12,1)*C(4,1)*C(4,1)*C(4,1)=768種可能性,其中同花順佔到48種,而順子佔720種,總體情況如下表所示:

詐金花自動策略研究

詐金花自動策略研究

這便是目前比較常見的詐金花機率估計,但是這個機率並不十分準確,本人將會使用更加嚴謹的數學方法來推導這個問題。在下來的環節“機率模型部分”中,將會涉及到機率論中

隨機變數的機率分佈

以及

聯合分佈函式

等內容。

2。詐金花機率模型

上一回中,我們描述了詐金花中的牌面大小規則以及一些簡單的統計分析。當我們有一個同花的時候,我們的手牌至少比所有可能的牌組的94。58%都大。

當然,這是不夠的,我們還想知道更加精確的比例,才能去估計得到精確的勝率。所以本文采用了一個簡單的方法來計算自己在所有牌組中的位置。

2。1排序

已知現在牌庫中有N張牌,則一共有組合數C(N,3)種可能牌組。每一局開始前先洗牌,然後輪流給所有人發三張牌,對於單局而言,它屬於一個

不放回的抽取

,所以隨著抽牌,特別是自己手中已經拿到牌的情況下,所有可能的牌組數已經發生了變化。比如說你拿到了紅桃A,則別人就無法再拿到紅桃A,也無法拿到所有包含紅桃A的組合,這在一定程度上也會影響我們手牌在所有組合中的大小位置。

因為任意兩幅牌組之間都可以比大小,所以由卡牌組合出來的所有牌組,都可以從小到大排序,至於如何排序,這是一個演算法問題,方法我已經想好了,很巧妙,將在篇目“程式設計實現”中詳細的闡述。現在我們假設,所有可能的牌組都已經被大小排序,手中的任意一個牌組,

我們都可以知道它在所有可能性當中的大小位置。

2。2單人情況的抽牌機率模型

讓我們回到機率上,設隨機變數X為本局中某個牌面組合,X是一個離散的隨機變數,取值範圍是由N張牌能夠組成的總計C(N, 3)種牌組。已知

詐金花自動策略研究

,其中

詐金花自動策略研究

,即抽中任一個位置的牌組的機率都是

詐金花自動策略研究

,這屬於

均勻分佈

X

的分佈函式如下:

詐金花自動策略研究

也就是說,當我們從N張牌中任意抽取一個三張牌的牌組時,我們抽到的牌組小於等於x的機率為

詐金花自動策略研究

因為在同一個牌桌上,並不只有我們一個玩家,詐金花是一個2-6人的遊戲,每一個的抽牌,我們都要考慮在內。

這裡我有一個設想,參與的人越多,就算拿到好牌,贏得機率也會比人少時更小

。想想極端情況,一共有22100個人抽牌,如果我們抽到一個同花,則一定會有比我們大的人存在。這個想法我將會在描述完詐金花的機率模型後進行驗證。

2。3多人情況的抽牌機率模型

接下來,讓我們回到詐金花的機率模型中,這個模型的目的是讓我們知道我們手裡的牌組在牌桌上的勝率。我們知道,如果想知道自己在牌桌上的勝率,也就是確認自己的牌在場上是最大的牌組的機率。這裡,我們就要對現實情況做兩個假設,以方便計算。

假設1:所有被抽取的未知牌,都當做是放回抽取,不影響下回抽牌時的機率

這個被抽取的未知牌,除了包括別人的牌以外,自己的牌如果未看也算在內。當然,如果自己都選擇不翻牌的話,那對於機率根本就沒有任何指導意義,就不考慮這種情況了。

因為發牌過程是隨機的,所以無論是誰先抽牌,結果都沒什麼變化,在此我們為了方便討論,就認為每次都是我們第一個抽牌,其他的玩家的手牌都受到我們抽牌的影響(事實上,無論是第一個抽牌還是最後一個抽牌,我們的手牌對於機率的影響都一樣)。

假設2:忽略兩個牌組一樣大小時的大小關係比較

按照詐金花的規則,如果兩個牌組一樣大時,主動比牌的人算輸,但是在遊戲中有時會我們主動比牌,有時會對方主動比牌,所以我們忽略牌組一樣大時的大小關係比較,轉而在求自己牌面於所有可能性牌組的大小位置時,取其大小一樣的牌組位置的中位數。

2。3。1其他玩家抽牌的機率分佈

這樣,我們根據一個人抽牌的機率公式①,再結合上文中我們第一個抽牌的情況,得到接下來每一個玩家抽牌的機率分佈函式:

詐金花自動策略研究

其中,因為我們是第一個抽牌的,所以接下來的所有玩家面對的只有N-3張牌的牌庫組成的牌組。再根據假設,被抽取的未知牌是不影響牌庫的組成的,我們可以認為,

接下來所有玩家的每一個人,從N-3張牌中任意抽取一個三張牌的牌組時,抽到的牌組小於等於x的機率為

詐金花自動策略研究

這是我們接下來建立我們的獲勝機率模型的基礎。

2。3。2獲勝的機率分佈

簡單來說,在詐金花中獲得勝利,其實就是贏過場上所有的人。我們在抽得一手牌的時候,不僅迫切的想知道自己的牌組到底算是大還是小(這個問題在上面的單人抽牌機率模型中已經有了答案),更想知道的是,我們比場上其他人都大的可能性是多少,這就是我們要求的獲勝機率。

其實,將獲勝的情況在語言上轉化一下,“贏過場上所有的人”=“我們比場上其他人中最大的那個還要大”,而

場上其他人中最大的

是一個可以使用統計量衡量的概念。

設場上有m位玩家,則出去我們本人外,還有m-1位玩家。統計量

詐金花自動策略研究

表示剩下m-1位玩家中手牌最大的那個手牌。如果我們的手牌比Y還大,則我們就是最大的那個,也就是獲勝者。接下來,我們將求解統計量Y的機率分佈函式:

詐金花自動策略研究

可以看出,統計量Y的機率分佈函式實則是一個m-1維的聯合分佈函式。

透過統計量Y的機率分佈函式,我們可以得到在場上的任一玩家的手牌都小於等於Y的機率。如果我們的手牌是Y,那這就是我們本局獲勝的機率。

2。4驗證

本文驗證部分的資料來源於shengyou liu在APP store 上釋出的軟體“詐金花機率論”,根據劉先生的介紹,他的應用“是利用科學的機率論和數理統計分析原理”,可以看出,透過本文的模型得到的勝率資料,與劉先生的相差無幾,想必利用的方法是相似的

詐金花自動策略研究

以上便是本人建立的獲勝機率模型,當然,只知道勝率是不夠的,我們不能透過比勝率來決定勝負。所以,在下一個回中,我們來講講,如何用我們得到的具體勝率,來指定我們的遊戲策略。

3。詐金花策略模型

在上一回中,本文建立了一個透過手牌推測本局勝率的機率模型,還驗證了其有效性。但我們光是知道我們本局獲勝的機率,還並不能保證這是一個期望為正的系統。接下來,我們要設計一個基於勝率的決策系統,實現詐金花的自動策略。

3。1勝率的頻率

這裡,我們先分析一下不同勝率的手牌出現的機率,一共有22100種手牌組合,也就是說,在我們抽手牌的時候,一種手牌對應一個勝率,一共也只有這麼多種。為了直觀的展現不同的勝率出現的機率有多大,我們按照每25%一檔,將勝率0-100%分為了四擋,並分別求得了這四擋勝率對應的手牌出現的頻率。(為了減小計算量,我們隨機抽出2210種手牌,用來代表所有的手牌組合)

詐金花自動策略研究

五人場勝率-頻率直方圖

可以看出,勝率越高的手牌出現的頻率越低,這也是必然的。那麼我們多少的勝率該採取什麼樣的策略,如何保證這是一個正期望的系統,如何能保證自己在場上的存活性呢?這就是接下來要討論的事情。

3。2自動策略

3。2。1策略的描述

首先,我們知道了自己手牌的勝率,如果勝率不高,自然不能投入太多,雖然有能夠詐一詐對方的玩法,但這種玩法過於容易被自己的情緒所左右,對方的行為也非常難以預測,最終落得比牌的下場,依然是輸。

這裡我們就按照對一個比較常見的套路,在勝率高的時候,加大投注,在勝率低的時候,及早離場。

對此我們設定一個閾值,規定當我們手牌的勝率超過

T

的時候,無論其他玩傢什麼操作,我們一路跟下去,堅持在牌局中,直到投入我們該場牌局所帶的所有資金或者其他人退出或者有人選擇比牌。關於

資金規模控制

的事情,我們將會在後文的風險管理裡提到。

3。2。2策略的期望

假設 所有玩家都看了牌,大家投入的賭注時的倍數是一樣的,不存在有人不看牌而使其他玩家需要翻倍投注的現象。

其他玩家牌不好退出,牌好則留下,但是至少會有一位對手玩家留在場上(全退我們就不戰而勝了)。為了方便量化,我們就假設如果我們選擇留下來時,贏了的收益等於我們投入的

籌碼S

(STAKE)加上總人數減2倍的

鍋底

(即獲得本局牌權時的籌碼)

籌碼B

(BASIC)。

既然有了固定的

策略

,有了

閾值T

,知道了

獲勝機率W

以及各種獲勝機率對應的

頻率R

,我們就可以求得該策略的

數學期望值E。

假設當我們的勝率大於T的時候,我們一直保持在場中,直到結束時,我們一共投入籌碼S。這意味著我們要麼收益S+(N-2)*B,要麼損失S。

詐金花自動策略研究

根據公式,我們本局的期望E為:

詐金花自動策略研究

事實上,牌組的頻率分佈是離散的,但我們為了方便表示,使用了積分的形式來展現這個連加的過程。其中R是關於W的一個函式,表示當勝率為W的手牌出現的機率為R(W),具體的數值可以透過上文

勝率的頻率

中給出的方法求得。

為了讓我們的系統的期望值E為正,我們採取以下操作:

詐金花自動策略研究

詐金花自動策略研究

繼而

詐金花自動策略研究

也就是說,為了保證我們的詐金花策略的期望為正,我們要確保當我們的手牌勝率大於T的時候,能夠每局平均留住除去鍋底以外的S數量的籌碼在場上。至於如何才能讓牌桌上某個玩家的賭注超過S,這就是各位的技術問題了(畢竟如果一有好牌就狂押注,是會嚇跑別人的,假裝自己牌不好,猶猶豫豫的押注,說不定會引誘別人上當)。

3。3其他策略

當然,我們的策略模型也可以更加複雜,設定更多的閾值,就像數學上的分段函式那樣,機率是多少時就幹什麼事。但從本質上來講,這些模型和上文中的模型並沒有什麼區別,分析方法也和上文一樣,本文就不一一列舉了。

3。4風險管理

在詐金花的規則中,可以進行比牌,以及全壓等操作。理論上來說,抽到大勝率牌的牌就意味著能夠贏得牌局,所以連續輸掉大勝率牌並不常見,但不可否認,這種可能性是存在的,所以我們要控制每局的資金量,才能確保自己不會因為連續在抽到大勝率牌時輸掉而爆掉手中所有的資金。這就涉及到了確定我們

每局上牌桌時的資金量m

(也就是全壓時能夠涉及的所有資金)。

首先,我們要確定,應該把

總資金M

分散到多少局才能保證自己不容易爆掉,這裡的

n

代表我們把能夠連續輸掉的大勝率牌局數,也代表我們要把總資金分成n份。

詐金花自動策略研究

其中

詐金花自動策略研究

是我們已經抽到了勝率大於T的牌時,依然輸掉的機率。

每局上牌桌時的資金量m是根據總資金M和局數n確定的:

詐金花自動策略研究

透過這個方法來控制每局的資金量m,我們可以確保自己至少95%的機率,不會因為連續輸掉大勝率牌而把所有錢虧光。

3。5錢從何來

其實,在牌桌上玩久了的人,對自己拿到的手牌,心中都會有個大概的感覺,豹子必然是大的,單牌通常很小。大部分人也都是在遵循“勝率高的時候,加大投注,在勝率低的時候,及早離場”的套路。但人的感覺並不是一個非常具體的概念,而且受到各種因素的影響非常大(比如覺得自己手氣不錯,笑),可能有的人在手牌並不是非常大時,突然萌生了賭一把的想法,那他輸掉這場牌局的可能性還是很高的。

4。敏感性分析

雖然在上一回合的策略部分中,我們提到了能否在我們手牌的勝率大於T時,每局平均留住除去鍋底以外的S數量的籌碼是我們策略期望是否能夠期望為正的關鍵。但是要注意,其實S是一個變數,是透過期望為正的公式算出來的。本文這個自動策略中,唯一的可調引數其實是決定我們策略的閾值T,其他的幾個數值,比如獲勝機率W、頻率R都是透過我們的手牌計算得到的。

所以,我們關注非常閾值T取值對於系統的影響,閾值T的選取決定了籌碼S的變化,隨著T的調整,或許會存在一個最小的S(最容易達到的S)。另外,我們還要關注籌碼S是否會隨著閾值T的變動而發生劇烈的變動,也就是了解我們所建立的策略系統是否足夠穩健,能否經得起現實系統中,最優引數的微小改變。

4。1閾值T取值對於系統的影響

首先,我們規定實驗的背景環境,設牌局為五人場,鍋底B為100籌碼,然後求解隨著我們設定的閾值T的變化,在手牌勝率大於T時,為了保證策略系統的期望為正,我們要讓牌桌上某個玩家的賭注超過S。

詐金花自動策略研究

當然,籌碼S越小,這件事情越容易辦到。可以看出,當閾值T=0。32時,我們只需要在拿到大勝率牌時促使牌桌上某個玩家的賭注超過532籌碼,也就是大約5B的籌碼,就能實現期望為正的系統。

在最優值附近,閾值T每變動3%,籌碼S變動了0。245%,閾值T每變動10%,籌碼S變動了1。692%,可以說,整個模型是非常穩定的。

另外,我們可以得到,當閾值T選取為0。32時,我們在每1000場牌局中,將會參與243場(即拿到牌後跟下去),所以總體的參與次數並不低,這也利用我們在策略執行的過程中發現問題。

5。實測驗證

5。1模型結果驗證

為了驗證本文的機率模型,我在網上對文中的策略進行了實測,所用的平臺是軟體快樂炸翻天,經過本人測試,該軟體的抽牌機率部分是屬於正常機率的。在第一次測試中,我們一共在炸翻天的中級房中打盤145場,以下便是賬戶的淨值圖:

詐金花自動策略研究

可以看出,這是一個期望為正的系統,途中每一個點都代表我們賬戶此時的淨值,連續的一堆穩定下降的點,說明我們處於抽牌小勝率牌,然後棄牌的過程,而我們的利潤則來自於偶爾出現的大勝率牌。我們對淨值圖取線性迴歸,發現迴歸線的斜率在60左右,也就是說平均下來,底注每盤1000籌碼的局,我掙60籌碼。而根據我們之前提出的理論,當我們的手牌大於0。32勝率時,我們要促使牌桌上有人投注超過5注,也就是5000籌碼,根據記錄,我們在145盤中共遇到41次勝率大(大於0。32)的牌,而在這41盤中,我們共計吸引籌碼652500,平均每局15914,也就是說有人額外投注12915,即13注,可以說,是超過了我們的的最低需求。但是收益結果卻遠遠低於我們的預期,這說明我們的模型還存在一定缺陷,接下來我們將從結果進行分析,改進模型。

5。2結果分析

抽到小勝率牌時嗎,只有棄牌一條路,這個沒什麼可討論的,所以問題只會出在我們抽到大勝率時的決策上,那麼我們將所有抽到勝率大於0。32的牌按照25%為一檔,分類三類分別進行統計。

詐金花自動策略研究

很明顯的,我們的32%-50%勝率的牌,讓我們損失了不少利潤。低勝率的牌會損失錢倒也合理,如果我們無端的把這部分砍掉,那麼一旦我們拿到好牌,也不會有人往裡面跟。不過呢,這個損失的量是否合理,我們的模型是否合理,就是接下來要驗證的內容。

表格中紅色的部分,指的是在我們抽到牌以後,牌桌上的其他人看完牌要麼直接棄牌,要麼跟了一輪後棄牌,而到達最後比牌階段的只要9場,贏得比牌的只有1場,雖說樣本不多,但這勝率也太低了。再看50%-75%勝率的牌,到達最後比牌階段的要11場,勝利的有5場,也是低於我們的最低期望的。這說明一個問題,如果當對方,並不棄牌,而是選擇跟注並最終和我們比牌時,對方對自己的手牌是有一定自信的,此時我們的獲勝機率已經發生改變,這是一個條件機率。當對方棄牌,我們雖然贏了牌局,但最終的收益也只有一個鍋底,而對方選擇留下時,我們的勝率是遠低於我們之前的期望的。輸多贏少,自然會導致利潤的損失。

6。改進模型

前面我們分析了模型之所以沒有達到期望收益的可能原因,接下來我們將對模型就此提出一些改動,將在同一個牌局上其他玩家的行為納入到模型中去。

假設 當其他玩家在看牌以後,沒有棄牌,則說明他們的手牌並不小

雖然有些玩家在玩詐金花的時候會使詐,很小的手牌估計跟注加註,但就大多數情況而言,如果一個人看了牌後,依然跟注,至少他的手牌不會太小。此時我們在估計他手牌的時候,就不應該按照“獲勝機率模型”去計算我們勝率,而是計算一個條件機率,即在他的手牌大於等於某一牌面的條件下,我們的勝率。

至於對方會在多大的牌面留下,這就需要透過大量的資料進行引數估計,得到一個多數人的平均值,只要我們的樣本夠大,根據大數定律,我們定可以得到一個合理的臨界值。

這裡假設大家普遍在發現自己手牌是

Xab

(abandon)後棄牌,那根據先前的“其他玩家抽牌的機率模型”我們可以得到當一個玩家看牌後後依然跟注,則他

抽牌的機率分佈函式

應為:

詐金花自動策略研究

同理,當一個牌局裡有n個人都是看牌後跟注時,我們的

獲勝機率模型

應為:

詐金花自動策略研究

可以看出,改進後的機率分佈函式實則是一個m-1維的聯合分佈函式,是由未看牌的玩家的抽牌的機率分佈函式和看牌不棄玩家的抽牌的機率分佈函式組成,如果沒有玩家看牌且不棄牌,則該模型與上文中的原始獲勝機率模型一致。

6。1改進模型結果驗證

因為沒有足夠資料去估計其他玩家的棄牌臨界點,我們只能做出一個基本假設,認為其他玩家只有拿到不是單牌的情況下,才會選擇留下並跟注。以此作為臨界值,根據上文提出的改進模型,我們對所有可能性的手牌進行計算,最終得到以下結論:

五人場,每次主動看牌

場上無人看牌則對4以上留;

場上一人看牌且跟了,則對11及以上留;

場上兩人看牌且跟了,則對A及以上留;

場上三人看牌且跟了,則順子678及及以上留。

在第二次測試中,我們一共在炸翻天的中級房中與其他玩家打盤370盤,以下便是賬戶的淨值圖:

#FormatImgID_59##FormatImgID_60#

可以看出,在第一次測試中那種經常會出現的大損失已經被緩慢的衰落取而代之,這也就意味著在對方手牌不錯的情況下,我們及時的退了場,只損失了一個鍋底的籌碼。當然,接下來還需要進行具體的分析。

6。2結果分析

和之前一樣,我們將所有抽到勝率大於0。32的牌按照25%為一檔,分類三類分別進行統計。

詐金花自動策略研究

表格中紅色的部分,指的是在我們抽到牌以後,牌桌上的其他人看完牌要麼直接棄牌,要麼跟了一輪後棄牌的情況,而藍色指的是當牌桌上有人看牌後繼續跟,我們根據改進模型重新設定棄牌臨界值後,判斷應該棄牌的情況。與第一次測試的資料相比,75%-100%勝率的手牌盈虧改變不大(之所以會場均多了6000,是因為我在有一局拿到的手牌不錯,就一局下了10w的籌碼導致的,若是刨除這一局的話,場均應在2。2w左右),而32%-50%與50%-75%勝率的牌收益情況變化顯著。這主要是因為對方牌不是很差時,我們原本勝率不是很大的牌,更加受到影響,而我們拿到勝率很高的牌時,對方就算不是很差,也很難超過我們,所以影響較小。可以看到,在上表中32%-50%勝率的手牌出現了大量因為對方跟牌而棄牌的情況,雖然每次都會損失一注到兩注的籌碼,但相對於可能出現的二三十注的損失,是挽回了很多利潤的。

6。3策略評估

為了能夠更直觀的去評估本文的策略,我們採用了常用的交易指標評估方法,具體情況如下表所示:

詐金花自動策略研究

可以看出,本策略是透過少數幾次盈利,來彌補在場中的持續損失,並獲得利潤的,執行這個策略需要很好的心理素質,不然很可能會錯過我們獲得利潤的機會。此外,回撤比較大也是一個缺點,在實際操作過程中,需要據此和我們的總資金量來調整每局的單注大小。

7。演算法實現

在之前的章節中,我們已經將完整的詐金花自動策略講述完畢了。在這一章節中,我們將詳細的描述一下,自動決策系統在實行時會遇到的程式設計問題,並給出相應的演算法給予解決。

7。1排序

在本文中,我們是透過尋找我們的手牌在所有可能的牌組中的大小位置來確定抽牌的機率的,而確定大小位置的的前提是我們將所有可能的牌組都進行了大小排序。

為此,本文提出了一種特殊的對映關係,為每一種牌組都提供了一個索引,這個索引還能夠體現它們之間的大小關係。

首先,根據規則書,我們知道牌面的大小是從兩方面確定的,一是特定的組合,不同的組合之間有著絕對的大小關係,具體情況就如下表所示,上大下小:

詐金花自動策略研究

而在同一個組合內時,則依據牌組內最大的牌進行比較,如果在最大的牌相同,再比較次大的牌,總之最後總能分出個勝負平。

首先,為了能夠確定我們手中的牌到底是屬於什麼組合,我們構建以下決策樹:

#FormatImgID_67##FormatImgID_68#

然後,我們設計以下對映關係,將每一種手牌對應到一個實數域上的七位數。

顯然,因為,從某種程度上來說,這是一個滿射(當然不是實數域上的)。

為了能夠讓手牌對映的七位數直接代表牌組的的大小,我們要做出兩點改動

將組合按照大小編號

將A(1)用14替代,因為A(1)是比K還要大的牌面,這是與實數空間不同的地方。

詐金花自動策略研究

則,依據上面的兩個改動,以及我們建立的對映關係,我們可以的得到下表:

詐金花自動策略研究

就如同表中所示,黑桃A、紅桃A、方塊A對應數字6141414,紅桃J、紅桃A、紅桃5對應數字4141105 。這樣,牌組的大小就轉化為了數字的大小,排序也就是易如反掌的事情。

要注意的一點是,如果組合是對子,則排在數字(大)和數字(中)應該是組成對子的數字,零散的那張放在最後,因為對子組合比大小時,是先比較對子的大小。