黄金、屠刀与极端理性人:用React做一个海盗分金博弈论交互叙事
项目背景
什么是海盗分金?
海盗分金(Pirate’s Dilemma)是博弈论中最经典的谜题之一,由诺贝尔经济学奖得主莱茵哈德·泽尔腾(Reinhard Selten)的学生伊恩·斯图尔特(Ian Stewart)在1999年的《科学美国》专栏中首次提出。
问题设定:
五只极度聪明的海盗(编号1-5)劫获了100枚金币。按照海盗法典,他们要进行一场民主表决来决定如何分配。规则如下:
- 由编号最小的海盗(1号)先提出分配方案
- 所有存活海盗投票,赞成票必须超过50%(即至少3票,包括提议者自己)
- 如果方案通过,按方案分配,游戏结束
- 如果方案不通过,提议者被扔进大海喂鲨鱼,由下一个编号的海盗提出新方案
- 每个海盗都是绝对理性的,只关心自己的利益最大化
- 在收益相同的情况下,海盗更倾向于杀死提议者(嗜血偏好)
核心矛盾:1号海盗(船长)要活下来,必须拉拢至少2票。但他知道,如果自己死了,其他海盗在后续轮次中可能获得更多金币。如何才能说服他们投赞成票?
为什么这个谜题重要?
海盗分金看似是个脑筋急转弯,但它揭示了博弈论的核心思想:
- 逆向归纳(Backward Induction):从终局开始倒推,而不是正向思考
- 纳什均衡(Nash Equilibrium):每个参与者都在给定他人策略下选择最优策略
- 承诺与威胁:如何让对手相信你的承诺是可信的
这个谜题也被广泛应用于:
- 经济学:拍卖设计、价格战分析
- 政治学:投票理论、联盟形成
- 计算机科学:分布式系统中的共识算法
在线体验
技术方案
技术栈
| 技术 | 版本 | 用途 |
|---|---|---|
| React | 19 | UI框架 |
| Vite | 6 | 构建工具 |
| Tailwind CSS | 4 | 样式系统 |
| Google Gemini AI | 2.4 | AI交互 |
| Motion | 12 | 动画库(原framer-motion) |
| Lucide React | 0.546 | 图标库 |
| TypeScript | 5.8 | 类型系统 |
整体架构
src/
├── App.tsx # 主应用,管理游戏状态
├── data.ts # 海盗角色和博弈数据
├── types.ts # TypeScript类型定义
├── index.css # 全局样式
├── main.tsx # 入口文件
└── components/
├── CaptainGame.tsx # 船长游戏界面
├── BackwardInduction.tsx # 逆向归纳展示
└── TheorySandbox.tsx # 理论沙盒
游戏设计
五位海盗
| 编号 | 名称 | 角色 | 性格 |
|---|---|---|---|
| 1号 | 安吉 | 船长(玩家) | 拥有先发优势,但直面最大生存威胁 |
| 2号 | 科尔 | 大副 | 时刻窥视船长之位,希望1号溺死 |
| 3号 | 莫根 | 水手长 | 战斗经验丰富的深海老兵,绝对理性 |
| 4号 | 弗林特 | 枪炮官 | 阴郁冷酷,视人命如草芥 |
| 5号 | 巴克斯 | 望手 | 最年轻最边缘,但博弈地位呈指数级飙升 |
博弈规则
- 总金币:100枚
- 表决规则:通过数需 > 50%(至少3票)
- 生死机制:若表决不通过,船长被扔下海
- 轮次:1号 → 2号 → 3号 → 4号 → 5号
博弈论入门:从海盗分金说起
什么是博弈论?
博弈论(Game Theory)是研究理性决策者之间策略互动的数学理论。它不是关于”玩游戏”的理论,而是关于当你做决定时,别人的决定会影响你,你的决定也会影响别人的理论。
想象一下:
- 你在开车,其他司机也在开车,你们都在决定是直行还是转弯
- 你在卖东西,竞争对手也在卖,你们都在决定价格
- 你在谈判,对方也在谈判,你们都在决定要价
这些场景都是博弈(Game),博弈论就是研究这些场景中最优策略的理论。
逆向归纳:从结局倒推
海盗分金的解法需要用到逆向归纳(Backward Induction),这是博弈论中最重要的思维工具之一。
正向思维的陷阱: 如果从1号海盗开始正向思考:
- 1号想:”我要给自己留多少?给其他人多少?”
- 但1号不知道,如果自己死了,2号会怎么分
- 2号也不知道,如果自己死了,3号会怎么分
- 这样下去,问题变得无限复杂
逆向归纳的妙处: 从终局开始倒推:
- 如果只剩4号和5号,4号会怎么分?(4号会给自己100枚,5号0枚,因为4号自己就占50%)
- 如果只剩3号、4号、5号,3号会怎么分?(3号知道4号会反对任何方案,因为4号在下一轮能拿100枚,所以3号必须拉拢5号。3号给5号1枚,自己99枚,5号会赞成,因为5号在下一轮什么都拿不到)
- 以此类推…
最终结论(绝对理性情况下):
- 1号(安吉):97枚
- 2号(科尔):0枚
- 3号(莫根):1枚
- 4号(弗林特):0枚
- 5号(巴克斯):2枚
为什么是这样?
- 1号知道自己必须拉拢2票(加上自己共3票)
- 3号在下一轮能拿1枚,所以1号给3号1枚就够了(3号会赞成,因为收益相同,但3号有嗜血偏好,可能会反对,所以给3号1枚是最优解)
- 5号在下一轮能拿2枚,所以1号给5号2枚就够了(5号会赞成,因为收益相同)
- 2号和4号在下一轮能拿0枚,但1号不需要他们的票,所以给0枚
纳什均衡:谁都不想单方面改变策略
纳什均衡(Nash Equilibrium)是博弈论中最核心的概念,由诺贝尔经济学奖得主约翰·纳什(John Nash)提出。
通俗解释: 在一个策略组合中,给定其他人的策略,没有人可以通过单方面改变自己的策略来获得更好的结果。
海盗分金中的纳什均衡: 在绝对理性的情况下,上面的分配方案(97, 0, 1, 0, 2)就是一个纳什均衡:
- 1号:如果改变分配方案,比如给自己96枚,给2号1枚,2号会赞成吗?不会,因为2号在下一轮能拿0枚,现在拿1枚更好,但1号不需要2号的票
- 3号:如果改变策略,投反对票,3号在下一轮能拿1枚,现在拿1枚,收益相同,但3号有嗜血偏好,可能会反对
- 5号:如果改变策略,投反对票,5号在下一轮能拿2枚,现在拿2枚,收益相同,但5号有嗜血偏好,可能会反对
关键洞察:在绝对理性的情况下,这个分配方案是唯一的纳什均衡。但如果海盗不是绝对理性呢?
游戏中的非理性人:当博弈论遇到心理学
四种性格类型
在这个游戏中,开发者设计了四种非理性性格,让博弈变得更加复杂和真实:
1. 极度理性(RATIONAL)
RATIONAL: {
label: '极度理性',
icon: '🧠',
desc: '只关心钱。只要此次给的分红严格大于下一轮的期望收益,他就一定会投赞成票(哪怕只多出 1 枚)。',
color: 'bg-white text-pudd-ink border-2 border-pudd-ink'
}
这是博弈论中的标准假设:每个参与者都是完全理性的,只关心自己的利益最大化。
游戏中的表现:
- 如果1号给3号1枚,3号会赞成(因为3号在下一轮能拿1枚,收益相同,但3号有嗜血偏好,可能会反对)
- 如果1号给5号2枚,5号会赞成(因为5号在下一轮能拿2枚,收益相同)
2. 贪婪狂蛮(GREEDY)
GREEDY: {
label: '贪婪狂蛮',
icon: '💰',
desc: '胃口极大。他们不只是看生存期望,还贪得无厌:除非船长分给他至少 15 枚硬币,否则他一定会投反对票。',
color: 'bg-pudd-bg text-pudd-accent border-2 border-pudd-ink'
}
行为经济学解读: 这种性格体现了损失厌恶(Loss Aversion)和锚定效应(Anchoring Effect):
- 贪婪的海盗有一个心理锚点(15枚金币),低于这个锚点就会感到”损失”
- 即使从理性角度看,接受1枚金币比0枚更好,但贪婪的海盗会觉得”我应得更多”
游戏中的表现:
- 如果1号给贪婪的海盗少于15枚,他们会投反对票,即使这样会导致1号死亡
- 这迫使玩家必须考虑心理因素,而不仅仅是数学计算
3. 追求公平(FAIR)
FAIR: {
label: '追求公平',
icon: '⚖️',
desc: '痛恨剥削。一旦船长(A)分给自己超过 50%(50枚以上)的巨资,或者给他分配的钱低于人均 20 枚,他就感觉屈辱,怒投反对票。',
color: 'bg-emerald-50 text-emerald-800 border-2 border-emerald-800'
}
公平偏好的实验验证: 诺贝尔经济学奖得主丹尼尔·卡尼曼(Daniel Kahneman)的最后通牒博弈(Ultimatum Game)实验证明:
- 人们宁愿放弃自己的利益,也要惩罚不公平的分配
- 当提议者给自己太多时,响应者会拒绝,即使这样双方都拿不到钱
游戏中的表现:
- 如果1号给自己超过50枚,追求公平的海盗会投反对票
- 如果1号给追求公平的海盗少于20枚,他们也会投反对票
- 这迫使玩家必须考虑公平感,而不仅仅是利益最大化
4. 嗜血破坏者(SPITEFUL)
SPITEFUL: {
label: '嗜血破坏者',
icon: '🩸',
desc: '天生嗜血,最期待看提议者落水淹死。除非船长给他分至少 30 枚硬币买通他的邪恶本性,否则一律给差评投票。',
color: 'bg-rose-50 text-rose-800 border-2 border-rose-800'
}
社会偏好理论: 这种性格体现了负互惠(Negative Reciprocity)和恶意(Spite):
- 有些人宁愿自己受损,也要让别人受损
- 这种行为在进化心理学中可能有适应性意义:惩罚背叛者,维护群体合作
游戏中的表现:
- 如果1号给嗜血破坏者少于30枚,他们会投反对票,即使这样会导致1号死亡
- 这迫使玩家必须考虑恶意因素,而不仅仅是理性计算
公平渴望:为什么人类不是完全理性的?
行为经济学的研究表明,人类的决策受到多种心理因素的影响:
- 公平偏好(Fairness Preference):人们宁愿放弃自己的利益,也要追求公平
- 损失厌恶(Loss Aversion):人们对损失的敏感度是收益的2倍
- 锚定效应(Anchoring Effect):人们会受到初始信息的影响
- 社会规范(Social Norms):人们会遵循社会期望,即使这不符合个人利益
在海盗分金游戏中,这些心理因素使得绝对理性的解法(97, 0, 1, 0, 2)不再适用。玩家必须考虑每个海盗的性格和心理,才能制定出最优的分配方案。
核心实现
海盗数据结构
export interface Pirate {
id: PirateId;
index: number;
name: string;
avatar: string;
rank: string;
personality: PiratePersonality;
roleDescription: string;
}
export type PiratePersonality = 'RATIONAL' | 'GREEDY' | 'FAIR' | 'SPITEFUL';
逆向归纳步骤
export interface BackwardStep {
id: number;
title: string;
subTitle: string;
piratesAlive: PirateId[];
distribution: Partial<Record<PirateId, number>>;
reasoning: string[];
keyInsight: string;
}
游戏状态管理
export default function App() {
const [selectedPirate, setSelectedPirate] = useState<Pirate | null>(PIRATES[0]);
const [coinsWon, setCoinsWon] = useState<number | null>(null);
const [unlockedBackward, setUnlockedBackward] = useState<boolean>(false);
const [unlockedSandbox, setUnlockedSandbox] = useState<boolean>(false);
const handleGameSuccess = (coins: number) => {
setCoinsWon(coins);
setUnlockedBackward(true);
setUnlockedSandbox(true);
// 平滑滚动到逆向归纳部分
setTimeout(() => {
scrollTo(backwardRef);
}, 1200);
};
}
理论沙盒:探索非理性世界
游戏中的TheorySandbox组件允许玩家自由探索不同性格组合下的博弈结果:
// 性格定义
const personalityDetails: Record<PiratePersonality, { label: string; icon: string; desc: string; color: string }> = {
RATIONAL: {
label: '极度理性',
icon: '🧠',
desc: '只关心钱。只要此次给的分红严格大于下一轮的期望收益,他就一定会投赞成票(哪怕只多出 1 枚)。',
color: 'bg-white text-pudd-ink border-2 border-pudd-ink'
},
GREEDY: {
label: '贪婪狂蛮',
icon: '💰',
desc: '胃口极大。他们不只是看生存期望,还贪得无厌:除非船长分给他至少 15 枚硬币,否则他一定会投反对票。',
color: 'bg-pudd-bg text-pudd-accent border-2 border-pudd-ink'
},
FAIR: {
label: '追求公平',
icon: '⚖️',
desc: '痛恨剥削。一旦船长(A)分给自己超过 50%(50枚以上)的巨资,或者给他分配的钱低于人均 20 枚,他就感觉屈辱,怒投反对票。',
color: 'bg-emerald-50 text-emerald-800 border-2 border-emerald-800'
},
SPITEFUL: {
label: '嗜血破坏者',
icon: '🩸',
desc: '天生嗜血,最期待看提议者落水淹死。除非船长给他分至少 30 枚硬币买通他的邪恶本性,否则一律给差评投票。',
color: 'bg-rose-50 text-rose-800 border-2 border-rose-800'
}
};
玩家可以:
- 为每个海盗选择不同的性格
- 调整分配方案
- 观察不同性格组合下的投票结果
- 理解非理性因素如何改变博弈的最优解
后续拓展:从海盗分金到现实世界
1. 行为博弈论
海盗分金游戏展示了行为博弈论(Behavioral Game Theory)的核心思想:
- 人类不是完全理性的,而是有限理性(Bounded Rationality)的
- 人们的决策受到心理因素、社会规范和情感的影响
- 传统的博弈论模型需要扩展,以纳入这些非理性因素
2. 公平偏好的经济学意义
公平偏好在现实世界中有重要应用:
- 工资谈判:员工宁愿辞职,也不接受”不公平”的工资
- 价格制定:消费者宁愿不买,也不接受”不公平”的价格
- 合同设计:合作伙伴宁愿放弃项目,也不接受”不公平”的条款
3. 机制设计
机制设计(Mechanism Design)是博弈论的逆问题:
- 传统博弈论:给定规则,预测结果
- 机制设计:给定目标,设计规则
在海盗分金中,如果我们想让所有海盗都接受分配方案,我们需要设计一个激励相容(Incentive Compatible)的机制,使得每个海盗都有动力投赞成票。
构建与部署
本地开发
# 安装依赖
npm install
# 启动开发服务器
npm run dev
# 访问 http://localhost:3000
构建生产版本
npm run build
关键收获
- Scrollytelling的力量:滚动叙事能引导用户逐步深入理解复杂概念
- 交互式学习:让玩家亲自参与博弈,比纯理论讲解更有效
- 技术栈选择:React 19 + Vite + Tailwind CSS 4的组合开发体验极佳
- AI增强:Gemini AI可以为游戏增加智能对话和动态反馈
- 行为博弈论:人类不是完全理性的,公平偏好、损失厌恶等心理因素会影响决策
- 游戏化学习:通过游戏化的方式,让复杂的博弈论概念变得易于理解
相关资源
- 项目仓库:CNB - acidbunny/pirate-dilemma
- 在线演示:pirate.acidbunny.cn
- B站视频:BV1jWG264EfG
- Google AI Studio:原始应用
延伸阅读
- 《博弈论基础》(Robert Gibbons):博弈论的经典教材
- 《思考,快与慢》(Daniel Kahneman):行为经济学的奠基之作
- 《海盗经济学》(Peter Leeson):用经济学分析海盗行为
- 《科学美国》专栏(Ian Stewart):海盗分金问题的原始出处
在极端理性的世界里,每一枚金币都是生死的筹码。但在真实的世界里,公平、贪婪、恶意和理性,共同塑造了人类的决策。
Stay tuned! 🏴☠️