之前我提到过 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)中谈到了很多 其他一些选做的作业中也会要求大家阅读相关的材料