完全信息静态博弈纯策略均衡

2 篇文章 0 订阅

完全信息静态博弈纯策略均衡

半夜写推文眼酸,早上绕学校走两圈,回忆代码有bug,故重新推文

1 纯策略完全信息静态博弈

纯策略完全信息静态博弈可以通过严格占优策略反复寻找法、严格劣策略反复剔除法、划线法和箭头法寻找Nash equilibrium。由于划线法使用比较简洁,下文通过R语言模拟并寻找纯策略完全信息静态博弈的Nash equilibrium。

2 R代码操作

算法思路比较简单。假设有甲乙两个参与人,其策略集分别为 ( s 1 , s 2 ) (s_1,s_2) (s1,s2) ( t 1 , t 2 ) (t_1,t_2) (t1,t2),各自的收益矩假定如下:

# 纯策略完全信息静态博弈=划线法R实现
# 前提:存在纯策略均衡,可求多重均衡
rm(list = ls())
# 甲收益矩阵
M1 = matrix(c(1,2,3,4),2)
# 乙收益矩阵
M2 = matrix(c(4,3,2,1),2)

定义甲乙策略空间中所有策略名称

# 策略空间定义
a = 1:nrow(M1)
b = 1:ncol(M1)
rownames(M1) = paste("s",a,sep = "")
colnames(M1) = paste("t",b,sep = "")
rownames(M2) = paste("s",a,sep = "")
colnames(M2) = paste("t",b,sep = "")
M1 # 甲
M2 # 乙

可以查看甲乙各自的收益矩阵

   t1 t2
s1  1  3
s2  2  4
======================================================================
   t1 t2
s1  4  2
s2  3  1

使用划线法寻找Nash equilibrium,定义两个空矩阵,接收0-1

A = matrix(0,nrow(M1),ncol(M1))
B = matrix(0,nrow(M2),ncol(M2))

给定乙方策略,甲方选择收益最大策略,并把甲策略收益转化为二进制

for(j in 1:ncol(M1)){
  for(i in 1:nrow(M1)){
    if(M1[i,j] == max(M1[,j])){
      A[i,j] = 1
    }else{
      A[i,j] = 0
    }
  }
}

给定甲方策略,乙方选择收益最大策略,并把乙策略收益转化为二进制

for(i in 1:nrow(M2)){
  for(j in 1:ncol(M2)){
    if(M2[i,j] == max(M2[i,])){
      B[i,j] = 1
    }else{
      B[i,j] = 0
    }
  }
}

将甲乙二进制收益矩阵相加,数值为2对应的策略则是Nash equilibrium

C = A+B
rownames(C) = paste("s",a,sep = "")
colnames(C) = paste("t",b,sep = "")
C
   t1 t2
s1  1  0
s2  2  1

可以发现,上述博弈Nash equilibrium是甲选择s2策略,乙选择t1策略。

3 一般情形

将上述过程定义为一个函数

rm(list = ls())
Nash = function(mat1,mat2){
  # mat1参与人1的支付矩阵
  # mat2参与人2的支付矩阵
  #==========================
  # 策略名
  a = 1:nrow(mat1)
  b = 1:ncol(mat1)
  rownames(mat1) = paste("s",a,sep = "")
  colnames(mat1) = paste("t",b,sep = "")
  rownames(mat2) = paste("s",a,sep = "")
  colnames(mat2) = paste("t",b,sep = "")
  
  # 定义两个空矩阵,接收0-1
  A = matrix(0,nrow(mat1),ncol(mat1))
  B = matrix(0,nrow(mat2),ncol(mat2))
  
  # 给定乙方策略,甲方选择收益最大策略
  # 将甲策略收益转化为二进制
  for(j in b){
    for(i in a){
      if(mat1[i,j] == max(mat1[,j])){
        A[i,j] = 1
      }else{
        A[i,j] = 0
      }
    }
  }
  # 将乙策略收益转化为二进制
  for(i in a){
    for(j in b){
      if(mat2[i,j] == max(mat2[i,])){
        B[i,j] = 1
      }else{
        B[i,j] = 0
      }
    }
  }
  # 将甲乙二进制收益矩阵相加,数值为2对应的策略则是Nash equilibrium
  C = A+B
  rownames(C) = paste("s",a,sep = "")
  colnames(C) = paste("t",b,sep = "")
  return(C)
}

设定一个复杂的情形,设甲乙两个参与人的策略集分别为 s i ( i = 1 , 2 … 5 ) s_i(i=1,2\dots 5) si(i=1,25), t j ( j = 1 , 2 … 6 ) t_j(j=1,2\dots 6) tj(j=1,26)

# 收益矩阵设定为随机
N = 30
set.seed(1)
A = matrix(rnorm(N,0,1),5)
set.seed(2)
B = matrix(rnorm(N,0,1),5)
Nash(A,B)

结果为

   t1 t2 t3 t4 t5 t6
s1  0  0  1  0  2  0
s2  0  0  1  0  0  0
s3  0  1  0  1  1  0
s4  1  1  0  0  0  0
s5  0  0  1  0  0  1

结果发现,Nash equilibrium是甲选择 s 1 s_1 s1策略,乙选择 t 5 t_5 t5



-END-
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值