matlab:双或三方演化博弈,随机演化博弈,lotka-Volterra ,斯塔伯格 1.双...
matlab:双或三方演化博弈,随机演化博弈,lotka-Volterra ,斯塔伯格1.双方演化博弈:稳定点分析,绘制相位图,matlab仿真图代码2.三方演化博弈:稳定点分析,绘制相位图,matlab仿真图代码3.lotka-Volterra模型4.斯塔伯格博弈模型。
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脚本,看着相位图中的箭头流转、三维轨迹的纠缠、生态数量的起伏、产量曲线的交锋——那些课本上的公式,突然就变成了跃动的策略博弈。这或许就是计算社会科学最迷人的地方:用代码复现人类社会的复杂互动。








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


所有评论(0)