用Python和SymPy手把手求解古诺模型:从反应函数到纳什均衡的完整推导

用Python和SymPy手把手求解古诺模型:从反应函数到纳什均衡的完整推导 用Python和SymPy手把手求解古诺模型从反应函数到纳什均衡的完整推导当经济学理论遇上Python代码抽象的古诺模型突然变得触手可及。本文不是又一篇枯燥的博弈论讲义而是一份带着油墨香味的代码实验手册——我们将用SymPy这个符号计算库在Jupyter Notebook里重建整个古诺模型的推导过程从利润函数求导到反应函数可视化最终锁定那个神秘的纳什均衡点。经济学专业的学生可以在这里看到数学公式如何变成可执行的代码而程序员则能理解每行Python背后的经济学逻辑。1. 环境搭建与基础建模在开始推导之前我们需要一个合适的数字实验室。推荐使用Anaconda创建Python 3.8环境并安装以下核心库pip install sympy matplotlib numpy古诺模型描述的是双寡头垄断市场假设两家公司生产同质产品通过选择产量来实现利润最大化。让我们先定义模型的基本要素from sympy import symbols, Eq, solve, diff # 定义符号变量 q1, q2 symbols(q1 q2) # 两家公司的产量 c symbols(c) # 边际成本 P 8 - q1 - q2 # 市场价格线性反需求函数这里的关键是理解P 8 - q1 - q2的经济学含义市场价格随着总产量增加而下降。数字8代表市场最大可能价格当产量为0时而-q1 -q2表示每增加一单位产量对价格的负面影响。2. 利润函数与反应函数推导每家公司的利润等于收入减去成本。收入是价格乘以产量而成本我们简化为线性成本函数# 定义利润函数 profit1 P * q1 - c * q1 # 公司1的利润 profit2 P * q2 - c * q2 # 公司2的利润 print(f公司1利润函数: {profit1}) print(f公司2利润函数: {profit2})输出结果会显示公司1利润函数: -c*q1 q1*(8 - q1 - q2) 公司2利润函数: -c*q2 q2*(8 - q1 - q2)接下来是最关键的一步——求反应函数。反应函数表示在给定竞争对手产量的情况下能使自身利润最大化的产量选择。数学上需要对利润函数求导并令导数为零# 求公司1的反应函数 dprofit1_dq1 diff(profit1, q1) # 对q1求导 reaction1 solve(dprofit1_dq1, q1)[0] # 解一阶条件 # 求公司2的反应函数 dprofit2_dq2 diff(profit2, q2) reaction2 solve(dprofit2_dq2, q2)[0] print(f公司1的反应函数: q1 {reaction1}) print(f公司2的反应函数: q2 {reaction2})你会得到熟悉的反应函数表达式公司1的反应函数: q1 (8 - c - q2)/2 公司2的反应函数: q2 (8 - c - q1)/23. 联立求解纳什均衡纳什均衡是两个反应函数的交点即两家公司同时选择对对方最优产量做出最佳反应的产量组合。我们需要解这两个方程的联立方程组# 定义反应函数方程组 eq1 Eq(q1, (8 - c - q2)/2) eq2 Eq(q2, (8 - c - q1)/2) # 解方程组 nash_equilibrium solve((eq1, eq2), (q1, q2)) print(f纳什均衡解: {nash_equilibrium})输出结果为纳什均衡解: {q1: (8 - c)/3, q2: (8 - c)/3}这个结果验证了经济学教科书中的经典结论在对称的古诺模型中纳什均衡下两家公司会生产相同的产量(8-c)/3。4. 可视化反应函数与均衡点理论推导固然重要但图形展示能带来更直观的理解。我们用Matplotlib将反应函数和均衡点绘制出来import numpy as np import matplotlib.pyplot as plt # 假设c2的具体案例 c_value 2 q1_values np.linspace(0, 8, 100) # 计算反应函数曲线 def R1(q2, c): return (8 - c - q2)/2 def R2(q1, c): return (8 - c - q1)/2 # 绘制图形 plt.figure(figsize(10, 6)) plt.plot(q1_values, [R2(q, c_value) for q in q1_values], label公司2的反应函数 R2(q1)) plt.plot([R1(q, c_value) for q in q1_values], q1_values, label公司1的反应函数 R1(q2)) # 标记纳什均衡点 eq_q (8 - c_value)/3 plt.scatter([eq_q], [eq_q], colorred, labelf纳什均衡 ({eq_q:.1f}, {eq_q:.1f})) # 图表装饰 plt.xlabel(公司1产量 q1) plt.ylabel(公司2产量 q2) plt.title(古诺模型反应函数与纳什均衡 (c2)) plt.legend() plt.grid(True) plt.axis([0, 5, 0, 5]) plt.show()这张图会清晰地显示两条反应函数直线相交于一点交点坐标正是我们计算得到的纳什均衡解当c2时均衡产量为(8-2)/325. 模型扩展与敏感性分析基础模型假设两家公司对称但现实世界往往更复杂。让我们探讨几个扩展场景场景1不对称成本假设公司1的成本为c1公司2的成本为c2c1, c2 symbols(c1 c2) profit1_asym (8 - q1 - q2)*q1 - c1*q1 profit2_asym (8 - q1 - q2)*q2 - c2*q2 # 求导并解反应函数 reaction1_asym solve(diff(profit1_asym, q1), q1)[0] reaction2_asym solve(diff(profit2_asym, q2), q2)[0] print(f不对称成本下的反应函数) print(f公司1: q1 {reaction1_asym}) print(f公司2: q2 {reaction2_asym})场景2n家公司竞争将模型扩展到n家相同公司n symbols(n, integerTrue, positiveTrue) Q n * q # 总产量 P 8 - Q # 价格函数 profit_n (P - c) * q # 求对称均衡 reaction_n solve(diff(profit_n, q), q)[0] print(f{n}家公司时的均衡产量: {reaction_n})这个扩展显示随着竞争者数量增加单个公司的均衡产量会减少反映出市场竞争加剧的效果。6. 实际应用中的注意事项在将古诺模型应用于真实商业分析时有几个关键点需要牢记成本函数假设我们使用线性成本函数简化分析但实际成本曲线可能更复杂产品差异化同质产品假设在现实中很少成立动态竞争静态模型忽略了多期互动中的策略行为信息对称现实中公司可能对彼此成本结构了解有限以下是一个简单的敏感性分析表格展示不同成本参数下的均衡结果边际成本c均衡产量q*均衡价格P*总利润(两家公司)12.333.3310.8922.004.008.0031.673.675.4441.333.333.11这个表格揭示了成本对市场结果的系统性影响——成本上升导致产量下降、价格上升但总利润减少。