【博弈论】混合策略纳什均衡

上一章中遇到了划线法无法找到均衡的情况,例如盖硬币博弈,盖方盖硬币,猜方猜正反。那是因为考虑的都是纯策略,就是每个策略要么选,要么不选。本章考虑混合策略,就是每个策略都有一个选择的概率。

考虑还是这个盖硬币的博弈,混合策略就是盖方以p的概率盖正,那么就是1-p的概率盖反,猜方同理。p是连续的取值,而如果退化成p只能取1或0,那就退化成原来的纯策略了。

一、寻找纳什均衡

策略B1策略B2
策略A1(2, 3)(5, 2)
策略A2(3, 1)(1, 5)

考虑这样一个博弈,均衡就是,给定A的混合策略(p, 1-p),B的混合策略(q, 1-q),双方都不能改变自己的策略来使自己的收益增加。

换句话说,就是给定p,B的任何混合策略的期望都一样,给定q,A的任何混合策略的期望都一样。

这样计算E(B1(p))=E(B2(p))

               E(A1(q))=E(B2(q))

解出来就可以得到均衡。

3P+(1-p)=2p+5(1-p)

2p+1=-3p+5

5p=4

P=0.8

2q+5(1-q)=3q+(1-q)

-3q+5=2q+1

-5q=-4

Q=0.8

NE就是{(0.8, 0.2), (0.8, 0.2)}

这里有两个问题

1.为什么这两个纯策略期望一样了,所有的混合策略的期望就都一样了?

考虑混合策略的期望,E=q*E(B1(p)) + (1-q)*E(B2(p)),要对于任意的q,E的值都相等,那是不是只要E(B1(p))=E(B2(p))就好了。

2.这样算出来可能有多个均衡吗,为什么

可能有多个均衡,如果E(B1(p))和E(B2(p))两边的p消了,那取任意的p,这个等式都恒成立了,那任意的p就都是均衡。

二、计算混合策略收益

法一、直接计算

策略B1(0.8)策略B2(0.2)
策略A1(0.8)(2, 3)(5, 2)
策略A2(0.2)(3, 1)(1, 5)

还是刚才这个例子,均衡之后,每个格子就有自己相应的概率了,每个格子相应的概率乘上对应的人的收益,最后求和就是均衡下这个人的期望收益。

UA=0.8*0.8*2+0.8*0.2*5+0.2*0.8*3+0.2*0.2*1=2.6

UB=0.8*0.8*3+0.8*0.2*2+0.2*0.8*1+0.2*0.2*5=2.6

法二、巧算

既然均衡了,那么就是意味着,A取均衡这一策略,B取任意策略收益都一样,那么我在算B的收益的时候,我就可以固定A为均衡,B的策略取个简单的例如(1, 0),这样可以减少一半的计算,反之亦然。

那么刚才那个每个格子的概率重新写下(算B)

策略B1(1)策略B2(0)
策略A1(0.8)(2, 3)(5, 2)
策略A2(0.2)(3, 1)(1, 5)

UB=3*0.8+1*0.2=2.6

算A

策略B1(0.8)策略B2(0.2)
策略A1(0)(2, 3)(5, 2)
策略A2(1)(3, 1)(1, 5)

UA=3*0.8+1*1*0.2=2.6

三、计算混合策略反应函数

这里考虑的是二人博弈,且每人只有两个策略,那么函数就是给定A选择他策略1的概率p,B选择他策略1的概率q应该是多少,所以两个人是两个函数,p=f(q), q=f(p)

二人博弈所以可以化成二维的图

两个策略所以期望是1次函数,不消掉概率的情况下只有一个均衡。

那么满足这两个条件,这类博弈的反应函数就都可以表示为分段函数

把两个分段函数画在一张图,刚才的例子

定理:反应函数交点是纳什均衡,这是充要条件。

下面附画图python代码

import matplotlib.pyplot as plt
import numpy as np

NEp=0.8
NEq=0.8

# 创建一个细分的p和q值数组
p_values = np.linspace(0, 1, 500)
q_values = np.linspace(0, 1, 500)

# 初始化Q(p)和p(q)的值
Q_values = np.where(p_values < NEp, 1, np.nan)
Q_values = np.where(p_values > NEp, 0, Q_values)

p_q_values = np.where(q_values < NEq, 0, np.nan)
p_q_values = np.where(q_values > NEq, 1, p_q_values)

# 绘制Q(p)
plt.plot(p_values, Q_values, label='q=f(p)')

# 绘制p(q), 并且交换x和y轴的值
plt.plot(p_q_values, q_values, label='p=f(q)')

# 设置图例
plt.legend()

# 设置x和y轴的标签
plt.xlabel('p')
plt.ylabel('q')

# 设置标题
plt.title('Reaction Function')

# 显示网格
plt.grid(True)

# 显示图形
plt.show()
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
纳什均衡博弈论的一个重要概念,对于多人博弈模型,可以使用Matlab进行计算。下面是一个简单的纳什均衡计算的Matlab代码示例: ```matlab % 定义收益矩阵 payoff_matrix = [2 0; 0 1]; % 定义两名玩家的策略空间和初始策略 strategies = [0 1; 0 1]; player1_strategy = 1; player2_strategy = 1; % 计算每个玩家的收益 player1_payoff = payoff_matrix(player1_strategy, player2_strategy); player2_payoff = payoff_matrix(player2_strategy, player1_strategy); % 迭代计算纳什均衡 for i = 1:100 % 更新玩家1的策略 [~, max_index] = max(payoff_matrix(:, player2_strategy)); player1_strategy = max_index; % 更新玩家2的策略 [~, max_index] = max(payoff_matrix(player1_strategy, :)); player2_strategy = max_index; % 计算每个玩家的收益 player1_payoff = payoff_matrix(player1_strategy, player2_strategy); player2_payoff = payoff_matrix(player2_strategy, player1_strategy); end % 输出纳什均衡策略和收益 fprintf('纳什均衡策略为: (%d,%d)\n', player1_strategy, player2_strategy); fprintf('玩家1的收益为: %d\n', player1_payoff); fprintf('玩家2的收益为: %d\n', player2_payoff); ``` 这个代码示例使用了一个2人博弈的收益矩阵,其中第一行是玩家1的收益,第二行是玩家2的收益。初始化时,玩家1和玩家2的策略都是第一列,即选择第一种策略。然后使用一个简单的迭代算法来计算纳什均衡策略。在每一次迭代中,玩家1会选择收益最大的策略,而玩家2会选择玩家1在当前策略下收益最大的策略。最终,程序输出纳什均衡策略和每个玩家的收益。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值