matlab:双或三方演化博弈,随机演化博弈,lotka-Volterra ,斯塔伯格 1.双方演化博弈:稳定点分析,绘制相位图,matlab仿真图代码 2.三方演化博弈:稳定点分析,绘制相位图,matlab仿真图代码3.lotka-Volterra模型4.斯塔伯格博弈模型


当演化博弈遇上MATLAB:从理论到代码实现

1. 双方演化博弈:用相位图看策略厮杀

演化博弈的核心在于策略的相互博弈,咱们先来看最简单的双群体博弈。假设两个群体采用策略A/B,复制动态方程可以用这样的MATLAB函数表示:

function dx = replicator(t, x)
    payoffA = 3*x(2) - 1;  % 策略A的收益
    payoffB = 2*x(1) + 1;  % 策略B的收益
    avg_payoff = x(1)*payoffA + x(2)*payoffB;
    dx = [x(1)*(payoffA - avg_payoff);  % dx/dt方程
          x(2)*(payoffB - avg_payoff)];
end

ode45求解微分方程后,相位图绘制是关键。下面的代码片段生成带箭头的动态流线图:

[X,Y] = meshgrid(0:0.1:1, 0:0.1:1);
U = zeros(size(X)); V = zeros(size(X));
for i = 1:numel(X)
    dx = replicator(0, [X(i); Y(i)]);
    U(i) = dx(1); V(i) = dx(2);
end
quiver(X,Y,U,V,2,'Color',[0.5 0.5 0.8]);  % 蓝色箭头表示变化方向
hold on; 
scatter([0,1],[1,0],100,'filled');  % 标出稳定点

当两个群体的策略比例在相位图上形成向(1,0)和(0,1)汇聚的箭头时,说明这两个点就是演化稳定策略(ESS)。红色散点标出的位置,就是系统最终会收敛的稳定状态。


2. 三方博弈:三维战场可视化

三方博弈复杂度陡增,此时演化轨迹需要在三维空间观察。先定义三群体的收益矩阵:

payoff(:,:,1) = [4,2; 3,5];  % 群体1的收益矩阵
payoff(:,:,2) = [5,1; 2,6];  % 群体2
payoff(:,:,3) = [3,4; 1,7];  % 群体3

使用蒙特卡洛模拟生成演化路径:

figure;
for trial = 1:20
    x0 = rand(3,1); x0 = x0/sum(x0);  % 随机初始策略
    [~,x] = ode45(@(t,x) three_evolve(t,x,payoff), [0 50], x0);
    plot3(x(:,1),x(:,2),x(:,3),'LineWidth',1.2); hold on;
end
view(135,30);  % 调整三维视角
box on; grid on;

代码中three_evolve函数需要计算三方相互作用的收益差。当多条轨迹最终汇聚到(0,0,1)这个角落时,说明群体3的策略在演化中占据了绝对优势。三维相位图里那些如同星际尘埃般的轨迹线,直观展示了策略的此消彼长。


3. Lotka-Volterra:生态博弈中的生死循环

经典的捕食者-猎物模型用两个微分方程描述:

alpha = 0.1; beta = 0.02;
gamma = 0.3; delta = 0.01;
dydt = @(t,y) [y(1)*(alpha - beta*y(2));  % 猎物方程
               y(2)*(delta*y(1) - gamma)]; % 捕食者方程

用欧拉法进行数值模拟:

y = [40; 9];  % 初始数量
data = zeros(1000,2);
for t = 1:1000
    dy = dydt(0,y);
    y = y + 0.1*dy;  % 时间步长0.1
    data(t,:) = y;
end
plot(data(:,1),data(:,2),'Color',[0.2 0.6 0.4]);  % 相空间轨迹

当参数调整到α=0.4,δ=0.02时,系统会出现明显的极限环。相图上的闭合曲线,揭示着捕食者和猎物数量永恒的周期性震荡——就像自然界中真实的生态平衡。


4. 斯塔伯格博弈:领导者与追随者的产量对决

这个寡头博弈模型中,领导者先决定产量q1,追随者根据q1选择最优q2。用符号计算求追随者的反应函数:

syms q1 q2
profit2 = (100 - q1 - q2)*q2 - 10*q2;  % 追随者利润函数
react_q2 = solve(diff(profit2,q2)==0, q2);  % 求导得反应函数

领导者将反应函数代入自身利润最大化:

profit1 = (100 - q1 - react_q2)*q1 - 12*q1;
opt_q1 = fmincon(@(q1) -subs(profit1), 20,...
                 [],[],[],[],0,50);  % 求最大值的q1

最终绘制决策曲线时,会看到领导者的产量总是高于追随者,形成典型的斯塔伯格均衡。当成本参数变化时,两条曲线的间距会动态调整,这就是市场权力的直观体现。


代码是理论的沙盘推演。当你亲手运行这些MATLAB脚本,看着相位图中的箭头流转、三维轨迹的纠缠、生态数量的起伏、产量曲线的交锋——那些课本上的公式,突然就变成了跃动的策略博弈。这或许就是计算社会科学最迷人的地方:用代码复现人类社会的复杂互动。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