之前我提到过 Netlogo 自带库中有很多关于囚徒困境的模型
我们现在所看到的就是其中的一个
模型名是“PD-N-Person-Iterated”
你可以从我们的课程材料页面上下载这个模型
和我们之前讨论过的不同
这个模型有多个主体 这些都是不同的主体
每一个都表示一种囚徒困境中的策略
这里就是这些策略
“随机”（random）表示要么合作 要么检举 每次随机选择一个
这个表示一直合作
这个表示一直检举
这是之前介绍的 Tit-for-Tat
“不可原谅”（unforgiving）
这个策略一直选择合作 直到对方选择检举
然后该策略选择检举 并且一直保持不变
永远不原谅对方的背叛
“未知”（unknown）现在依然是0
你可以在代码页面中添加进你自己设计的策略
现在我们不用这一部分 我们把它放在作业中
现在我们要做的是 这些策略每一种我们都有10个
我们要观察他们互相作用的过程
点击 go 开始执行
稍微加快一点速度
你能发现 它们开始运动
当互相靠近并相交时 它们将用各自的策略进行囚徒困境判断
每一轮游戏 在主体旁边都显示了得分
你也能从左下角看到每一种策略的平均得分
“一直检举”的策略是得分最高的
排在第二的是“随机”
然后是“Tit-for-Tat” 再往后是“不可原谅”
得分最低的是“一直合作”
但如果我们把速度调快一点然后运行一段时间
我们会发现结果随着时间的推移而发生了变化
你可以把速度调的相当快
你会发现“一直检举”的得分在降低
“一直检举”的得分降低了 而"Tit-for-Tat"超过了“一直检举”
好的 不管怎样 我会在作业中布置一些关于这个模型的练习
这样你就会明白为什么会发生这样的现象
Axelrod 从这些锦标赛中总结出了以下几点规律
表现较好的策略 是“善良的”（nice） 因为绝不最先检举对方
是“宽容的”（forgiving） 因为如果对方合作的话 自己也会合作
是“报复性的”（retaliatory） 如果对方检举自己 那么自己也会检举对方
最后还有一点 是“清晰的”（clear） 也就是自己的策略是什么非常透明
对手很清楚地知道你做了什么 并且作为对方的决策参考
对方能推测出你的选择 能知道你是属于报复性还是宽恕的
这些就是在囚徒困境模型环境中能够诱导互利合作发生的条件
至少说在循环进行的囚徒困境游戏中是如此
很多人也把这些条件作为真实世界中促进合作的通用特征
比如在军备竞赛等这样的情景中
当然 Tit-for-Tat 满足以上所有这些特征
这就是我想介绍的“囚徒困境”问题的全部内容
事实上这是一个很大的领域 具有很多不同的变形
在课程材料页面 我放了很多参考文献
里面有很多不同类型的变体
Axelrod 写的那本《合作的复杂性》（Complexity of Cooperation）中谈到了很多
其他一些选做的作业中也会要求大家阅读相关的材料