法外狂徒为什么那么多用程序来告诉你「法外狂徒为什么那么多用程序来告诉你」

原创 小灰 程序员小灰
听过《罗翔刑法课》的小伙伴,应该都认识一个人:“法外狂徒”张三 。
那么,为什么这个世界上会有坏人存在呢?
因为在一个全是好人、相互完全信任的世界里,偶尔出现的坏人能够获得巨大的竞争优势 。
毕竟,遵守规则的好人 , 很难赢过没有底线的坏人:

法外狂徒为什么那么多用程序来告诉你「法外狂徒为什么那么多用程序来告诉你」

文章插图
那么 , 既然坏人这么有优势 , 为什么不是所有人都去当坏人呢?
当然不行 , 如果一个社会里的坏人太多 , 人和人之间永远都在相互防范,合作效率非常低 。
这时候 , 如果有一批好人组成一个信任联盟,这批好人就会在竞争当中脱颖而出:
法外狂徒为什么那么多用程序来告诉你「法外狂徒为什么那么多用程序来告诉你」

文章插图
那么,在社会这个巨大赛场上,想要成为竞争的优胜者,我们应该做一个什么样的人呢?
为了找出答案 , 上世纪有一位名叫罗伯特·阿克塞尔罗德的美国教授,组织了一场关于“合作与背叛”的竞赛 。参赛者不是人类,而是许多具有不同策略的计算机程序 。
法外狂徒为什么那么多用程序来告诉你「法外狂徒为什么那么多用程序来告诉你」

文章插图
罗伯特·阿克塞尔罗德
比赛分成很多回合,在每一回合,参赛者可以选择与对方合作,或是背叛对方,合作带来双赢,背叛则是一方得利 。
在诸多的程序里,有些程序很蠢笨,有些程序很狡猾 。那么 , 什么样的程序更可能赢得比赛呢?从最终的比赛结果来看,采用了“一报还一报”的程序多次获得比赛的第一名 。
法外狂徒为什么那么多用程序来告诉你「法外狂徒为什么那么多用程序来告诉你」

文章插图
这个程序的策略十分简单:
1.与参赛者X第一次互动的时候,选择合作 。(假设对方是善意的)
2.如果X在上一次互动中选择合作,那么本次自己也选择合作 。(奖励对方的合作行为)
3.如果X在上一次互动中选择背叛,那么本次自己也选择背叛 。(惩罚对方的背叛行为)
这就是所谓的一报还一报 。
虽然这个比赛仅仅是一个简化的模型,但是也或多或少反映了现实中的情况 。在现实里,想要尽可能和更多的人合作共赢,又要避免被人坑骗,一报还一报的确是一个相对合理的策略 。
尽管这个理论看起来很完美 。但是我们作为刨根问底的程序员,还是应该亲自动手实践一下 。
小灰最近写了一个程序,再现了这个“合作与背叛”的比赛,并且按照自己的想法编写了各种策略,试图找出有没有比“一报还一报”更好的竞争策略 。
这一实践让我产生了许多新的认识 , 自认为还蛮有意思,今天特意分享给大家 。
首先说一说小灰这个程序中的具体比赛规则:
1. 比赛分成M回合 , 一共有N个参赛者(N为偶数):
法外狂徒为什么那么多用程序来告诉你「法外狂徒为什么那么多用程序来告诉你」

文章插图
2. 每一回合,参赛者随机分成两两一组进行互动:
法外狂徒为什么那么多用程序来告诉你「法外狂徒为什么那么多用程序来告诉你」

文章插图
3. 在互动中,参赛者可以选择“合作”或是“背叛”,根据双方不同选择,会更加或扣减一定的分数 。总共分为三种情况:
法外狂徒为什么那么多用程序来告诉你「法外狂徒为什么那么多用程序来告诉你」

文章插图
4. M回合之后,所有参赛者按照总分值进行排名 。
法外狂徒为什么那么多用程序来告诉你「法外狂徒为什么那么多用程序来告诉你」

文章插图
根据游戏规则,小灰也设计了6种不同风格的参赛者,他们各有各的博弈策略: