演化博弈的仿真分析 基于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
posted @   kuanleung  阅读(511)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示