这个文档对应的视频是https://www.bilibili.com/video/BV1iY41177n5/
以及https://www.bilibili.com/video/BV1f5411S73D?p=14&share_source=copy_web&vd_source=06fa200e6420998218426623bf697896
我们先复习一下,xyz三方演化博弈中,x的取值是{0,x*,1},y的取值是{0,y*,1},z的取值是{0,z*,1},其中x*,y*,z*的取值范围都是(0,1)。那么均衡点最多会有3*3*3=27个。
总共会有2*2*2=8个纯策略博弈均衡点,分别是(0,0,0),(0,0,1),(0,1,0),(1,0,0),(1,1,0),(1,0,1),(0,1,1),(1,1,1)。
混合策略均衡点最少有0个,最多有19个。
之前在视频中,求解的MATLAB代码是:
%复制动态方程组求均衡点解,三方演化博弈 clc,clear; syms x y z Rp Cph Cpl Cp Bt Fp Mp Ct Ft Mt Cg Tg; %符号变量使用前须定义 [x,y,z] = solve('x*(x-1)*(Cph-Cpl-Cp-Bt-y*(Rp-Bt)-z*(Fp+Mp))=0','y*(y-1)*((1-x)*(Bt-Mt)-(Ft+Mt)*z-Ct)=0','z*(z-1)*(Cg-Fp-Ft-Tg+(Mp+Fp+Tg)*x+(Mt+Ft+Tg)*y-Tg*x*y)=0')
有同学反映MATLAB计算三方演化博弈均衡点出问题了,现在本人来总结一下。
首先,咱两的MATLAB版本不一样,造成solve函数的出错。我的是MATLAB2016b,您的可能是MATLAB2014,或者MATLAB2016a,或MATLAB2020。以MATLAB2020版本为例,可以百度“MATLAB2020的solve函数”。或者试试下面这段代码:
clc,clear; syms x y z Rp Cph Cpl Cp Bt Fp Mp Ct Ft Mt Cg Tg; [x,y,z] = solve(x*(x-1)*(Cph-Cpl-Cp-Bt-y*(Rp-Bt)-z*(Fp+Mp))==0,y*(y-1)*((1-x)*(Bt-Mt)-(Ft+Mt)*z-Ct)==0,z*(z-1)*(Cg-Fp-Ft-Tg+(Mp+Fp+Tg)*x+(Mt+Ft+Tg)*y-Tg*x*y)==0)
相信聪明的您一定发现了区别。
其次,如果排除了版本的问题,那么可能是您更改了某些细节方面的东西。例如,有同学通过邮件询问了我这类问题,代码运行之后,“均衡点都不是稳定点,孩子快哭了”,“在求解三方演化博弈均衡点的时候,求出来只有两个解,且不包括前八个边界解。而且第三个变量的取值只有0或1,没有中间解”,等等。
clc,clear; syms x y z Rp Cph Cpl Cp Bt Fp Mp Ct Ft Mt Cg Tg; [x,y,z] = solve('x*(x-1)*(Cph-Cpl-Cp-Bt-y*(Rp-Bt)-z*(Fp+Mp))=0','y*(y-1)*((1-x)*(Bt-Mt)-(Ft+Mt)*z-Ct)=0','z*(z-1)*(Cg-Fp-Ft-Tg+(Mp+Fp+Tg)*x+(Mt+Ft+Tg)*y-Tg*x*y)=0')
第一行,clc后面的逗号不要改分号。
第二行,syms后面的要写x y z,不要写u v w,也不要写z x y。必须按顺序写x y z。然后,中间都是空格间隔,不要用逗号,末尾用分号不要空了。
第三行,基本就是solve函数在不同版本MATLAB中使用方法不一样,具体可以百度的。注意末尾没有分号,啥符号都不用加。
点击运行之后,MATLAB的命令窗口会提示运行出错,就像下图,玉帝说了“不必管他”。
然后,在查看x y z的解时,左右拖鼠标的时候,不要太快了,有的解很长,有的解是很短的。
对于很长的解怎么放在论文里呢?我的建议是选择一个字符等于它就好了,比如“令X1=...”,然后这个很长的解“...”放在论文的附录里。