用Python手把手教你模拟Stackelberg博弈:从古诺模型到领导者-追随者动态
用Python手把手教你模拟Stackelberg博弈从古诺模型到领导者-追随者动态在经济学和博弈论中理解不同市场结构下的企业行为至关重要。Stackelberg模型作为古诺模型的动态扩展揭示了当市场参与者存在领导者和追随者关系时企业如何制定最优产量决策。本文将带你用Python完整实现这一经典博弈模型并通过可视化对比分析其与古诺模型的差异。1. 理论基础与模型设定Stackelberg博弈的核心在于序贯决策和信息不对称。与古诺模型中的同时决策不同领导者企业先行动追随者企业观察到领导者的选择后再做出反应。这种动态特性使得均衡结果与古诺模型有显著差异。我们设定以下基本参数市场需求函数P(Q) 8 - Q边际成本c₁ c₂ c领导者产量q₁追随者产量q₂利润函数可表示为def profit(q, Q, c): return q * (8 - Q) - q * c2. Python实现Stackelberg均衡2.1 构建反应函数首先需要实现追随者的反应函数这是模型求解的关键import numpy as np def follower_reaction(q_leader, c1): 追随者的最优反应函数 return (8 - c - q_leader) / 22.2 领导者优化问题领导者会预见到追随者的反应并将其纳入自己的决策def leader_optimal(c1): 计算领导者的最优产量 return 4 - c/2 def stackelberg_equilibrium(c1): 计算Stackelberg均衡 q_leader leader_optimal(c) q_follower follower_reaction(q_leader, c) return q_leader, q_follower2.3 可视化反应曲线使用Matplotlib绘制反应曲线能直观展示博弈动态import matplotlib.pyplot as plt def plot_reaction_curves(c1): q_range np.linspace(0, 7, 100) plt.plot(q_range, follower_reaction(q_range, c), label追随者反应函数) plt.axvline(xleader_optimal(c), colorr, linestyle--, labelf领导者均衡产量{leader_optimal(c):.2f}) plt.xlabel(领导者产量 q₁) plt.ylabel(追随者产量 q₂) plt.title(Stackelberg博弈反应曲线) plt.legend() plt.grid(True) plt.show()3. 与古诺模型的对比分析3.1 古诺均衡实现为进行对比我们先实现古诺均衡的求解def cournot_equilibrium(c1): 计算古诺均衡 q (8 - c) / 3 return q, q3.2 关键指标对比通过表格可以清晰比较两种模型的差异指标Stackelberg模型古诺模型差异领导者产量4 - c/2(8-c)/3通常更高追随者产量2 - c/4(8-c)/3通常更低总产量6 - 3c/4(16-2c)/3Stackelberg更高市场价格2 3c/4(82c)/3Stackelberg更低领导者利润(8-c)²/8(8-c)²/9更高追随者利润(8-c)²/16(8-c)²/9更低3.3 动态仿真可视化创建动态仿真展示两种模型的收敛过程def dynamic_simulation(c1, modelstackelberg): fig, ax plt.subplots(figsize(10, 6)) q1_history, q2_history [], [] # 初始化产量 q1, q2 1.0, 1.0 for _ in range(20): q1_history.append(q1) q2_history.append(q2) if model stackelberg: q2 follower_reaction(q1, c) q1 leader_optimal(c) else: # cournot new_q1 follower_reaction(q2, c) new_q2 follower_reaction(q1, c) q1, q2 new_q1, new_q2 ax.plot(q1_history, q2_history, o-, label调整路径) ax.set_xlabel(厂商1产量) ax.set_ylabel(厂商2产量) ax.set_title(f{model.capitalize()}模型动态调整过程) ax.legend() plt.show()4. 进阶分析与扩展4.1 成本不对称的影响现实市场中企业成本常不相同我们可以扩展模型def asymmetric_cost_model(c_leader1, c_follower1.2): 考虑不对称成本的Stackelberg模型 # 追随者反应函数 def follower_reaction_asym(q_leader): return (8 - c_follower - q_leader) / 2 # 领导者优化 q_leader (8 c_follower - 2*c_leader) / 2 q_follower follower_reaction_asym(q_leader) return q_leader, q_follower4.2 多追随者情形当市场存在一个领导者和多个追随者时def multiple_followers(n_followers2, c1): 多个追随者的Stackelberg模型 def total_follower_reaction(q_leader): return n_followers * (8 - c - q_leader) / (n_followers 1) q_leader (8 n_followers*c - (n_followers1)*c) / 2 q_total_followers total_follower_reaction(q_leader) return q_leader, q_total_followers4.3 敏感性分析考察关键参数变化如何影响均衡结果def parameter_sensitivity(): c_values np.linspace(0.5, 3, 50) q_leader [leader_optimal(c) for c in c_values] q_follower [follower_reaction(q, c) for q, c in zip(q_leader, c_values)] plt.plot(c_values, q_leader, label领导者产量) plt.plot(c_values, q_follower, label追随者产量) plt.xlabel(边际成本 c) plt.ylabel(最优产量) plt.title(边际成本对均衡产量的影响) plt.legend() plt.grid(True) plt.show()5. 实际应用与策略启示通过上述分析我们可以得出几个重要管理启示先发优势的价值领导者的先动优势使其能获得更高利润这解释了企业为何争相扩大市场份额信息优势的重要性追随者因能观察领导者行动而调整策略但仍处于不利地位成本结构的影响成本优势会放大领导者的市场支配力在实际商业决策中理解这些动态博弈原理有助于企业制定更有效的市场进入和竞争策略。例如当技术领先时采取激进的生产扩张策略可能更有利而当处于追随者位置时则需要更灵活地调整生产计划。