完全信息静态博弈的纯策略均衡
完全信息静态博弈纯策略均衡
文章目录
- 完全信息静态博弈纯策略均衡
- @[toc]
- 1 纯策略完全信息静态博弈
- 2 R代码操作
- 3 一般情形
文章目录
- 完全信息静态博弈纯策略均衡
- @[toc]
- 1 纯策略完全信息静态博弈
- 2 R代码操作
- 3 一般情形
半夜写推文眼酸,早上绕学校走两圈,回忆代码有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,2…5), t j ( j = 1 , 2 … 6 ) t_j(j=1,2\dots 6) tj(j=1,2…6)
# 收益矩阵设定为随机
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