捉虱子的博弈论

以下摘自《人性中的善良天使》的一章《心魔》,这里谈的是博弈论:
————
当人们的利益开始有一部分不一致 ,一方有可能利用对方的合作意愿为自己谋利的时候 ,他们之间的合作就不太容易解释了 。正和博弈的囚徒困境是描述此类难题最简单的模型 。想象一下 , 《法律与秩序 》连续剧中的一个场景 ,两个犯罪同伙 ( “左撇子 ”和 “布鲁特斯 ” )分别被关在两个牢房内 ,指控他们有罪的证据不够充分 ,于是区助理检察官分别向两个人提出谈判条件 。如果两人中的左撇子作证指控同伙布鲁特斯 ( “背叛 ” ) ,而布鲁特斯仍忠实于左撇子 (即继续与同伴保持 “合作 ” ) ,左撇子将获释 ,而布鲁特斯将被监禁 1 0年 ;反之亦然 。而如果两人互相背叛 ,作证指认对方犯罪 ,两人都将进监狱 ,但两人的刑期被减到 6年 。如果两人都保持忠诚 ,检察官只能指控他们较轻的罪名 ,两人至多在牢狱里蹲上 6个月 。图 8 5是这一困境的偿付矩阵 ,黑色字是第一个囚犯左撇子的选择和回报 ,灰色字是左撇子的同伙布鲁特斯的选择和回报 。图 8 5囚徒困境他们的悲剧是 ,两人本应合作 ,奖赏是仅仅 6个月的刑期 ,博弈得到最大正数解 ,但两人都会选择背叛 ,因为他们都想到对自己最有利的两个结果 :如果同伴忠诚 ,自己能获得自由 ;如果同伴背叛 ,自己也只是得到 6年刑期 ,而选择忠诚自己却有可能得到 1 0年刑期 。所以 ,他选择背叛 。而他的同伙出于同样推理 ,也选择背叛 。如果他们都能依据利他原则做选择 ,本来可以只坐 6个月的牢,但两人的自私自利让他们最后各得 6年刑期 。
囚徒困境被人们称为 2 0世纪最伟大的思想之一 ,它将社会生活的悲剧提炼成一个极为简洁的公式 。当同伙忠诚于合作 ,当事人却背叛同伙时能得到最大收益;当同伙背叛 ,当事人仍忠诚于合作时会得到最严厉的惩罚 ;两个人都坚持合作 ,总收益最大 ;而两人都背叛对方 ,总收益最小 ——每当面对这些选择 ,人类立刻就陷入困境。
一次性的囚徒困境结果当然很悲剧 ,但生活中更常见的是重复囚徒困境 ,参与者连续互动 ,经过数轮博弈得到最后结果。如果假定重复囚徒博弈的收益不是监狱和钞票 ,而是后裔的数量 ,或许可以更好地说明合作的演化 。重复囚徒困境下虚拟生物之间就互助机会或者不愿意帮助其他人 ——如相互梳理毛发 ,进行博弈 ,收益是身体的健康 ,成本是花费的时间 ,长期而言都可以转化为后代的数量 。重复博弈就像自然选择下的生物代际演化 ,我们可以观察哪些竞争策略在数代人之后逐渐成为大多数人的选择 。各种组合可能性的数量之大 ,很难进行数学证明 ,但是这些策略可以编程 ,一个简单的计算机应用程序即可让各种组合进行循环竞赛 。这些原本仅仅是理论家们的假设 ,有了计算机之后 ,他们可以清楚地观察各方和各种策略在虚拟进化中的斗争过程 。第一轮竞争由政治学家罗伯特 ·阿克塞尔罗德 ( R o b e r t A x e l r o d )主持 ,获胜的策略是简单的 “针锋相对 ”或 “一报还一报 ”( T i t f o r T a t ) :第一步是合作 ,接着 ,如果同伴也合作 ,就继续合作 ;但如果同伴背叛 ,就开始背叛 。因为合作得到奖赏 ,背叛受到惩罚 ,因此背叛者会改换行为 ,转为合作 ,长此以往 ,每个人都是赢家。
————

以上摘录完毕,先喘口气 . . .


我所感兴趣的是:“但是这些策略可以编程 一个简单的计算机应用程序即可让各种组合进行循环竞赛。”我设计的模型如下:

