重复的囚徒困境博弈中应该如何决策?--阿克塞尔罗德竞赛(Axelrod‘s Tournament)实验
这里是实验代码仓库:https://github.com/liaoyanqing666/Prisoner-s_Dilemma
当面对囚徒困境时,为了获得个人最佳利益,参与方会倾向于互相背叛这个纳什均衡点。
如果这个选择会重复几十次,而且你面对的对手会观察你以前的行为,再决定如何回报,你还会坚持原来的决定吗?
这就是“重复的囚徒困境”(Iterated Prisoner’s Dilemma)——一个从社会科学、人工智能到现实生活都广泛存在的经典博弈问题。今天,我们不只是谈论这个问题,而是带你回顾一场历史性的实验,并亲自复现它。
阿克塞尔罗德竞赛(Axelrod's Tournament)
1980年,政治学家罗伯特·阿克塞尔罗德(Robert Axelrod)发起了一场实验:他邀请各领域的专家提交策略程序,让它们在重复囚徒困境环境中互相对战,从而观察哪些策略更能在长期互动中获胜。这场被称为 Axelrod’s Tournament 的竞赛后来成为博弈论史上最经典的实验之一。
结果出人意料地简洁:Tit For Tat(以牙还牙) 这样朴素的策略脱颖而出,成为了当时的总冠军。它的策略极为简单:第一轮先合作,以后就复制对方的上一轮选择——友善但不软弱,宽容但有底线。
原始论文名称为《Effective Choice in the Prisoner's Dilemma》,可以在谷歌学术上找到。

但是当细读这篇文章后,我发现中间存在一些奇怪的点,例如理论上完全合作的两方会得到600分,但是表格中却存在很多600分左右的部分,许多细节实现仍不清晰。因此,我基于论文描述与开源库 Axelrod Python,复现了几乎所有原始策略且增加了一些策略,并构建了一个可以自定义策略组合与博弈规则的实验平台,代码在这里可以访问到。
代码功能
在代码中,除了上表中的(Name Withheld)方法,阿克塞尔罗德竞赛中的所有方法都复现了。此外,还新定义了部分方法。同时,如果你有更多想法,也可以根据README的“可扩展性”板块指引添加新的方法或者自由修改更多参数。
编号 | 策略名称 | 简要说明 |
---|---|---|
1 | TitForTat | 首轮合作,之后模仿对方上一次的决策。 |
2 | TidemanAndChieruzzi | 逐步加剧报复,若己方得分领先则尝试重新合作。 |
3 | Nydegger | 前几轮模仿,之后根据加权历史计算是否合作。 |
4 | Grofman | 若双方上轮一致则合作,否则以小概率继续合作。 |
5 | Shubik | 对背叛进行递增报复,直到完成惩罚周期。 |
6 | SteinAndRapoport | 先合作,判断对手是否随机,再选择应对策略。 |
7 | Grudger | 一旦被背叛便永久背叛。 |
8 | Davis | 前几轮无条件合作,之后如被背叛则永久背叛。 |
9 | Graaskamp | 初期防御强烈,后期根据统计判断是否信任对方。 |
10 | Downing | 根据对手对合作与背叛的反应来估算收益并决策。 |
11 | Feld | 先模仿,对方合作时合作概率随时间线性下降。 |
12 | Joss | 模仿为主,偶尔背叛以测试对手。 |
13 | Tullock | 前 11 轮合作,之后根据对手近 10 轮的合作频率调整合作概率。 |
14 | Collaborator | 始终合作。 |
15 | Betrayer | 始终背叛。 |
16 | Random | 随机选择合作或背叛。 |
17 | TwoTitsForTat | 若最近两轮有一次被背叛则报复。 |
18 | TitForTwoTats | 连续两次被背叛才报复,否则合作。 |
实验现象
在对这些策略进行对战后,我观察到几个颇具启发性的结论:
-
当参与者中好人占比较高时,主动背叛/投机策略往往得分不高。
- Tullock 方法(以 前 10 步对手背叛概率 +10% 的概率进行背叛)表现不佳;若不加 10%,排名反而更高。
- 虽然 Betrayer 面对 Collaborator 获得全场最高分,但其总体排名并不高。
-
在参与者中全是恶人的环境下,Betrayer 比 Collaborator 更具优势。
-
无论在何种组合下,Random 基本都是表现最差的策略。
如果想更深入地分析,欢迎自己定义更多方法或者自由选取参与者的集合。
你会如何选择?
如果你是其中一位参赛者,在一个充满善意与欺诈者混杂的世界中,你会选择哪种策略应对?
是始终信任?谨慎报复?测试对手?还是永远背叛?
欢迎自己定义一个方法,并且运行这段代码,观察不同策略如何对抗,设计一个属于你自己的冠军策略。
👉现在就开始尝试吧
希望这个代码对你有帮助!如果你遇到任何问题,欢迎留言或通过 GitHub/邮件提交问题。如果你觉得这个项目有趣,也别忘了给它一个 Star ⭐
作者的其他有趣文章:
保姆级教程,完全从零搭建简单个人网站(免费,无需服务器无需域名)个人博客网站,个人简历网站模板-CSDN博客
Windows时间悬浮窗程序,开源Windows程序(功能介绍)-CSDN博客
适合初学者的Transformer介绍(通俗易懂),含pytorch代码_transformer入门介绍-CSDN博客
一个基于PVT(Pyramid Vision Transformer)的视频插帧程序(pytorch)_pvt v2处理视频-CSDN博客