1. 程式人生 > >美女和男人博弈過程的模擬(莊家和散戶的博弈)

美女和男人博弈過程的模擬(莊家和散戶的博弈)

在網上看到了一個有意思的話題”中國股市適合散戶嗎?”,有人舉了一個美女和男士博弈的例子,這個例子表面看上去,勝負的概率各佔50%,但是經過一些數學推算,發現經過多次博弈後,美女總是能夠穩贏!

這個結論對我的衝擊比較大,讓我對自己的直覺產生了懷疑.理論歸理論,我們能不能使用事實來模擬證明一下呢?找人來模擬這個博弈貌似不現實,作為程式設計師,很快就想到了使用程式來模擬.

我們分三步走,第一步:分析例子. 第二步:書寫程式碼. 第三步:測試模擬.

第一步,分析例子:美女和男士玩硬幣的故事.

規則是這樣的,美女和男士各自有一個硬幣,兩人可以選擇出硬幣的正面或反面.如果兩人的硬幣都是正面,男士將獲得3,如果兩人的硬幣都是反面

,男士將獲得1.如果兩人的硬幣一正一反,那麼男士將失去2.男士的收益圖如下圖所示


表面一看,上面每種情況出現的概率都是1/4, 所以最終男士得到的獎勵為 0.25 * 3 + 0.25 * 1 - 0.25 * 2 -0.25 *2 = 0, 不贏不輸嘛~

但是經過分析,如果美女把控好出硬幣正面的概率,那麼不管男士怎麼調整出硬幣正面的概率,經過多次博弈後,男士都會輸! 這個分析過程略複雜,也不是本次要關注的重點,感興趣的話,可以看視訊裡面的分析過程.我們暫且先記住結論:只要美女出正面的概率在(1/3,2/5)之間,那麼男士就會一直輸錢. (貌似好神祕的樣子)


第二步,書寫程式碼

因為過程比較簡單,使用C,java,python

都可以進行模擬.那就選擇開發比較快的python.

# -*- coding: utf-8 -*-  
import random

def girl_result(probality_of_girl):
    probality=random.random()
    if probality < probality_of_girl:
        return "正面"
    else :
        return "反面"  
def boy_result(probility_of_boy):
  
    probality=random.random()
#    print(probality)
    if probality < probility_of_boy:
        return "正面"
    else:
        return "反面"
def game_gambing(times,probility_of_boy,probality_of_girl):
    money = 0
    for i in range(times):
        temp_result =girl_result(probality_of_girl)
        if temp_result == boy_result(probility_of_boy):
            if temp_result == "正面":
                money += 3
            else :
                money += 1
        else :
            money += -2     
    return money                         
if __name__ == '__main__':
    for j in range(1,10):
        game_times = 10000
        probality_of_girl = round(0.9,2)
        result_money =game_gambing(game_times,round(0.1*j,2),probality_of_girl) 
        print("女人出正面的概率為 "+str(probality_of_girl)+",第"+str(j)+"個男人出正面的概率為"+str(round(0.1*j,2))+",博弈次數為: "+str(game_times)+" 他贏得的錢為: "+str(result_money))
    
第三步,測試:

按照結論,我們在1/32/5之間取一個數,比如0.37,如果美女一直以這個概率來出正面,那麼多次博弈後,應該會穩贏.

假設有9個不同概率偏好的男士來進行博弈,他們出正面的的概率分別為0.10.9,分別博弈10000.博弈結果如下:


為了進一步驗證程式的正確性,我們可以調整美女出正面的概率,比如調成0.1,那麼理論上來說,男人出正面的概率越低,,越容易贏到錢,因為這意味著在多數情況下,兩人出的都是反面,看一下模擬的結果:


如果美女出正面的概率偏大,比如0.9,那麼男人出正面的概率越大,越容易贏到錢,因為這意味著在多數情況下,兩人出的都是正面,看一下模擬結果:


證明完畢~

感觸:學好數學真的很重要.