news 2026/5/9 17:00:30

从“囚徒困境”到“性别战”:用Python代码模拟5个经典博弈论模型,理解Nash均衡

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从“囚徒困境”到“性别战”:用Python代码模拟5个经典博弈论模型,理解Nash均衡

用Python实战博弈论:5个经典模型的代码实现与可视化分析

博弈论作为研究策略互动的数学工具,在经济学、计算机科学甚至生物学领域都有广泛应用。但理论教材中的矩阵和公式往往让初学者望而生畏——直到我们用代码将这些抽象概念转化为可交互的模拟实验。本文将带你用Python构建五个经典博弈模型,通过动态可视化理解Nash均衡的形成机制。不同于静态的理论分析,我们将重点关注参数调整如何影响均衡结果,以及如何用算法求解混合策略均衡

1. 环境配置与基础工具

在开始建模前,我们需要配置Python科学计算栈。推荐使用Anaconda创建专用环境:

conda create -n game_theory python=3.9 conda activate game_theory pip install numpy matplotlib seaborn sympy

关键库的作用:

  • NumPy:处理博弈矩阵运算
  • Matplotlib/Seaborn:可视化支付矩阵与策略分布
  • SymPy:符号计算用于精确求解均衡点

定义通用可视化函数,用于后续所有模型的收益矩阵展示:

import matplotlib.pyplot as plt import seaborn as sns def plot_payoff_matrix(matrix, players, strategies): plt.figure(figsize=(8, 6)) sns.heatmap(matrix, annot=True, fmt=".1f", cmap="YlGnBu", xticklabels=strategies[1], yticklabels=strategies[0]) plt.xlabel(players[1] + "'s Strategy") plt.ylabel(players[0] + "'s Strategy") plt.title("Payoff Matrix Heatmap") plt.show()

2. 囚徒困境:理解占优策略

作为最著名的非零和博弈,囚徒困境完美展示了个人理性与集体理性的矛盾。我们先定义支付矩阵:

