博弈論入門篇——「三個槍手」的心理博弈

博弈論是一門很有趣的學科,本文將以博弈問題《三個槍手》爲脈絡,從零基礎開始介紹博弈論,和大家一起博弈論是如何解決實際問題的。希望通過本文,讓大家都能聽懂博弈論。




題目:《三個槍手》

三個小夥子同時愛上了一個姑娘,爲了決定他們誰能娶這個姑娘,他們決定用槍進行一次決鬥。A的命中率是30%,B比他好些,命中率是50%,最出色的槍手是C,他從不失誤,命中率是100%。由於這個顯而易見的事實,爲公平起見,他們決定按這樣的順序:A先開槍,B第二,C最後。然後這樣循環,直到他們只剩下一個人。那麼A第一槍應該怎麼打?誰活下來的概率最大?

以下是初步討論過程,啓發大家思考:

論證: 每個人的目標都是活下來,爲了目標尋找最好的策略。以下開始分人討論 A: •若A開槍射殺了B,則下個開槍是C,C會100%射殺A,這不是一個好策略 •若A開槍射殺了C,則下一輪B會有50%的機率殺掉自己 •若A開槍未打中,則下一輪可以坐山觀虎鬥,所以A最好的策略看似是故意打空槍更好一些 B: •若A已經將C射殺,此時B與A互相射擊,B的生存率高於A •B只能選擇射殺C,因爲只要C活着,都會優先射殺B C: •先消除威脅大的B,然後再殺掉A,只要自己有開2槍的機會,直接獲勝

問題分析 & 博弈論基礎

不得不說,三個槍手在這種你死我亡的死鬥中還能嚴格遵守決鬥順序,實在是令人欽佩😳👍。

接下來,讓我們一起分析這個問題,並在分析的過程中介紹一些博弈論概念。



 

 

(1)基本特徵

我們繼續分析這個情況,首先需要明確:這是一場零和博弈,相信大家對這個詞都不陌生。

在零和博弈中,資源總量是固定的,合作不會產生任何額外收益,任何人的收益都意味着其他人等量的損失。

在這場決鬥中,大家爭鬥的資源就是這一個勝者的名額,任何一人的勝利就一定伴隨着其他二人的失敗,沒有任何共贏的途徑。因此這屬於典型的零和博弈。

這種“不是你死,就是我活”的零和博弈屬於典型的非合作博弈,其典型特點是博弈者需要絕對的利己,因爲合作不會共贏的。

同時,這場決鬥還滿足兩個條件:

① 每個人都知道其他人的命中率是多少。即,每個參與者都掌握了其他參與者的信息。

② 每個人行動有先後順序,且後行者能夠觀察到先行者所選擇的行動。

這兩個條件不妨概括爲:“信息透明”和“動態變化”。滿足這兩個條件,這種博弈被稱作完全信息動態博弈

(2)關鍵——納什均衡

從以上分析中,我們得出了這場博弈的三個特徵:1️⃣ 絕對利己、2️⃣ 信息透明、3️⃣ 動態變化。總結:

每個人想要獲勝,首先需要基於當前形勢(因爲局勢動態變化),並結合對手的信息(因爲信息透明),做出對自己最有利的決策(因爲絕對利己)。

基於以上特徵做出假設:不僅所有人都會做出自己的最優決策,並且他們做出最優決策的前提,是假設其他人也會做出最優決策。因爲信息透明,既然所有人都知根知底,大家就都會試圖預測其他人的決策,都是高手過招,誰的心眼兒也不比誰的少,誰也不覺得其他人會走一步臭棋😏。因此,我們可以認爲:每個人都是在“預判”其他人的最優決策,並以此爲基礎做出自己的最優決策。

這個假設是解答本問題的關鍵,只有建立了這個假設,我們纔可能計算出每位槍手的生存概率。否則,這個問題將變得完全隨機,再多的推理都沒有意義。試想,如果B、C上來一通亂打,不消滅對自己威脅最大的,先一致把槍口對準“小菜雞”A,那A的生存概率,可以說是幾乎沒有,計算A的生存概率還有意義嗎?




爲了方便大家理解,再舉個小栗子:

魚羊問題:A、B二人合夥做飯,A買肉,B下廚;A可以決定買什麼肉,B可以決定怎麼做。A可以買到的肉有:羊肉、魚肉,B會的做法分別是:烤肉、肉湯。A想喫到烤魚或者羊湯,B只想喝湯。A、B都知道對方的喜好,但都只想滿足自己的口味。那麼,A應該怎麼決策才能收益最大? 分析:這也是一個完全信息動態博弈問題:

完全信息——A、B都清楚對方想喫什麼;動態博弈——只有A先買完肉,B才能烹飪。

對於動態博弈問題,最好的分析工具是博弈樹。博弈樹的根節點代表博弈的開始,葉子節點代表博弈的終止。我們可以畫出這場博弈的博弈樹,如下:





 

這個博弈樹出現了兩次分叉,分別代表了A、B的兩次選擇,最終得到了4種結果。聰明的讀者們,如果你是A,會怎麼選呢?不妨用剛纔的假設推理:

因爲A知道:B選擇做湯對B的收益更高;

所以A假定:B一定會選擇對B收益更高的決策——做湯(預判其他人會做出最優決策);

於是A推演:如果A選了魚肉,也得不到烤魚,只會得到魚湯;如果A選了羊肉,可以得到羊湯,而羊湯對A的收益更高。

因此,A的最佳決策是選擇羊肉。A、B二人最終達成的最佳選擇是羊湯。

在魚羊問題中,正因爲A對B的選擇進行了預判,才讓自己得到了最大收益。




當我們發現,在一場博弈中,所有參與者都做到如此的“機關算盡”,在任何情況下都做出了最優決策,讓自己得到最大收益。當每個人的收益都無法再繼續擴大,這時博弈到達了一種均衡狀態,我們稱這個狀態爲納什均衡。所有參與者的最優策略集合被稱爲均衡解/均衡點。在納什均衡狀態下,各方的收益/勝率纔是可能被計算的。一局博弈也可能存在不止一個納什均衡解。

我們可以把博弈看作天平,如果每個博弈者都使出了渾身解數,讓勝利的天平向自己傾斜,直到任何一方都無法再擴大自己的優勢,達到一種“僵持”,那這就是納什均衡狀態。

比如在上面的魚羊問題中,“羊湯”就是這個博弈的納什均衡點。在該點,A、B雙方均獲得了各自的最高收益。

Tips:納什均衡(Nash Equilibrium)和約翰·納什 納什均衡是指這樣一種策略組合,在該策略組合中,每一個博弈者都相信,在給定競爭對手策略的情況下,他選擇了最優策略。任何一位玩家在此策略組合下,單方面改變自己的策略都不會提高自身的收益。 有趣的是,納什均衡下所達到的個人最大收益,並不一定能帶來整體的最大收益,比如經典的博弈案例“囚徒困境”,感興趣的讀者可以去看一看。 1950年,納什均衡由22歲的美國數學家約翰·納什提出,發表在他27頁的博士論文《非合作博弈》中。以“納什均衡”理論爲核心的非合作博弈論一經發布,隨即引起轟動,在經濟學以及與經濟學原理相關的金融、會計、營銷和政治等各個學科都掀起了巨大變革,奠定了現代主流博弈論和經濟理論的根本基礎。1994年,約翰·納什獲得諾貝爾經濟學獎。以約翰·納什爲原型的電影《美麗心靈》獲得了第74屆奧斯卡金像獎最佳導演與最佳影片獎。

(3)子博弈的納什均衡

在動態博弈問題中,博弈會按順序分多次進行,在整個博弈過程中會出現若干中間狀態,這些狀態源於這場博弈,由於博弈還未結束,因此如果將中間態視爲開始,也可以看作一場新的博弈,我們把這些博弈的中間狀態稱爲子博弈。對應到博弈樹中,博弈樹的每個非葉子節點都可看作一個子博弈。

如何理解子博弈: 圍棋、象棋等棋類運動是一種典型的動態博弈遊戲。整場博弈始於棋局開始,而「殘局」就可以視作整場博弈的子博弈。 棋類運動中的納什均衡: 在棋類運動中,讓雙方都“不喫虧”的下法也屬於納什均衡。象棋中的“當頭炮,把馬跳”,圍棋中的定式,這種幾乎約定俗成的經典下法,使雙方都能滿意,幾乎成爲了雙方的最優解,其本質就是納什均衡。

回到上文的魚羊問題,讓我們再次從子博弈和納什均衡的角度分析A的最佳決策。當A第一次做出決策後,我們看看A的兩個選擇所形成的兩個子博弈:

在“羊肉”分支的子博弈中,“羊湯”決策對B的收益更高,B選擇該決策收益最大,在這一子博弈中構成納什均衡;

在“魚肉”分支的子博弈中,“魚湯”決策對B的收益更高,B選擇該決策收益最大,在這一子博弈中構成納什均衡。

(這兩個子博弈是B的回合,所以只需讓B的收益最大)



 
 

 

那麼,我們就可以認爲:“羊湯”決策是“羊肉”子博弈的納什均衡解;“魚湯”決策是“魚肉”子博弈的納什均衡解。

(4)反向歸納法

如上面的例子,如果一個子博弈可以確定一個唯一的納什均衡解,那就意味着這個子博弈擁有一個讓博弈者利益最大的最優解,我們相信,只要博弈者願意讓自己的利益最大,他就一定會做出這個最優選擇。因此在納什均衡的假設下,我們可以用這個最優解作爲這個子博弈的結果。這正是我們之前提到的核心原則:“每個人都假設其他人也會做出最優決策”

基於這個原理,我們可以用子博弈的最優解來作爲子博弈的結果,即:

在“羊肉”節點,雙方的預期收益爲“ A:✅ B:✅”,在“魚肉”節點,雙方的預期收益爲“ A:❌ B:✅”。

顯然在這二者中,羊肉節點爲納什均衡解,因此A的最佳選擇就是羊肉。與之對應,羊湯就是整場博弈的納什均衡解。很遺憾,魚湯雖然是魚肉子博弈的納什均衡解,但不是整場博弈的納什均衡解。 由此,魚羊問題的整棵博弈樹爲:



 

 

以上,我們從納什均衡的角度重新推導了魚羊問題,這也是求解完全信息動態博弈問題的基本方法:

從博弈樹的所有葉子節點開始,找出所有葉子節點的納什均衡解,再反向推導回上一層節點,並得出上一層節點的納什均衡解,直到博弈樹根節點,最終得出整場博弈的納什均衡解。由於最終的納什均衡解是從子博弈中層層“精煉”而來,整個求解過程被稱爲子博弈精煉納什均衡,這個基本方法被稱爲反向歸納法

簡單理解,反向歸納法是一種基於結果去反向推理的思維,通過預測不同決策所帶來不同結果的好壞,從而選擇最好的決策。

問題求解

恭喜你!讀到這裏,你已經瞭解了博弈論的基本概念,並掌握瞭解決博弈問題的基本方法。

接下來讓我們進入正題,試着用反向歸納法解決一下「三個槍手」問題。

(1)畫博弈樹

分析這類動態博弈問題的第一步是:畫出博弈樹。

從第一回合開始,槍法最差的A先開槍,他有三個選擇:打B、打C,還有故意放空槍。

我們發現,對A而言,情況有點不確定性:當A選擇打B或打C時,結果不確定。因爲A只有30%的機率命中,而有70%的概率打不中,且沒打中和放空槍的效果是一樣的。因此,A的三個選擇只會帶來三個可能的結果:命中B、命中C、沒打中。我們畫出第一輪的博弈樹,如下圖所示:



 

 

在上面的博弈樹中,每個決策都可能導致“沒打中”的局面發生,因爲它們是一種情況,我們就只展開一個這類節點。




繼續按照這個思路展開博弈樹,讓我們看看下一回合局勢會如何發展:



 

 

如上圖所示,到了第二回合,輪到B開槍。這時B會面臨三種可能的情況:

(1)如果B已經被A打死了,那就只能遺憾跳過本輪,直接輪到C的回合(如第一個分支所示);

(2)如果C已經被A打死了,那場上只剩下兩個人,二人對射即可(如第二個分支所示)。補充一句,在只剩兩個人時,我們不考慮放空槍的選擇,這顯然沒有意義。

(3)如果A沒打中,那場上還有三個人,因此此時B仍有三個選擇:打A、打C和放空槍(如第三個分支所示)。




到第三回合,終於輪到百發百中的神槍手C出場啦!此處爲了簡化討論,我們不妨排除掉C打空槍的選項。原因有二:

(1)打空槍是爲了鷸蚌相爭,漁翁得利,而C作爲全場最強,會被其他人當作最大威脅,顯然難以“坐山觀虎鬥”。

(2)如果C本輪放空槍,博弈局面又將回到起點(輪到A開槍,三人都存活),而只要C開槍,就一定可以淘汰一個對手。對C而言,放棄這一先手機會顯然是不明智的。

那麼我們就繼續展開博弈樹,可以看到:如果本回合場上只剩下兩個人,C開槍一定會擊殺對手,從而在本輪取得勝利;如何本回合三人都存活,C殺掉一個,還會剩下一個,進入後面的博弈。我們繼續將剩下的情況全部推演完畢。整棵博弈樹如下圖所示:



 

 

可以看到,只要C不死,最快到第三回合,也就是C第一次開槍時,最遲到第六回合,也就是C第二次開槍時,整場博弈結束。

有的讀者會發現,這棵樹上有兩個被標記爲黃色的節點,沒有繼續展開,它們是博弈過程中,C首先被淘汰後出現的特殊情況,我將它們稱爲【B先手,AB對射】和【A先手,AB對射】。我們按下不表,稍後我們詳細討論這兩種情況。

(2)求支付矩陣

畫出了博弈樹,第二部是求每個葉子節點的支付矩陣。什麼叫「支付矩陣」?這個名詞其實有點難懂,我們換個叫法,它又被稱爲「收益矩陣」,用來描述每位博弈者在當前節點下的收益情況。這樣是不是好理解多了。舉個例子,還記得我們的老朋友——魚羊問題嗎?最右邊的一列,分別表示這個菜餚是否滿足了A、B二人的胃口,它就是支付矩陣。



 

 

爲什麼要求支付矩陣呢?因爲支付矩陣就是對當前博弈的判斷,反映出當前情形對誰更有利,對誰更不利,這樣才能方便做出最優選擇。

回到槍手問題中,如何衡量每個人的收益?這是一個零和博弈,所有人追求的就是成爲最後的生還者,那麼「勝率」就成爲衡量收益的標杆。求葉子節點的“勝率矩陣”也很簡單,誰贏了,他的勝率就是1,敗者是0。

我們用【A,B,C】的順序,分別代表三個槍手的勝率,例如C獲勝,對應支付矩陣就是【0,0,1】。我們將支付矩陣標註到博弈樹的所有葉子節點上,如圖中所有綠色的節點:



 

 

(3)反向歸納

在上面的兩步中,我們已經畫出了博弈樹,並求出了葉子節點的支付矩陣。前兩步都是準備工作,接下來就是第三步,也是求解過程中最核心的邏輯:反向歸納法。在這個博弈中,有幾個需要提示的規則:

(1)概率問題:當一個選擇可能有多個結果時,這個選擇的支付矩陣是多個結果的支付矩陣的加權平均。如B選擇打C,命中率是50%,如果命中後的支付矩陣是【0,1,0】,未命中的支付矩陣是【0,0,1】,那麼,這個選擇的支付矩陣就是【0,1,0】* 50% + 【0,0,1】* 50% = 【0,0.5,0.5】。也就是說,這個選擇有50%的概率B獲勝,有50%的概率C獲勝。

(2)最優選擇:當一個人面臨多個選擇時,他一定會從每個選擇的支付矩陣中,選擇他自己勝率最高的那個。這也就是他這個子博弈的納什均衡解。

大家可以用上面兩個提示,試着反向推導一下博弈樹,看看我們得到的結果是否一致:



 

 

以上是用葉子節點反向歸納後得到的博弈樹,所有已經求出支付矩陣的節點被標記爲了綠色。我們注意到,在圖中出現了一個“❌”和一個“✅”,這代表一次分支選擇,被標記“✅”的分支是被選中的納什均衡解,被標記“❌”的分支則是被淘汰的分支。

