复现方格网下囚徒困境博弈程序,分别画出b=0.8~2之间,以0.2为间隔的,均衡状态下的网络快照、及合作者比例变化图。
% 设置囚徒困境博弈参数
b_values = 0.8:0.2:2.0; % 合作者得到的收益相对于双方都不合作时的收益的比例
N = 20; % 网格边长
T = 50; % 游戏进行的轮数
p = 0.5; % 初始合作者的比例
num_iterations = 100; % 模拟的次数
% 进行多次模拟
for i = 1:length(b_values)
b = b_values(i);
% 初始化合作者比例和网络状态的矩阵
cooperation_ratios = zeros(num_iterations, T+1);
network_snapshots = zeros(num_iterations, N*N);
for j = 1:num_iterations
% 初始化网络
network = rand(N,N) < p;
% 记录初始合作者比例
cooperation_ratios(j, 1) = mean(network(:));
% 进行囚徒困境博弈
for t = 1:T
% 随机选择一个智能体
i = randi([1,N]);
j = randi([1,N]);
% 统计邻居的合作者比例
neighbor_cooperation_ratio = sum(network(mod(i-2,N)+1,j) + network(mod(i,N)+1,j) + network(i,mod(j-2,N)+1) + network(i,mod(j,N)+1),'all')/(4*N*N);
% 计算智能体的收益
if network(i,j) == 1 % 合作者
if neighbor_cooperation_ratio < 0.5 % 大多数邻居都不合作
network(i,j) = 0;
end
else % 背叛者
if neighbor_cooperation_ratio >= 0.5 % 大多数邻居都合作
network(i,j) = 1;
end
end
end
% 记录均衡状态下的合作者比例和网络状态
cooperation_ratios(j, 2:end) = mean(network(:));
network_snapshots(j, :) = reshape(network, 1, []);
end
% 绘制均衡状态下的合作者比例变化图
figure;
plot(0:T, mean(cooperation_ratios));
xlabel('轮数');
ylabel('合作者比例');
title(sprintf('b=%.1f', b));
% 绘制均衡状态下的网络快照
figure;
colormap([1 1 1; 0 0 0]);
imagesc(mean(network_snapshots));
axis square;
title(sprintf('b=%.1f', b));
end
运行结果如下: