4. 纳什均衡求解:纯策略纳什均衡、混合策略纳什均衡、求解算法与工具(Python实现)

好,咱们进入博弈论最核心的部分——纳什均衡求解。

说实话,很多新手一听到「纳什均衡」就觉得高深莫测。其实没那么玄乎。说白了,纳什均衡就是一个状态:谁先改变策略,谁就吃亏。你不动,我也不动,大家就这么僵着。

我在做量化交易策略回测时,经常遇到这种场景。两个做市商互相盯着对方的报价,谁先降价谁就被收割。嗯,这就是典型的纳什均衡困境。

4.1 纯策略纳什均衡

纯策略,就是每个玩家只选一个确定的行为。比如剪刀石头布,你选「石头」,我选「布」——这就是纯策略。

怎么找纯策略纳什均衡?我教你一个笨但管用的方法:划线法

划线法三步走:

  1. 对于每个玩家,固定对手的策略,找出自己的最优反应
  2. 在最优反应对应的收益下划线
  3. 所有收益都被划线的格子,就是纯策略纳什均衡

举个例子。经典的「囚徒困境」收益矩阵:

囚徒B:沉默 囚徒B:背叛
囚徒A:沉默 (-1, -1) (-10, 0)
囚徒A:背叛 (0, -10) (-8, -8)

咱们来划线:

  • 如果B沉默,A选背叛得0 > 沉默得-1 → 在(0, -10)的A收益下划线
  • 如果B背叛,A选背叛得-8 > 沉默得-10 → 在(-8, -8)的A收益下划线
  • 如果A沉默,B选背叛得0 > 沉默得-1 → 在(-10, 0)的B收益下划线
  • 如果A背叛,B选背叛得-8 > 沉默得-10 → 在(-8, -8)的B收益下划线

看到没?只有(-8, -8)这个格子被划了两条线。所以纯策略纳什均衡就是(背叛,背叛)

个人经验:我在做高频交易策略时,经常用划线法快速判断对手的「死穴」。比如两个流动性提供商互相压价,最后都赚不到钱——这就是囚徒困境的现实版。

4.2 混合策略纳什均衡

但有些博弈没有纯策略均衡。比如剪刀石头布——你出什么我都能克制你。这时候就需要混合策略了。

混合策略,就是给每个纯策略分配一个概率。比如我以30%的概率出石头,50%出剪刀,20%出布。

混合策略均衡的核心思想:让对手无论选什么策略,期望收益都一样。这样对手就没有动机去改变。

怎么算?我直接上公式:

假设玩家1选策略A的概率为p,选策略B的概率为(1-p)。
玩家2选策略C的概率为q,选策略D的概率为(1-q)。

令玩家2选C和选D的期望收益相等 → 解出p
令玩家1选A和选B的期望收益相等 → 解出q

举个例子。一个简单的「协调博弈」:

玩家2:左 玩家2:右
玩家1:上 (2, 1) (0, 0)
玩家1:下 (0, 0) (1, 2)

假设玩家1选「上」的概率为p,选「下」的概率为1-p。

玩家2选「左」的期望收益 = p × 1 + (1-p) × 0 = p
玩家2选「右」的期望收益 = p × 0 + (1-p) × 2 = 2(1-p)

令两者相等:p = 2(1-p) → p = 2/3

同理,假设玩家2选「左」的概率为q,可得q = 1/3。

所以混合策略纳什均衡是:玩家1以2/3概率选上,玩家2以1/3概率选左

避坑指南:我曾经在写交易策略时,直接用混合策略概率去下单,结果亏了不少。后来才意识到——混合策略是让你「随机化」,不是让你「固定比例」。你想想看,如果你每次都按固定比例出牌,对手很快就能摸清你的规律。

4.3 求解算法与Python实现

手工算小矩阵还行,但实际博弈动辄几十个策略,必须上算法。

常用的求解算法:

  • 线性规划法:适用于双人零和博弈,用单纯形法求解
  • Lemke-Howson算法:适用于双人非零和博弈,复杂度较高
  • 迭代消除法:逐步剔除严格劣策略,缩小博弈规模
  • 支持枚举法:枚举所有可能的策略组合,检查是否满足均衡条件

我个人最常用的是支持枚举法,因为它直观、好调试。咱们用Python实现一个:

import numpy as np
from itertools import product