讓我們看看這次選擇:這個子博弈出現在第三回合,此時輪到C開槍,A、B都存活,C需要選擇打A還是打B。從圖中不難看出,C如果選擇打A,自己的勝率是0.5,如果選擇打B,自己的勝率會提升到0.7,因爲他先解決了更強的對手。因此C一定會選擇後者,那麼這個子博弈的支付矩陣,就取這個納什均衡解的支付矩陣。

(4)「菜雞互啄」問題

當問題推導到這裏時,我們發現無法進行下去了——因爲我們前面還留了兩個節點沒有展開,無法求支付矩陣。那就讓我們看看如何處理這兩個節點吧。

這兩個子博弈是在博弈過程中,C首先被淘汰後出現的特殊情況,分別是【B先手,AB對射】和【A先手,AB對射】。此時,由於場上只剩下A、B,因此二人的射擊目標只有對方,但由於A、B二人都不能保證百發百中,因此射不到對方的情況理論上永遠存在(一般這種情況被稱作:菜雞互啄),如果無限推演下去,博弈樹只會陷入死循環,因爲沒有出口。這下該如何計算雙方的勝率呢?讓我們以【A先手,AB對射】爲例,先分析一下每輪情況。

設A的命中率爲a,B的命中率爲b,A先手,則每輪發生的情況的概率如下:

  回合一:A 回合二:B 回合三:A 回合四:B ...
命中的概率 a (1-a)b (1-a)(1-b)a (1-a)(1-b)(1-a)b ...
未命中概率 1-a (1-a)(1-b) (1-a)(1-b)(1-a) (1-a)(1-b)(1-a)(1-b) ...

上表是怎麼算出來的?二者只要有一方命中,遊戲即會結束。如果未命中,則在本輪未命中概率的基礎上,分別乘以下個人的命中率,就會分別得到下輪的命中概率和未命中概率:



 

 

如何計算A的勝率?A的勝率,即爲A每回合命中的概率之和,即:

 

 
 

 

是不是看起來很眼熟?你沒有猜錯,我們需要使用微積分了(死去的微積分突然攻擊我😭)。友情建議:看到數學就頭大的讀者請自行跳過這部分。

上面的式子可以表示爲:

 

 
 

 

我們可以發現,這是一個冪級數求和問題。如果還沒太看清,我們令

 
 ,則原式變爲:

 

 

 
 

 

我們先判斷斂散性:由於

 
 ,則
 
 ,那麼
 


 

因冪級數

 
 的收斂域是
 
 ,因此該冪級數收斂。

 

根據公式

 
 ,可得:

 

 

 
 

 

這樣,我們就得到了A先手,A、B對射時A的勝率。我們知道A的命中率爲30%,B的命中率是50%,我們將

 

 
 帶入可得:

 

 

 
 。相應地,此時B的勝率
 
 .

 

同樣的公式,當轉換爲B先手,A、B對射時,

 

 

 
 代入,可得:

 

 

 

 


 

(5)得出答案

有了上一步計算出來的兩個特殊子博弈中A、B的勝率,我們可以得出:

【A先手,AB對射】的支付矩陣是【6/13,7/13,0】。

【B先手,AB對射】的支付矩陣是【3/13,10/13,0】。

繼續完善博弈樹,並完成後續的反向歸納過程,最終得到的結果是:



 

 

我們通過反向歸納法得到了A第一回合的三個選擇的支付矩陣,比較三種選擇下A的勝率:

A打B——26.7%;A打C——33.6%;打空槍——38.1%,因此我們終於可以得出這個問題的答案:A的最優策略是打空槍,生存概率是38.1%(99/260).

這個答案同樣也論證了我們一開始的預期——A最好的策略看似是故意打空槍更好一些。有趣的是,這場博弈中,A、B、C的勝率分別爲38.1%、26.9%和35%(納什均衡狀態下),看來槍法最差的A生存下來的概率果然也是最高的呢!當然,個人認爲,他之所以能擁有最高勝率,主要還是因爲他可以先手啦。

以上,我們就給出了「三個槍手」動態博弈問題的解決方案,希望通過以上解答,帶大家搞懂博弈論的基本原理。想必一定有讀者有疑問:太麻煩了,難道每次都要畫一遍博弈樹,手動推演一遍不成?彆着急,我將給出以上問題的代碼實現,請看下回分解。

 

                 掃一掃,與作者技術交流一下吧

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章