项目背景

什么是海盗分金?

海盗分金(Pirate’s Dilemma)是博弈论中最经典的谜题之一,由诺贝尔经济学奖得主莱茵哈德·泽尔腾(Reinhard Selten)的学生伊恩·斯图尔特(Ian Stewart)在1999年的《科学美国》专栏中首次提出。

问题设定

五只极度聪明的海盗(编号1-5)劫获了100枚金币。按照海盗法典,他们要进行一场民主表决来决定如何分配。规则如下:

  1. 由编号最小的海盗(1号)先提出分配方案
  2. 所有存活海盗投票,赞成票必须超过50%(即至少3票,包括提议者自己)
  3. 如果方案通过,按方案分配,游戏结束
  4. 如果方案不通过,提议者被扔进大海喂鲨鱼,由下一个编号的海盗提出新方案
  5. 每个海盗都是绝对理性的,只关心自己的利益最大化
  6. 在收益相同的情况下,海盗更倾向于杀死提议者(嗜血偏好)

核心矛盾: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号死亡
  • 这迫使玩家必须考虑恶意因素,而不仅仅是理性计算

公平渴望:为什么人类不是完全理性的?

行为经济学的研究表明,人类的决策受到多种心理因素的影响:

  1. 公平偏好(Fairness Preference):人们宁愿放弃自己的利益,也要追求公平
  2. 损失厌恶(Loss Aversion):人们对损失的敏感度是收益的2倍
  3. 锚定效应(Anchoring Effect):人们会受到初始信息的影响
  4. 社会规范(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. 为每个海盗选择不同的性格
  2. 调整分配方案
  3. 观察不同性格组合下的投票结果
  4. 理解非理性因素如何改变博弈的最优解

后续拓展:从海盗分金到现实世界

1. 行为博弈论

海盗分金游戏展示了行为博弈论(Behavioral Game Theory)的核心思想:

  • 人类不是完全理性的,而是有限理性(Bounded Rationality)
  • 人们的决策受到心理因素社会规范情感的影响
  • 传统的博弈论模型需要扩展,以纳入这些非理性因素

2. 公平偏好的经济学意义

公平偏好在现实世界中有重要应用:

  • 工资谈判:员工宁愿辞职,也不接受”不公平”的工资
  • 价格制定:消费者宁愿不买,也不接受”不公平”的价格
  • 合同设计:合作伙伴宁愿放弃项目,也不接受”不公平”的条款

3. 机制设计

机制设计(Mechanism Design)是博弈论的逆问题:

  • 传统博弈论:给定规则,预测结果
  • 机制设计:给定目标,设计规则

在海盗分金中,如果我们想让所有海盗都接受分配方案,我们需要设计一个激励相容(Incentive Compatible)的机制,使得每个海盗都有动力投赞成票。

构建与部署

本地开发

# 安装依赖
npm install

# 启动开发服务器
npm run dev

# 访问 http://localhost:3000

构建生产版本

npm run build

关键收获

  1. Scrollytelling的力量:滚动叙事能引导用户逐步深入理解复杂概念
  2. 交互式学习:让玩家亲自参与博弈,比纯理论讲解更有效
  3. 技术栈选择:React 19 + Vite + Tailwind CSS 4的组合开发体验极佳
  4. AI增强:Gemini AI可以为游戏增加智能对话和动态反馈
  5. 行为博弈论:人类不是完全理性的,公平偏好、损失厌恶等心理因素会影响决策
  6. 游戏化学习:通过游戏化的方式,让复杂的博弈论概念变得易于理解

相关资源

延伸阅读

  • 《博弈论基础》(Robert Gibbons):博弈论的经典教材
  • 《思考,快与慢》(Daniel Kahneman):行为经济学的奠基之作
  • 《海盗经济学》(Peter Leeson):用经济学分析海盗行为
  • 《科学美国》专栏(Ian Stewart):海盗分金问题的原始出处

在极端理性的世界里,每一枚金币都是生死的筹码。但在真实的世界里,公平、贪婪、恶意和理性,共同塑造了人类的决策。

Stay tuned! 🏴‍☠️