假设有一群猴子,由于居住地卫生条件不佳,他们的身上会定期长出虱子,如果虱子达到一定数量,猴子就会死去。猴子不能给自己捉虱子,它只能依靠别的猴子帮它捉虱子,以将虱子的数量控制在致命水平之下。
猴群中的猴子进行多轮博弈,一轮中又包括多个回合。每一轮开始前所有猴子按随机方式两两结对,然后你来我往进行4个回合的捉虱子,本轮结束后再重新结对进入下一轮博弈。
猴子按其采取的不同策略分为三个阵营(大组):
1) 仁爱组:本组的猴子品格十分高尚,具有毫不利己,专门利人的精神,不管对方的策略如何,总是选择合作,即无条件地帮对方捉虱子
2) 理性自利组:本组的猴子信奉“一报还一报”(Tit for tat)的人生哲学,如果首回合它是被动方,它会观察对方的行为,并在下回合进行模仿:比如对方选择合作,那么它在下回合选择合作,如果对方选择背叛,那么它在下回合选择背叛,之后的回合以此类推。如果首回合它是主动方,它会首先会选择合作,之后会回到前面的策略。
3) 搭便车组:这种猴子是仁爱组的反面,巧取豪夺,不劳而获,只顾自己,完全不考虑的他人利益。所以不管对方的策略如何,总是选择背叛。
当某只猴子因身上的虱子过多而死亡时,我们假设它的基因没能传递下去,其空出的位置将由一只新生的来自另外两个阵营的猴子代替,具体是哪个阵营由随机数决定。最后出现来自某个阵营中的猴子完全灭绝时,博弈结束。
根据以上的模型,我编写一个程序,之后进行了四次测试,每局开始时各阵营的猴子数不同,但总数都是1200只,其结果如下:
————

捉虱子的博弈论_第1张图片

————

其中Round是博弈轮次,Round0代表第0轮,即博弈开始之前的情况,GOOD代表当前仁爱者猴子数量,MEDIUM代表理性自利组数量,BAD代表搭便车组数量,Killed代表死于寄生虫的猴子总数,K/R代表平均到每轮死于寄生虫的猴子数量,最后这个指标可以表示猴群中总的痛苦指数,数值越大说明猴群中痛苦指数越高。
在第一局中,开始GOOD / MEDIUM / BAD是 400 / 400 / 400 平均分布,经过110轮
博弈,搭便车组灭绝,它的位置被仁爱组和理性自利组平分,总共755只,平均每轮6只猴子死于非命。
在第二局中,开始GOOD / MEDIUM / BAD是 1000 / 100 / 100 分布,经过167万轮博弈,搭便车组灭绝,它的位置被仁爱组和理性自利组平分,总共近4千万,平均每轮23只猴子死于非命。
在第三局中,开始GOOD / MEDIUM / BAD是 100 / 1000 / 100 分布,经过13轮博弈,搭便车组灭绝,它的位置被被仁爱组和理性自利组平分,总共100只,平均每轮7只猴子死于非命。
在第四局中,开始GOOD / MEDIUM / BAD是 100 / 100 / 1000 分布,经过44轮博弈,搭便车组灭绝,它的位置被仁爱组和理性自利组平分,总共1206只,平均每轮27只猴子死于非命。


几点感想:


在所有测试中,无论开始时占据多少比例,搭便车组都没有逃脱灭绝的命运,其中在理性自利组占绝对优势的第三局中创下了最快灭绝记录,仅仅过了13轮便全军覆没,此时另外两个阵营还没有任何损失。另外出人意料地,它在开始时占据绝对优势的第四局中灭绝的也相当快。可能是因为坏人数量大爆发后,只有背叛没有合作,在创造最大的痛苦指数之后,大家一块玩儿完,从而把位置留给了其他阵营。所以说不劳而获,巧取豪夺者即使得逞于一时,从长远角度看终将是害人害己,没有出路。
不过且慢,在仁爱组占绝对优势的第二局中,懒惰者坚持了167万轮才宣告退出历史舞台,如果每轮代表一个世代,这可就是几千万年,在这么大的时间尺度上再说坏人的失败毫无意义,因为那时很大概率整个人类也早已灭绝了。第二局不仅耗时接近于无穷,而且每轮的痛苦指数也不低,其原因不过就是来自仁爱组的滥好人数量过多,从而给了坏人可乘之机。老子《道德经》里说的“圣人不死,大盗不止”大概就是这个意思,总之量产雷锋可不像什么好主意。
和一般人的印象不同,我猜孔子也不属于仁爱组,据《论语》中记载,有人问孔子,“以德报怨,何如?”,孔子回答“何以报德?以直报怨,以德报德”。这不就是“一报还一报”的策略么。最后看看理性自利组的表现,它们不但在开局占优的第三局中保持了优势,干净利索地送搭便车组下车。在其它三局中也至少取得了半壁江山,特别是第二局和第四局是以劣势开局之后的咸鱼翻身。另外无论在均势开局的第一局和它优势开局的第三局,每轮的痛苦指数都很低。可谓是做到了“达则兼济天下,穷则独善其身”。所以我得出的结论和《人性中的善良天使》中的结论一样:光荣属于理性自利组。
我的代码参见 https://github.com/sunxiaoou/TIJ4/blob/master/tmp/CatchBug.java

你可能感兴趣的:(算法)