def pure_nash_equilibrium(payoff_matrix_a, payoff_matrix_b):
    """
    求解纯策略纳什均衡
    payoff_matrix_a: 玩家1的收益矩阵
    payoff_matrix_b: 玩家2的收益矩阵
    """
    n_actions_a = payoff_matrix_a.shape[0]
    n_actions_b = payoff_matrix_a.shape[1]
    
    equilibria = []
    
    for i in range(n_actions_a):
        for j in range(n_actions_b):
            # 检查玩家1是否愿意改变
            a_best = True
            for i2 in range(n_actions_a):
                if payoff_matrix_a[i2, j] > payoff_matrix_a[i, j]:
                    a_best = False
                    break
            
            # 检查玩家2是否愿意改变
            b_best = True
            for j2 in range(n_actions_b):
                if payoff_matrix_b[i, j2] > payoff_matrix_b[i, j]:
                    b_best = False
                    break
            
            if a_best and b_best:
                equilibria.append((i, j))
    
    return equilibria

# 测试:囚徒困境
A = np.array([[-1, -10], [0, -8]])  # 玩家1收益
B = np.array([[-1, 0], [-10, -8]])  # 玩家2收益

result = pure_nash_equilibrium(A, B)
print("纯策略纳什均衡:", result)
# 输出:[(1, 1)] 即(背叛,背叛)

代码说明:这个函数遍历所有策略组合,检查每个玩家是否有动机单方面改变。如果有,就不是均衡。我在项目中经常用这个函数做快速验证,比如检查两个交易策略是否「互相克制」。

再来一个混合策略的求解器:

from scipy.optimize import linprog

def mixed_nash_zero_sum(payoff_matrix):
    """
    求解双人零和博弈的混合策略纳什均衡
    使用线性规划
    payoff_matrix: 玩家1的收益矩阵(玩家2的收益为负)
    """
    n_actions_a, n_actions_b = payoff_matrix.shape
    
    # 玩家1的线性规划:最大化最小收益
    c = [0] * n_actions_a + [-1]  # 目标函数:最大化v(即最小收益)
    
    # 约束:每个对手策略下,期望收益 >= v
    A_ub = []
    for j in range(n_actions_b):
        row = [-payoff_matrix[i, j] for i in range(n_actions_a)] + [1]
        A_ub.append(row)
    
    b_ub = [0] * n_actions_b
    
    # 概率和为1
    A_eq = [[1] * n_actions_a + [0]]
    b_eq = [1]
    
    # 概率非负
    bounds = [(0, 1)] * n_actions_a + [(None, None)]
    
    result = linprog(c, A_ub=A_ub, b_ub=b_ub, A_eq=A_eq, b_eq=b_eq, bounds=bounds)
    
    if result.success:
        probs = result.x[:n_actions_a]
        value = -result.fun
        return probs, value
    else:
        return None, None

# 测试:剪刀石头布
# 收益矩阵(玩家1的视角)
RPS = np.array([
    [0, -1, 1],   # 石头
    [1, 0, -1],   # 剪刀
    [-1, 1, 0]    # 布
])

probs, value = mixed_nash_zero_sum(RPS)
print("混合策略概率:", probs)
print("博弈价值:", value)
# 输出:[0.333, 0.333, 0.333] 每个策略概率1/3

注意:线性规划法只适用于零和博弈。如果是非零和博弈,需要用Lemke-Howson算法。我曾经踩过这个坑——直接用线性规划去解合作博弈,结果算出来的概率全是错的。

4.4 知识体系总览

我把本章的核心逻辑画成了一张图,方便你理解:

纳什均衡求解知识体系 纳什均衡 纯策略纳什均衡 混合策略纳什均衡 划线法 收益矩阵遍历 期望收益相等法 线性规划求解 求解算法与工具 支持枚举法 Lemke-Howson算法 迭代消除法

这张图把本章的知识点串起来了。你从「纳什均衡」出发,分两条路走:纯策略和混合策略。每条路都有对应的求解方法。最后,所有方法都落到「算法与工具」这个工具箱里。

我个人建议你先把划线法练熟,这是基础。然后再去理解混合策略的「期望收益相等」原理。至于算法实现,能用现成库就用现成库,别自己造轮子——除非你想深入理解底层逻辑。

核心要点回顾:

  • 纯策略纳什均衡:谁先变谁吃亏,用划线法找
  • 混合策略纳什均衡:让对手无差异,解概率方程组
  • 零和博弈用线性规划,非零和博弈用Lemke-Howson
  • Python实现时注意矩阵维度匹配,别搞反了行和列

好了,纳什均衡求解就讲到这里。代码可以直接拿去用,但记得根据你的实际博弈场景调整收益矩阵。嗯,动手试试吧。


公众号:蓝海资料掘金营,微信deep3321