聽過《羅翔刑法課》的小夥伴,應該都認識一個人:“法外狂徒”張三。
那麼,爲什麼這個世界上會有壞人存在呢?
因爲在一個全是好人、相互完全信任的世界裏,偶爾出現的壞人能夠獲得巨大的競爭優勢。
畢竟,遵守規則的好人,很難贏過沒有底線的壞人:
那麼,既然壞人這麼有優勢,爲什麼不是所有人都去當壞人呢?
當然不行,如果一個社會里的壞人太多,人和人之間永遠都在相互防範,合作效率非常低。
這時候,如果有一批好人組成一個信任聯盟,這批好人就會在競爭當中脫穎而出:
那麼,在社會這個巨大賽場上,想要成爲競爭的優勝者,我們應該做一個什麼樣的人呢?
爲了找出答案,上世紀有一位名叫羅伯特·阿克塞爾羅德的美國教授,組織了一場關於“合作與背叛”的競賽。參賽者不是人類,而是許多具有不同策略的計算機程序。
羅伯特·阿克塞爾羅德
比賽分成很多回合,在每一回合,參賽者可以選擇與對方合作,或是背叛對方,合作帶來雙贏,背叛則是一方得利。
在諸多的程序裏,有些程序很蠢笨,有些程序很狡猾。那麼,什麼樣的程序更可能贏得比賽呢?從最終的比賽結果來看,採用了“一報還一報”的程序多次獲得比賽的第一名。
這個程序的策略十分簡單:
1.與參賽者X第一次互動的時候,選擇合作。(假設對方是善意的)
2.如果X在上一次互動中選擇合作,那麼本次自己也選擇合作。(獎勵對方的合作行爲)
3.如果X在上一次互動中選擇背叛,那麼本次自己也選擇背叛。(懲罰對方的背叛行爲)
這就是所謂的一報還一報。
雖然這個比賽僅僅是一個簡化的模型,但是也或多或少反映了現實中的情況。在現實裏,想要儘可能和更多的人合作共贏,又要避免被人坑騙,一報還一報的確是一個相對合理的策略。
儘管這個理論看起來很完美。但是我們作爲刨根問底的程序員,還是應該親自動手實踐一下。
小灰最近寫了一個程序,再現了這個“合作與背叛”的比賽,並且按照自己的想法編寫了各種策略,試圖找出有沒有比“一報還一報”更好的競爭策略。
這一實踐讓我產生了許多新的認識,自認爲還蠻有意思,今天特意分享給大家。
首先說一說小灰這個程序中的具體比賽規則:
1. 比賽分成M回合,一共有N個參賽者(N爲偶數):
2. 每一回合,參賽者隨機分成兩兩一組進行互動:
3. 在互動中,參賽者可以選擇“合作”或是“背叛”,根據雙方不同選擇,會更加或扣減一定的分數。總共分爲三種情況:
4. M回合之後,所有參賽者按照總分值進行排名。
根據遊戲規則,小灰也設計了6種不同風格的參賽者,他們各有各的博弈策略:
1. 老實型
這個類型的參賽者永遠選擇合作,從不背叛。
2. 騙子型
這個類型的參賽者永遠選擇背叛,從不合作。
3. 偶爾欺騙型
大部分時候選擇合作,但是有10%的機率會選擇背叛。
4. 一報還一報型
如上文所述,這個類型的參賽者會記住對方上一次與自己互動時候的選擇。如果對方上次合作,本次自己也合作;如果對方上次背叛;本次自己也背叛。
5 記仇到底型
這個類型的參賽者同樣記住對方上一次與自己互動時候的選擇。但只要對方背叛過自己一次,自己就永遠會選擇背叛他。
6. 晚節不保型
在前80%的回合,按照一報還一報的方式行動;在最後20%的回合,只背叛不合作。
那麼,我們應該選擇多少人蔘賽,又該設置多少回合數呢?
小灰設計了4局比賽,每一局比賽的參賽人數與回合數如下:
小灰運行了一下,這4局的比賽結果如下(只列出前10名):
第1局(20人,50回合)
類型:騙子型 得分:420
類型:晚節不保型 得分:405
類型:晚節不保型 得分:380
類型:偶爾欺騙型 得分:365
類型:晚節不保型 得分:360
類型:晚節不保型 得分:355
類型:一報還一報型 得分:350
類型:騙子型 得分:345
類型:騙子型 得分:345
類型:記仇到底型 得分:340
第2局(100人,50回合)
類型:騙子型 得分:555
類型:騙子型 得分:540
類型:騙子型 得分:525
類型:騙子型 得分:510
類型:晚節不保型 得分:485
類型:騙子型 得分:480
類型:晚節不保型 得分:480
類型:騙子型 得分:480
類型:晚節不保型 得分:480
類型:晚節不保型 得分:475
第3局(20人,300回合)
類型:晚節不保型 得分:2500
類型:記仇到底型 得分:2430
類型:老實型 得分:2425
類型:老實型 得分:2420
類型:一報還一報型 得分:2405
類型:一報還一報型 得分:2385
類型:晚節不保型 得分:2385
類型:一報還一報型 得分:2375
類型:一報還一報型 得分:2375
類型:晚節不保型 得分:2360
第4局(100人,300回合)
類型:晚節不保型 得分:2540
類型:記仇到底型 得分:2460
類型:晚節不保型 得分:2450
類型:晚節不保型 得分:2430
類型:晚節不保型 得分:2405
類型:晚節不保型 得分:2400
類型:晚節不保型 得分:2390
類型:記仇到底型 得分:2370
類型:老實型 得分:2370
類型:晚節不保型 得分:2355
從上面的結果,我們不難得出幾個結論:
1. 在參賽者較多,回合數較少的局面下,騙子型佔有巨大優勢。
2. 在參賽人數較少,回合數較多的局面下,老實人以及願意首先合作的人開始顯現出優勢。
3. 偶爾欺騙型,無論在哪個局面都不佔優勢。
4. 相比於一報還一報型,晚節不保型佔據了絕對優勢。
當然,這僅僅是一個簡單的博弈模型,現實世界遠比這複雜得多:
首先,現實世界有法律武器,一個人的背叛行爲是要付出代價的。
其次,現實世界有信用體系,當一個人遭到背叛的時候,他不僅會自己記住,還會把背叛者的惡行儘可能告知給更多的人,讓大家都知道這個人不可信。
再次,一個人自身的惡行不僅影響到自己,也影響到後代的聲譽。因此,誰要是選擇“晚節不保”,自己的後代就可能會承擔後果。
但是無論如何,這個博弈模擬遊戲仍然具有一定的研究價值和趣味性。同時,小灰開發的這段程序有一定的可擴展性,有興趣的小夥伴也可以在我的基礎上開發出更多參賽者類型,相互PK一下,看看哪一種類型能夠大概率勝出。
小灰已經把這個程序的代碼傳到了GitHub上面,地址如下:
https://github.com/bjweimengshu/CooperationGame
大家也可以點擊【閱讀原文】直接跳轉。
—————END—————
喜歡本文的朋友們,歡迎長按下圖關注公衆號程序員小灰,收看更多精彩內容
給個[在看],是對小灰最大的支持!