prisoners_payoff = np.array([ [(-1, -1), (-3, 0)], # 囚徒A: 坦白/抵赖 [(0, -3), (-2, -2)] # 囚徒B: 同上 ])

plot_payoff_matrix()可视化后,我们可以清晰地看到"坦白"是双方的严格占优策略。但更有趣的是模拟重复博弈场景:

def repeated_prisoners_dilemma(rounds, strategy_a, strategy_b): history = [] for _ in range(rounds): move_a = strategy_a(history) move_b = strategy_b(history) payoff = prisoners_payoff[move_a][move_b] history.append((move_a, move_b, payoff)) return np.cumsum([p for _,_,p in history], axis=0)

尝试不同策略组合时,我们会发现"以牙还牙"(Tit-for-Tat)在长期互动中表现优异——这解释了为什么现实社会中合作可能自发形成。

3. 性别战:协调博弈与混合策略

当夫妻选择周末活动时,他们面临的是典型的协调博弈。支付矩阵如下:

battle_of_sexes = np.array([ [(3, 2), (0, 0)], # 妻子: 足球/歌剧 [(0, 0), (2, 3)] # 丈夫: 同上 ])

这个博弈有两个纯策略Nash均衡。我们使用SymPy计算混合策略均衡:

from sympy import symbols, Eq, solve p, q = symbols('p q') # 妻子选足球概率,丈夫选足球概率 # 计算妻子无差异条件 wife_eq = Eq(3*q + 0*(1-q), 0*q + 2*(1-q)) husband_eq = Eq(2*p + 0*(1-p), 0*p + 3*(1-p)) mixed_eq = solve((wife_eq, husband_eq), (p, q)) print(f"混合策略均衡: p={mixed_eq[p]:.2f}, q={mixed_eq[q]:.2f}")

输出显示妻子有3/5概率选择足球,丈夫有2/5概率选择足球。我们可以用蒙特卡洛模拟验证这个均衡:

def mixed_strategy_simulation(samples, p, q): choices = np.random.rand(samples, 2) wife_choice = (choices[:,0] < p).astype(int) husband_choice = (choices[:,1] < q).astype(int) payoffs = battle_of_sexes[wife_choice, husband_choice] return payoffs.mean(axis=0)

4. 古诺模型:连续策略空间的均衡

在寡头产量竞争中,企业需要同时决定产量。我们用SciPy求解均衡:

from scipy.optimize import minimize def cournot_profit(q1, q2, a=100, c=10): """a为市场容量,c为边际成本""" price = a - q1 - q2 return (price - c) * q1 # 企业1的最优反应函数 def best_response(q2, a=100, c=10): res = minimize(lambda q: -cournot_profit(q, q2, a, c), x0=30, bounds=[(0, a)]) return res.x[0] # 计算均衡点 q1_star = best_response(best_response(30)) q2_star = best_response(q1_star) print(f"古诺均衡产量: q1={q1_star:.1f}, q2={q2_star:.1f}")

可视化反应函数曲线时,两条曲线的交点即为Nash均衡点。调整市场容量参数a,可以观察到均衡如何随市场环境变化。

5. 霍特林模型:空间竞争与差异化

这个模型解释为什么政客政策会趋同。假设线性城市长度为1,两家商店选择位置:

def hotelling_profit(loc1, loc2, price=1, t=0.1): """t为运输成本系数""" if loc1 == loc2: return price/2 boundary = (loc1 + loc2)/2 return price*boundary if loc1 < loc2 else price*(1-boundary) # 寻找位置均衡 def find_location_equilibrium(tolerance=1e-3): loc1, loc2 = 0.2, 0.8 # 初始位置 while True: new_loc1 = best_response_loc(loc2) new_loc2 = best_response_loc(loc1) if abs(new_loc1-loc1)<tolerance and abs(new_loc2-loc2)<tolerance: break loc1, loc2 = new_loc1, new_loc2 return loc1, loc2

模拟结果显示两家商店最终会聚集在中心点——这与现实中快餐店经常比邻而开的现象一致。修改运输成本参数t,可以观察到均衡位置如何随消费者对距离的敏感度变化。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/9 16:58:46

Taotoken模型广场选型功能在实际项目中的使用心得

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Taotoken模型广场选型功能在实际项目中的使用心得 1. 项目背景与选型挑战 最近在负责一个内容生成项目的初期技术选型。项目的核心…

作者头像 李华
网站建设 2026/5/9 16:58:32

ChatGemini开源项目:基于React+TypeScript的Gemini API私有化部署指南

1. 项目概述与核心价值如果你和我一样&#xff0c;对市面上各种AI聊天工具的界面、响应速度或者网络访问的稳定性感到头疼&#xff0c;同时又对Google的Gemini模型能力充满好奇&#xff0c;那么ChatGemini这个项目绝对值得你花时间研究一下。简单来说&#xff0c;ChatGemini是一…

作者头像 李华
网站建设 2026/5/9 16:58:31

AI+视网膜图像:深度学习如何实现心血管疾病风险无创评估

1. 项目概述&#xff1a;从眼底窥见全身健康作为一名在医疗影像AI领域摸爬滚打了十来年的从业者&#xff0c;我亲眼见证了技术如何一步步改变疾病的诊断方式。今天想和大家深入聊聊一个特别有意思&#xff0c;也极具潜力的方向&#xff1a;利用视网膜图像来评估心血管疾病的风险…

作者头像 李华
网站建设 2026/5/9 16:57:44

给工程师讲明白:抗震设计里的‘50年超越概率’到底是个啥?

抗震设计中的“50年超越概率”&#xff1a;工程师必须掌握的概率密码 第一次听说“50年超越概率63%”这个概念时&#xff0c;我正坐在设计院的会议室里&#xff0c;对面是位从业二十年的总工。他指着我的计算书说&#xff1a;“小伙子&#xff0c;你知道为什么我们的小震不坏标…

作者头像 李华