演化博弈及Python实现
目錄
一、寫在前面
二、演化博弈
三、模型構(gòu)建
3.1博弈收益矩陣
3.2綜合期望
3.3復(fù)制動態(tài)方程
3.4可能的均衡點
3.5局部穩(wěn)定分析法
四、理論分析
4.1演化相位圖
4.2偏導(dǎo)
五、代碼實現(xiàn)
5.1導(dǎo)入庫
5.2設(shè)置復(fù)制動態(tài)方程及微分計算
5.3繪圖
5.4效果?
六、鞍點E坐標(biāo)變化對演化博弈的影響
零、效果
一、寫在前面
參考資料:
①:區(qū)塊鏈下的倉單質(zhì)押銀企演化博弈分析
②:基于服務(wù)化的制造企業(yè)與服務(wù)提供商的演化博弈分析
③:基于演化博弈的區(qū)塊鏈技術(shù)在供應(yīng)鏈金融中的應(yīng)用研究
本文主要以參考資料1為基礎(chǔ)進(jìn)行介紹與說明!
二、演化博弈
不同于傳統(tǒng)的經(jīng)典博弈論,演化博弈理論是把博弈理論分析和動態(tài)演化過程分析結(jié)合起來的一種理論,其強(qiáng)調(diào)的是一種動態(tài)理論。Maynard Smith和Price將生物進(jìn)化理論引入到博弈論提出演化博弈論,在演化博弈論中的納什均衡是參與方根據(jù)各自所面對的環(huán)境不斷調(diào)整決策最終實現(xiàn)均衡的動態(tài)過程。
在傳統(tǒng)博弈理論中,常常假定參與人是完全理性的,且參與人在完全信息條件下進(jìn)行的,但在現(xiàn)實的經(jīng)濟(jì)生活中的參與人來講,參與人的完全理性與完全信息的條件是很難實現(xiàn)的。在企業(yè)的合作競爭中,參與人之間是有差別的,經(jīng)濟(jì)環(huán)境與博弈問題本身的復(fù)雜性所導(dǎo)致的信息不完全和參與人的有限理性問題是顯而易見的。
完全理性對博弈主體的理性要求十分嚴(yán)格,因為理性程度高可以使得博弈數(shù)學(xué)分析更加方便可靠。然而實際生活中的決策環(huán)境十分復(fù)雜,信息存在著不對稱等現(xiàn)象,博弈方很難掌握所有的信息并進(jìn)行完全理性的思考,因此有限理性才是比較實際的做法。很顯然有限理性博弈需要考慮的因素更多,它比完全理性博弈更加復(fù)雜,而演化博弈就是一種有限理性的博弈方法,復(fù)制動態(tài)和演化穩(wěn)定策略則是演化博弈的核心。
三、模型構(gòu)建
①根據(jù)靜態(tài)博弈得出博弈收益矩陣->②計算不同決策期望收益及綜合期望->③求出復(fù)制動態(tài)方程->④可能的均衡解->⑤采用雅可比矩陣的局部穩(wěn)定分析法對均衡點進(jìn)行判斷->⑥演化相位圖等
本文以已公開發(fā)布的參考資料①為基礎(chǔ)進(jìn)行復(fù)現(xiàn)!
3.1博弈收益矩陣
根據(jù)自己的博弈主體與各博弈主體在不同策略下得到的收益可以得到博弈支付矩陣!
參考資料:博弈論->靜態(tài)博弈
3.2綜合期望
在得出博弈收益矩陣后,可以計算各個博弈主體在不同決策時的期望收益,最后計算綜合期望收益
以上述博弈收益矩陣中的中小企業(yè)為例:
①當(dāng)中小企業(yè)選擇還款策略時(概率x),銀行有y的概率要求上鏈,有1-y的概率要求上鏈,于是可以得到還款策略的期望收益為Ex=y[S1+G+(a-θ)Q1+K1+Q2+v-C]+(1-y)(S1+Sm+v-p1)。
②當(dāng)中小企業(yè)選擇不還款策略時(概率1-x),同上,即把銀行的概率乘上相應(yīng)策略組合下中小企業(yè)的收益即可。
③綜合期望收益
同理,可以求得銀行相應(yīng)策略下的期望收益及綜合期望收益
3.3復(fù)制動態(tài)方程
以中小企業(yè)為例,復(fù)制動態(tài)方程為:
同理,可以計算得到銀行的復(fù)制動態(tài)方程為:
?總之,復(fù)制動態(tài)方程主要以下這一形式:
3.4可能的均衡點
在求得各博弈主體的復(fù)制動態(tài)方程后,分別令該方程為0,就可以得到可能的均衡解:
對于中小企業(yè):
令F(x)=dx/dt=0,即可得到三個可能的均衡解:
對于銀行:
令F(y)=dy/dt=0,即可得到三個可能的均衡解:
于是,可能的穩(wěn)定平衡點有(0,0)、(1,1)、(0,1)、(1,0)與{(x*,y*)|x*與y*∈(0,1)}
3.5局部穩(wěn)定分析法
分別對中小企業(yè)與銀行的復(fù)制動態(tài)方程求關(guān)于x與y的偏導(dǎo)數(shù),得到雅可比矩陣為:
雅可比矩陣的局部穩(wěn)定分析法,若矩陣行列式大于0,跡小于0,即表示點為穩(wěn)定點ESS
detJ=a11a22-a12a21>0
trJ=a11+a22<0
?以點(1,1)為例,可以計算得到det J>0,tr J<0,因此點(1,1)為穩(wěn)定點ESS(volutionarily stable strategy)。
此處不贅述,具體參考參考資料①, 該文獻(xiàn)里對鞍點(x*,y*)的正負(fù)進(jìn)行分類討論,然后依次采用局部穩(wěn)定分析法進(jìn)行判別。該步驟可以根據(jù)自己實際推導(dǎo)出的模型進(jìn)行判斷,如果鞍點的正負(fù)容易判斷的話,則不需要此步驟。
均衡點穩(wěn)定性分析結(jié)果如下:
?從上表可以看出(0,0)與(1,1)為演化平衡點,即(還款、要求上鏈)與(不還款、不要求上鏈)為最終的演化穩(wěn)定策略。
四、理論分析
4.1演化相位圖
?根據(jù)上述穩(wěn)定性分析結(jié)果,可得演化相位圖如下:
4.2偏導(dǎo)
從演化相位圖可以看出,當(dāng)博弈雙方的決策落在右側(cè)四邊形AECB時,演化博弈會向(1,1)點演化;反之,當(dāng)當(dāng)博弈雙方的決策落在左側(cè)四邊形OAEC時,演化博弈會向(0,0)點演化。
于是,系統(tǒng)演化的概率可以用兩塊區(qū)域面積的大小來表示,而兩側(cè)四邊形面積的大小取決于鞍點E。從圖可以明顯看出,隨著鞍點E的橫縱坐標(biāo)減小,右側(cè)四邊形AECB的邊際越大,中小企業(yè)還款與銀行要求上鏈的概率就越大。
因此,有必要分析四邊形AECB面積大小隨各參數(shù)的變化。
?從演化相位圖易得,四邊形AECB的面積為:
?此處以p為例,早保證其他參數(shù)不變的情況下,對SAECB關(guān)于p求偏導(dǎo),得到以下結(jié)果:
于是從偏導(dǎo)可以看出,隨著p的增大,四邊形AECB的面積增大。說明上鏈之后中小企業(yè)隨著懲罰的加大,守約的概率越大,銀行會繼續(xù)選擇上鏈的方式來監(jiān)管中小企業(yè)的還款行為。
其余參數(shù)亦同,即通過求導(dǎo)分析各參數(shù)取值的變化為四邊形AECB的影響!
五、代碼實現(xiàn)
5.1導(dǎo)入庫
import random import matplotlib.pyplot as plt from pylab import * plt.rcParams['axes.unicode_minus']=False #用于解決不能顯示負(fù)號的問題 mpl.rcParams['font.sans-serif'] = ['SimHei']5.2設(shè)置復(fù)制動態(tài)方程及微分計算
為簡化代碼,此處復(fù)制動態(tài)方程為隨手寫的鞍點坐標(biāo)為(0.5,0.5)!
此處應(yīng)根據(jù)自己所構(gòu)建的模型的復(fù)制動態(tài)方程進(jìn)行相應(yīng)的修改!!!
#各博弈主體動態(tài)復(fù)制方程 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-迭代次數(shù) def calculateValue(initX, initY, dt, epoch):x = []y = []#演化初始賦值x.append(initX)y.append(initY)#微量計算及appendfor index in range(epoch):tempx = x[-1] + (f(x[-1],y[-1])) * dttempy = y[-1] + (g(x[-1],y[-1])) * dtx.append(tempx)y.append(tempy)return (x, y)5.3繪圖
plt.figure(figsize=(7,7))D=[] #隨機(jī)生成200個初始點 for index in range(200):random_a=random.random()random_b=random.random()#步長dt為0.001 迭代次數(shù)1000d=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坐標(biāo)變化對演化博弈的影響
第五節(jié)的示例的微分方程中,可以輕易算出鞍點坐標(biāo)為(0.5,0.5)
因此,本節(jié)首先對復(fù)制動態(tài)方程稍作修改,并繪出不同鞍點坐標(biāo)情況下的演化博弈圖進(jìn)行對比!
代碼如下:
import matplotlib.pyplot as plt from pylab import * plt.rcParams['axes.unicode_minus']=False #用于解決不能顯示負(fù)號的問題 mpl.rcParams['font.sans-serif'] = ['SimHei'] import random#各博弈主體動態(tài)復(fù)制方程 def f(x,y):return x*(1-x)*(5*y+Z-2.5) def g(x,y):return y*(1-y)*(4*x+Z-2)#initX-x初始值 #initY-y初始值 #dt-步長 #epoch-迭代次數(shù) def calculateValue(initX, initY, dt, epoch):x = []y = []#演化初始賦值x.append(initX)y.append(initY)#微量計算及appendfor index in range(epoch):tempx = x[-1] + (f(x[-1],y[-1])) * dttempy = y[-1] + (g(x[-1],y[-1])) * dtx.append(tempx)y.append(tempy)return (x, y)p1 = plt.figure(figsize=(14,7)) plt.subplots_adjust(wspace=0.23)#-----Z = -0.5D=[] for index in range(200):random_a=random.random()random_b=random.random()d=calculateValue(random_a,random_b,0.001,1000)D.append(d)p1.add_subplot(1,2,1)for n,m in D:plt.plot(n,m)plt.title("Z=-0.5",fontsize=25) 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.title("Phase space") plt.grid(linestyle=":",color="b",linewidth=1) #-----Z = 1D=[] for index in range(200):random_a=random.random()random_b=random.random()d=calculateValue(random_a,random_b,0.001,1000)D.append(d)p1.add_subplot(1,2,2)for n,m in D:plt.plot(n,m)plt.title("Z=1",fontsize=25) 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.title("Phase space") plt.grid(linestyle=":",color="b",linewidth=1)plt.savefig("test",dpi=300,bbox_inches ="tight")plt.show()效果:
?從上圖可以看出,隨著Z的增大,鞍點E的坐標(biāo)越向右上角移動,即更多的初始點會向(1,1)收斂;該規(guī)律可以通過求偏導(dǎo)進(jìn)行驗證,此處不贅述。
有問題留言或私信!
總結(jié)
以上是生活随笔為你收集整理的演化博弈及Python实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Geoserver+postSQL+op
- 下一篇: python爬虫淘宝评论图片_淘宝上的图