2024年演化博弈及Python实现_演化博弈代码(2),2024年最新面试的时候突然遇到答不上的问题怎么办

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

三、模型构建

①根据静态博弈得出博弈收益矩阵->②计算不同决策期望收益及综合期望->③求出复制动态方程->④可能的均衡解->⑤采用雅可比矩阵的局部稳定分析法对均衡点进行判断->⑥演化相位图等

本文以已公开发布的参考资料①为基础进行复现!

3.1博弈收益矩阵

根据自己的博弈主体与各博弈主体在不同策略下得到的收益可以得到博弈支付矩阵

参考资料:博弈论->静态博弈

3.2综合期望

在得出博弈收益矩阵后,可以计算各个博弈主体在不同决策时的期望收益,最后计算综合期望收益

以上述博弈收益矩阵中的中小企业为例:

①当中小企业选择还款策略时(概率x),银行有y的概率要求上链,有1-y的概率要求上链,于是可以得到还款策略的期望收益为Ex=y[S1+G+(a-θ)Q1+K1+Q2+v-C]+(1-y)(S1+Sm+v-p1)。

②当中小企业选择不还款策略时(概率1-x),同上,即把银行的概率乘上相应策略组合下中小企业的收益即可。

③综合期望收益

\overline{Ex}=xE_x+(1-x)E_{1-x}

同理,可以求得银行相应策略下的期望收益及综合期望收益

3.3复制动态方程

以中小企业为例,复制动态方程为:

F(x)=\frac{dx}{dt}=x(E_x-\overline{E_x})=x(E_x-xE_x-(1-x)E_{1-x}) \=x(1-x)(E_x-E_{1-x})=x(1-x)[y(G-p_2+S_2)+v+p_2-A-S_2]

同理,可以计算得到银行的复制动态方程为:

F(y)=\frac{dy}{dt}=y(E_y-\overline{E_y})=y(E_y-yE_y-(1-y)E_{1-y}) =y(1-y)(E_y-E_{1-y})\=y(1-y)[x(p_2-p)+p-C+(a-\theta )Q_2+K_2Q_1-p_1-p_2+c_1+R_m]

总之,复制动态方程主要以下这一形式:

\F(x)=x(E_x-\overline{E_x})\F(y)=y(E_y-\overline{E_y})

3.4可能的均衡点

在求得各博弈主体的复制动态方程后,分别令该方程为0,就可以得到可能的均衡解:

对于中小企业:

令F(x)=dx/dt=0,即可得到三个可能的均衡解:

