法外狂徒為什么那么多用程序來告訴你「法外狂徒為什么那么多用程序來告訴你」

原創 小灰 程序員小灰
聽過《羅翔刑法課》的小伙伴,應該都認識一個人:“法外狂徒”張三 。
那么,為什么這個世界上會有壞人存在呢?
因為在一個全是好人、相互完全信任的世界里,偶爾出現的壞人能夠獲得巨大的競爭優勢 。
畢竟,遵守規則的好人 , 很難贏過沒有底線的壞人:

法外狂徒為什么那么多用程序來告訴你「法外狂徒為什么那么多用程序來告訴你」

文章插圖
那么 , 既然壞人這么有優勢 , 為什么不是所有人都去當壞人呢?
當然不行 , 如果一個社會里的壞人太多 , 人和人之間永遠都在相互防范,合作效率非常低 。
這時候 , 如果有一批好人組成一個信任聯盟,這批好人就會在競爭當中脫穎而出:
法外狂徒為什么那么多用程序來告訴你「法外狂徒為什么那么多用程序來告訴你」

文章插圖
那么,在社會這個巨大賽場上,想要成為競爭的優勝者,我們應該做一個什么樣的人呢?
為了找出答案 , 上世紀有一位名叫羅伯特·阿克塞爾羅德的美國教授,組織了一場關于“合作與背叛”的競賽 。參賽者不是人類,而是許多具有不同策略的計算機程序 。
法外狂徒為什么那么多用程序來告訴你「法外狂徒為什么那么多用程序來告訴你」

文章插圖
羅伯特·阿克塞爾羅德
比賽分成很多回合,在每一回合,參賽者可以選擇與對方合作,或是背叛對方,合作帶來雙贏,背叛則是一方得利 。
在諸多的程序里,有些程序很蠢笨,有些程序很狡猾 。那么 , 什么樣的程序更可能贏得比賽呢?從最終的比賽結果來看,采用了“一報還一報”的程序多次獲得比賽的第一名 。
法外狂徒為什么那么多用程序來告訴你「法外狂徒為什么那么多用程序來告訴你」

文章插圖
這個程序的策略十分簡單:
1.與參賽者X第一次互動的時候,選擇合作 。(假設對方是善意的)
2.如果X在上一次互動中選擇合作,那么本次自己也選擇合作 。(獎勵對方的合作行為)
3.如果X在上一次互動中選擇背叛,那么本次自己也選擇背叛 。(懲罰對方的背叛行為)
這就是所謂的一報還一報 。
雖然這個比賽僅僅是一個簡化的模型,但是也或多或少反映了現實中的情況 。在現實里,想要盡可能和更多的人合作共贏,又要避免被人坑騙,一報還一報的確是一個相對合理的策略 。
盡管這個理論看起來很完美 。但是我們作為刨根問底的程序員,還是應該親自動手實踐一下 。
小灰最近寫了一個程序,再現了這個“合作與背叛”的比賽,并且按照自己的想法編寫了各種策略,試圖找出有沒有比“一報還一報”更好的競爭策略 。
這一實踐讓我產生了許多新的認識 , 自認為還蠻有意思,今天特意分享給大家 。
首先說一說小灰這個程序中的具體比賽規則:
1. 比賽分成M回合 , 一共有N個參賽者(N為偶數):
法外狂徒為什么那么多用程序來告訴你「法外狂徒為什么那么多用程序來告訴你」

文章插圖
2. 每一回合,參賽者隨機分成兩兩一組進行互動:
法外狂徒為什么那么多用程序來告訴你「法外狂徒為什么那么多用程序來告訴你」

文章插圖
3. 在互動中,參賽者可以選擇“合作”或是“背叛”,根據雙方不同選擇,會更加或扣減一定的分數 ??偣卜譃槿N情況:
法外狂徒為什么那么多用程序來告訴你「法外狂徒為什么那么多用程序來告訴你」

文章插圖
4. M回合之后,所有參賽者按照總分值進行排名 。
法外狂徒為什么那么多用程序來告訴你「法外狂徒為什么那么多用程序來告訴你」

文章插圖
根據游戲規則,小灰也設計了6種不同風格的參賽者,他們各有各的博弈策略: