1.演化博弈入门代码

MATLAB演化博弈仿真(双方)操作详解

声明:笔者所用win7+MATLAB2016b版本。安装破解过程可能会有部分问题,可直接联系笔者或百度。

正文

论文标题:《农户与企业合作下的农产品质量安全演化博弈仿真研究》
①首先确定复制动态方程。下述方程是摘自论文中,请读者对方程有个印象。

image.png

image.png
image.png

②其次确定参数。数值取值原因详见论文。

image.png

③将上述数值先笔算代入复制动态方程中。
可以得到最后的表达式为:
F(x)=x(1-x)(0.9875y-0.3875) ; F(Y)= y(1-y)(0.135x-0.075)
原论文是用Netlogo仿真,本文改用MATLAB进行实验。打开MATLAB,点击编辑器|新建|脚本,
image.png

输入代码如下:

%定义函数,function开始,end结束
function dxdt=differential(t,x)%定义一个名为differential的函数
dxdt=[x(1)*(1-x(1))*(0.9875*x(2)-0.3875);x(2)*(1-x(2))*(0.135*x(1)-0.075)];
%x(1)是演化博弈中一方的决策概率X,x(2)是演化博弈中另一方的决策概率Y。x(1)*(1-x(1))*(0.6-0.9875*(1-x(2)))是F(X),中间分号隔开,x(2)*(1-x(2))*0.06是F(Y),把初始设定值代入即可
end

注:MATLAB注释符为%,仅起注释作用,读者若视之碍眼可删除,注意代码输入需英文输入法,标点符号容易出bug。有关代码的问题可直接联系笔者。

代码在MATLAB中如下显示:

image.png

点击运行,保存命名为“differential.m”,并“添加到路径”。文件一定要保存在自己清楚的位置。
点击“+””(点击的按钮,笔者均已标注),新建一个脚本,并输入以下代码:

%先做dy/dt与dx/dt的关系图像
for i=0:0.1:1 %横坐标的取值范围是[0,1],图中间隔为0.1
    for j=0:0.1:1 %纵坐标的取值范围是[0,1],图中间隔为0.1
        [T,Y]=ode45('differential',[0 5],[i j]);%ode45()是用于求解微分方程数值解的函数,differential是求解的函数名,出图的代码中的函数名与之前定义的要一样, [0 5]是时间T的区间,[i j]是初始值向量
        figure(1)%建立图形的函数,系统自动从1,2,…建立图形,figure(1)是第一幅图的意思
        grid on %显示网格线,删除或在前面加上%可以不显示网格
        plot(Y(:,1),Y(:,2));% Y(:,1)是dx/dt,Y(:,2)是dy/dt
        hold on%意思是将前面的坐标系、网格线、x、y的图像整合在一起显示
    end%结束第二个for
end%结束第一个for
set(gca,'XTick',[0:0.1:1],'YTick',[0:0.1:1])%设置网格的显示格式,gca获取当前
xlabel('x占比');%在图中的横坐标显示“x占比”
ylabel('y占比'); %在图中的纵坐标显示“y占比”
%其次做dx/dt与时间T的关系图像
for i=0:0.1:1
    for j=0:0.1:1
        [T,Y]=ode45('differential',[0 5],[i j]);
        figure(2)
        grid on
        plot(T,Y(:,1));
        hold on  
    end
end
xlabel('x占比');
ylabel('y占比'); 
%最后做dy/dt与时间T的关系图像
for i=0:0.1:1
    for j=0:0.1:1
        [T,Y]=ode45('differential',[0 5],[i j]);
        figure(3)
        grid on
        plot(T,Y(:,2));
        hold on  
    end
end
xlabel('x占比');
ylabel('y占比');

点击运行|保存|添加到路径,命名为“map.m”。文件一定要保存在自己熟记的位置。


image.png

运行过后,出现三张图,如下:


image.png
image.png

image.png

点击文件|另存为,保存类型选择jpg或png,即可复制粘贴至论文中。

读者请注意,前面我们的出图是分散的,现将两个博弈主体的比例放置在同一张图,我们试试改完以后的代码,运行之后有什么不同。

image.png
image.png

可以直观看到,图一没变,图二将前面的图二、图三整合到一张图上。
代码如下:

%the first map
for i=0:0.1:1
    for j=0:0.1:1
        [T,Y]=ode45('differential',[0 100],[i j]);
        figure(1)
        grid on
        plot(Y(:,1),Y(:,2));
        hold on
    end
end
set(gca,'XTick',[0:0.1:1],'YTick',[0:0.1:1])%设置网格的显示格式,gca获取当前
xlabel('x占比');
ylabel('y占比');
%the second map
for i=0:0.1:1
    for j=0:0.1:1
        [T,Y]=ode45('differential',[0 100],[i j]);
        figure(2)
        grid on
        plot(T,Y(:,1),'r*-','lineWidth',1);%先绘制F(X)随时间T变化的图像,'r*-'是由“*”绘制的红色线条,'lineWidth',1绘制宽度为1的线条,数值越大线条越粗。
        hold on
        plot(T,Y(:,2),'b--','lineWidth',1);%再绘制F(Y)随时间T变化的图像,' b--'是由“-”绘制的蓝色线条
        hold on  
    end
end
set(gca,'XTick',[0:10:100],'YTick',[0:0.1:1])
legend('企业','农户')%在图中显示各博弈方(企业、农户)对应的线条,因为将博弈方添加到一张图,所以有必要进行标注
xlabel('时间');
ylabel('占比');

原文交代如下:


image.png

只需将上述代码稍改一下即可,笔者已将改动之处做了标记。
代码如下:

%the first map
for i=0:0.1:1
    for j=0:0.1:1
        [T,Y]=ode45('differential',[0 100],[i j]);
        figure(1)
        grid on
        plot(Y(:,1),Y(:,2));
        hold on
    end
end
set(gca,'XTick',[0:0.1:1],'YTick',[0:0.1:1])%设置网格的显示格式,gca获取当前
xlabel('x占比');
ylabel('y占比');
%the second map
for i=0.56%%%%%%%%%%%% hey,改这里
    for j=0.40%%%%%%%%%%%% hey,改这里
        [T,Y]=ode45('differential',[0 100],[i j]);
        figure(2)
        grid on
        plot(T,Y(:,1),'r*-','lineWidth',1);
        hold on
        plot(T,Y(:,2),'b--','lineWidth',1);
        hold on  
    end
end
set(gca,'XTick',[0:10:100],'YTick',[0:0.1:1])
legend('企业','农户')%在图中显示各博弈方(企业、农户)对应的线条
xlabel('时间');
ylabel('占比');

出图效果如下:


image.png

image.png

原论文当中出图如下,请读者自行对比netlogo与MATLAB的不同之处。


image.png

当然,关于演化博弈仿真这块,论文当中还有其他图像,请读者自行根据本文方法实验,笔者不再展开。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,843评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,538评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,187评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,264评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,289评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,231评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,116评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,945评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,367评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,581评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,754评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,458评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,068评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,692评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,842评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,797评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,654评论 2 354

推荐阅读更多精彩内容