\left{\begin{matrix} x_1^*=0 \ x_2^*=1 \ y^*=\frac{A+S_2-v-p_2}{G+S_2-p_2} \end{matrix}\right.

对于银行:

令F(y)=dy/dt=0,即可得到三个可能的均衡解:

\left{\begin{matrix} y_1^*=0 \y_2^*=1 \x^*= \frac{C+P_1+P_2-p-(a-\theta )Q_2-K_2Q_1-c_1-R_m}{p_2-p}\end{matrix}\right.

于是,可能的稳定平衡点有(0,0)、(1,1)、(0,1)、(1,0)与{(x*,y*)|x*与y*∈(0,1)}

3.5局部稳定分析法

分别对中小企业与银行的复制动态方程求关于x与y的偏导数,得到雅可比矩阵为:

J=\begin{pmatrix} \frac{\partial F(x)}{\partial x} &\frac{\partial F(x)}{\partial y} \ \frac{\partial F(y)}{\partial x} & \frac{\partial F(y)}{\partial y} \end{pmatrix}= \begin{pmatrix} a_{11} &a_{12} \ a_{21}& a_{22} \end{pmatrix}\ =\begin{pmatrix} (1-2x)[y(G-p_2+S_2)+v+p_2-A-S_2] & x(1-x)(G-p_2+S_2)\ y(1-2y)[x(p_2-p)+p-C+(a-\theta)Q_2+K_2Q_1-p_1-p_2+c_1+R_m] & y(1-y)(p_2-p) \end{pmatrix}

雅可比矩阵的局部稳定分析法,若矩阵行列式大于0,迹小于0,即表示点为稳定点ESS

detJ=a11a22-a12a21>0

trJ=a11+a22<0

以点(1,1)为例,可以计算得到det J>0,tr J<0,因此点(1,1)为稳定点ESS(volutionarily stable strategy)。

此处不赘述,具体参考参考资料①, 该文献里对鞍点(x*,y*)的正负进行分类讨论,然后依次采用局部稳定分析法进行判别。该步骤可以根据自己实际推导出的模型进行判断,如果鞍点的正负容易判断的话,则不需要此步骤。

均衡点稳定性分析结果如下:

从上表可以看出(0,0)与(1,1)为演化平衡点,即(还款、要求上链)与(不还款、不要求上链)为最终的演化稳定策略。

四、理论分析

4.1演化相位图

根据上述稳定性分析结果,可得演化相位图如下:

4.2偏导

从演化相位图可以看出,当博弈双方的决策落在右侧四边形AECB时,演化博弈会向(1,1)点演化;反之,当当博弈双方的决策落在左侧四边形OAEC时,演化博弈会向(0,0)点演化。

于是,系统演化的概率可以用两块区域面积的大小来表示,而两侧四边形面积的大小取决于鞍点E。从图可以明显看出,随着鞍点E的横纵坐标减小,右侧四边形AECB的边际越大,中小企业还款与银行要求上链的概率就越大。

因此,有必要分析四边形AECB面积大小随各参数的变化。

从演化相位图易得,四边形AECB的面积为:

S_{AECB}=\frac{1}{2}[(1-x*)+(1-y*)]

此处以p为例,早保证其他参数不变的情况下,对SAECB关于p求偏导,得到以下结果:

\frac{\partial S_{AECB} }{\partial p}=\frac{N-M}{2N}>0

于是从偏导可以看出,随着p的增大,四边形AECB的面积增大。说明上链之后中小企业随着惩罚的加大,守约的概率越大,银行会继续选择上链的方式来监管中小企业的还款行为。

其余参数亦同,即通过求导分析各参数取值的变化为四边形AECB的影响

五、代码实现

5.1导入库

import random
import matplotlib.pyplot as plt
from pylab import *
plt.rcParams['axes.unicode_minus']=False  #用于解决不能显示负号的问题
mpl.rcParams['font.sans-serif'] = ['SimHei']

5.2设置复制动态方程及微分计算

为简化代码,此处复制动态方程为随手写的鞍点坐标为(0.5,0.5)!

此处应根据自己所构建的模型的复制动态方程进行相应的修改!!!

#各博弈主体动态复制方程
def f(x,y):
    return x*(1-x)*(5*y-2.5)
def g(x,y):
    return y*(1-y)*(4*x-2)

#initX-x初始值
#initY-y初始值
#dt-步长
#epoch-迭代次数
def calculateValue(initX, initY, dt, epoch):
    x = []
    y = []
    
    #演化初始赋值
    x.append(initX)
    y.append(initY)
    
    #微量计算及append
    for index in range(epoch):
        tempx = x[-1] + (f(x[-1],y[-1])) * dt
        tempy = y[-1] + (g(x[-1],y[-1])) * dt

        x.append(tempx)
        y.append(tempy)
    return (x, y)

5.3绘图

plt.figure(figsize=(7,7))


D=[]
#随机生成200个初始点
for index in range(200):
    random_a=random.random()
    random_b=random.random()
    #步长dt为0.001 迭代次数1000
    d=calculateValue(random_a,random_b,0.001,1000)
    D.append(d)


for n,m in D:
    plt.plot(n,m)


plt.ylabel("$y$",fontsize=25)
plt.xlabel("$x$",fontsize=25)  
plt.tick_params(labelsize=25)
plt.xticks([0,0.2,0.4,0.6,0.8,1])
plt.grid(linestyle=":",color="b",linewidth=1)
plt.savefig("test",dpi=300,bbox_inches ="tight")

5.4效果

六、鞍点E坐标变化对演化博弈的影响

第五节的示例的微分方程中,可以轻易算出鞍点坐标为(0.5,0.5)

因此,本节首先对复制动态方程稍作修改,并绘出不同鞍点坐标情况下的演化博弈图进行对比!

代码如下:

import matplotlib.pyplot as plt
from pylab import *
plt.rcParams['axes.unicode_minus']=False  #用于解决不能显示负号的问题
mpl.rcParams['font.sans-serif'] = ['SimHei']
import random


#各博弈主体动态复制方程
def f(x,y):
    return x*(1-x)*(5*y+Z-2.5)
def g(x,y):


![img](https://img-blog.csdnimg.cn/img_convert/a42dbd16aa8607f034a8c667c979ee1b.png)
![img](https://img-blog.csdnimg.cn/img_convert/02da49e5d13ccf9d0c805fcc234c88cf.png)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以添加戳这里获取](https://bbs.csdn.net/topics/618668825)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

[外链图片转存中...(img-dKQ508Rc-1715675861626)]
[外链图片转存中...(img-DpxgiUe5-1715675861626)]

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以添加戳这里获取](https://bbs.csdn.net/topics/618668825)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值