演化博弈的仿真分析 基于matlab
演化博弈简介
在传统博弈理论中,常常假定参与人是完全理性的,且参与人在完全信息条件下进行的,但在现实的经济生活中的参与人来讲,参与人的完全理性与完全信息的条件是很难实现的。在企业的合作竞争中,参与人之间是有差别的,经济环境与博弈问题本身的复杂性所导致的信息不完全和参与人的有限理性问题是显而易见的。与传统博弈理论不同。有限理性这一概念最早是由西蒙在研究决策问题时提出的,因为个人在以别人能够理解的方式通过语句、数字或图表来表达自己的知识或感情时是有限制的(这或许是因为他们没有掌握到所必需的词汇,或许是因为这些词汇还不存在)。
演化博弈论:一般的演化博弈理论具有如下特征:它的研究对象是随着时间变化的某一群体,理论探索的目的是为了理解群体演化的动态过程,并解释说明为何群体将达到的这一状态以及如何达到。影响群体变化的因素既具有一定的随机性和扰动现象(突变),又有通过演化过程中的选择机制而呈现出来的规律性。大部分演化博弈理论的预测或解释能力在于群体的选择过程,通常群体的选择过程具有一定的惯性,同时这个过程也潜伏着突变的动力,从而不断地产生新变种或新特征。
演化博弈三维图
第一部分
function dydt=sanfang(t,y) *定义一个函数,保存为函数名.m的文件,t,y为输入函数的参数,t为时间,演化过程随时间而变化* dydt=zeros(3,1); *zeros(m, n):生成一个m*n的零矩阵* dydt(1)=y(1)*(1-y(1))*(15-7*y(2)); *输入第一个对象的复制动态方程,y(1)代表x* dydt(2)=y(2)*(1-y(2))*(1+7*y(1)+2*y(3)); *输入第二个对象的复制动态方程,y(2)代表y* dydt(3)=y(3)*(1-y(3))*(-1+3*y(2)); *输入第三个对象的复制动态方程,y(3)代表z* end
第二部分
for i=0.1:0.2:0.9 *x的起始点为0.1,步长为0.2,终止点为0.9,可根据自己对图形的要求修改* for j=0.1:0.2:0.9 *y的起始点为0.1,步长为0.2,终止点为0.9,可根据自己对图形的要求修改* for m=0.1:0.2:0.9 *z的起始点为0.1,步长为0.2,终止点为0.9,可根据自己对图形的要求修改* [T,Y]=ode45('sanfang',[0 10],[i j m]); *ode45函数,求解常微分方程的数值,’sanfang’为自己前面设计的函数名,[0,10]为t的范围,[i j m]为xyz的范围figure(1) *数据都大于0* grid on *显示坐标轴网格线* plot3(Y(:,1),Y(:,2),Y(:,3),'k','lineWidth',1); *plot3画三维图函数* *Y(:,1)表示(所有行,第一列)即表示dx/dt* *Y(:,2)表示(所有行,第二列)即表示dy/dt* *Y(:,3)表示(所有行,第三列)即表示dz/dt* *’k’表示线条为黑色* *'lineWidth’,1表示线宽为1* xlabel(‘p1’); x轴的名字 ylabel(‘p2’);y轴的名字 zlabel(‘p3’);z轴的名字 hold on view([0.5 0.5 0.5]) *调整视角,可根据自己的需要调整*
代码
for i=0.1:0.2:0.9 for j=0.1:0.2:0.9 for m=0.1:0.2:0.9 [T,Y]=ode45('sanfang',[0 10],[i j m]); figure(1) grid on %plot3(Y(:,1),Y(:,2),Y(:,3),'k','lineWidth',1); plot3(Y(:,1),Y(:,2),Y(:,3),'k','lineWidth',1,'color',[i j m]); hold on end end end xlabel('p1'); ylabel('p2'); zlabel('p3'); view([0.8 0.8 0.8])
函数代码:(命名为sanfang)
function dydt=sanfang(t,y) dydt=zeros(3,1); dydt(1)=y(1)*(1-y(1))*(15-7*y(2)); dydt(2)=y(2)*(1-y(2))*(1+7*y(1)+2*y(3)); dydt(3)=y(3)*(1-y(3))*(-1+3*y(2)); end
MATLAB三方演化博弈二维图
第一部分
function dy =sanfangdongtai(t,y,r1,k1,c1,s1,r3,c3,c4,s2,c5) *输入函数名sanfangdongtai,括号里面输入所有的参数* dy=zeros(3,1); *zeros(m, n):生成一个m*n的零矩阵* dy(1)=y(1)*(1-y(1))*(-y(2)*(k1+s1)+r1+k1-c1); *输入第一个对象的复制动态方程,y(1)代表x* dy(2)=y(2)*(1-y(2))*(-y(3)*(s2-c4)+y(1)*(k1+s1)+r3-c3-c4); *输入第二个对象的复制动态方程,y(2)代表y* dy(3)=y(3)*(1-y(3))*(y(2)*s2-c5); *输入第三个对象的复制动态方程,y(3)代表z* end
第二部分
p1=0.3,p2=0.5,p3=0.4; *输入博弈三方的初始概率* r1=9,k1=1,c1=5,s1=1,r3=8,c3=6,c4=4,s2=2.5,c5=1; *输入所有参数的值* [t,y]=ode45(@(t,y)sanfangdongtai(t,y,r1,k1,c1,s1,r3,c3,c4,s2,c5),[0:10],[p1,p2,p3]); *f=@(x)acos(x) 相当于建立了一个函数文件:% f.m* *用ODE45函数求解刚刚定义的常微分方程* *[0:10]为时间t的范围* *[p1 p2 p3]为输入p1、p2、p3的值* y1=y(:,1); *表示dx/dt* plot(t,y1,'--r'); *画x的演化图,--为虚线,r为红色* hold on; y2=y(:,2); *表示dy/dt* plot(t,y2,'*-k'); *画y的演化图,*-为星号标记实线,k为黑色* hold on; y3=y(:,3); *表示dz/dt* plot(t,y3,'--g'); *画z的演化图,--为虚线,g为绿色* xlabel('t'); *x轴为时间t* ylabel('p'); *y轴为概率p* hold on; legend(‘政府’,’企业’,’消费者’); *加标注,三条线分别代表是什么*
MATLAB三方动态博弈二维图
可通过MATLAB图形编辑功能调整图形的坐标范围、线条颜色、形状等。
代码:
p1=0.3,p2=0.5,p3=0.4; r1=9,k1=1,c1=5,s1=1,r3=8,c3=6,c4=4,s2=2.5,c5=1; [t,y]=ode45(@(t,y)erweisanfang(t,y,r1,k1,c1,s1,r3,c3,c4,s2,c5),[0:10],[p1,p2,p3]); y1=y(:,1); plot(t,y1,'--r'); hold on; y2=y(:,2); plot(t,y2,'*-k'); hold on; y3=y(:,3); plot(t,y3,'--g'); xlabel('t'); ylabel('p'); hold on; legend('政府','企业','消费者');
函数:(erweisanfang)
function dy = sanfangdongtai(t,y,r1,k1,c1,s1,r3,c3,c4,s2,c5) dy=zeros(3,1); dy(1)=y(1)*(1-y(1))*(-y(2)*(k1+s1)+r1+k1-c1); dy(2)=y(2)*(1-y(2))*(-y(3)*(s2-c4)+y(1)*(k1+s1)+r3-c3-c4); dy(3)=y(3)*(1-y(3))*(y(2)*s2-c5); end
总结:
代码:
for i=0:0.1:0.99; for j=0:0.1:0.99; for m=0:0.1:0.99; P1=0.4;P2=0.2;R1=0.5;R2=0.3;M1=0.10;M2=0.8;M3=0.10;L1=0.7; %P1=0.6;P2=0.4;R1=0.5;R2=0.3;M1=0.10;M2=0.8;M3=0.10;L1=0.7; [T,Y]=ode45(@(t,y)sanfang(t,y,P1,P2,R1,R2,M1,M2,M3,L1),[0:200],[i,j,m]); figure(1) grid on %plot3(Y(:,1),Y(:,2),Y(:,3),'k','lineWidth',1); plot3(Y(:,1),Y(:,2),Y(:,3),'k','lineWidth',1,'color',[i j m]); hold on if i <= 0.1; Y(:,1) end end end end xlabel('p1'); ylabel('p2'); zlabel('p3'); view([0.8 0.8 0.8]) t = T figure(2) y1=Y(:,1); plot(t,y1,'-r'); hold on; y2=Y(:,2); plot(t,y2,'-*k'); hold on; y3=Y(:,3); plot(t,y3,'-+g'); xlabel('t'); ylabel('p'); hold on; legend('政府','保险公司','渔民');
函数
function dydt=sanfang(t,y,P1,P2,R1,R2,M1,M2,M3,L1) dydt = zeros(3,1); dydt(1)= y(1)*(1-y(1))*(R1*(y(3)-1)-y(2)*P1+y(3)*P2-M1); dydt(2)=y(2)*(1-y(2))*(P1-M2+R2); dydt(3)=y(3)*(1-y(3))*(L1*(y(1)+y(2)-y(1)*y(2)+P2-M3)); end
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!