“法外狂徒”爲什麼那麼多?用程序來告訴你!

聽過《羅翔刑法課》的小夥伴,應該都認識一個人:“法外狂徒”張三。

那麼,爲什麼這個世界上會有壞人存在呢?

因爲在一個全是好人、相互完全信任的世界裏,偶爾出現的壞人能夠獲得巨大的競爭優勢。

畢竟,遵守規則的好人,很難贏過沒有底線的壞人:

那麼,既然壞人這麼有優勢,爲什麼不是所有人都去當壞人呢?

當然不行,如果一個社會里的壞人太多,人和人之間永遠都在相互防範,合作效率非常低。

這時候,如果有一批好人組成一個信任聯盟,這批好人就會在競爭當中脫穎而出:

那麼,在社會這個巨大賽場上,想要成爲競爭的優勝者,我們應該做一個什麼樣的人呢?

爲了找出答案,上世紀有一位名叫羅伯特·阿克塞爾羅德的美國教授,組織了一場關於“合作與背叛”的競賽。參賽者不是人類,而是許多具有不同策略的計算機程序。

羅伯特·阿克塞爾羅德

比賽分成很多回合,在每一回合,參賽者可以選擇與對方合作,或是背叛對方,合作帶來雙贏,背叛則是一方得利。

在諸多的程序裏,有些程序很蠢笨,有些程序很狡猾。那麼,什麼樣的程序更可能贏得比賽呢?從最終的比賽結果來看,採用了“一報還一報”的程序多次獲得比賽的第一名。

這個程序的策略十分簡單:

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—————

喜歡本文的朋友們,歡迎長按下圖關注公衆號程序員小灰,收看更多精彩內容

給個[在看],是對小灰最大的支持!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章