%% 清空环境变量
clc
clear
%% 网络参数
L = 50; % 区域边长
n = 35; % 节点个数
R = 5; % 通信半径
data = 1; % 离散粒度
%% 粒子群参数
maxgen = 500; % 迭代次数
sizepop = 20; % 粒子规模
Wmax = 0.9;
Wmin = 0.4;
%% 参数初始化
c1 = 2; % 自我认知参数
c2 = 2; % 社会认知参数
Vmax = 2; % 最大速度
Vmin = -2; % 最小速度
popmax = 50; % 位置最大值
popmin = 0; % 位置最小值
gbest = zeros(sizepop, 2); % 最优解
%% 随机生成群体位置、速度和对应的适应度值
empty_pop.Position = [];
empty_pop.V = [];
pop = repmat(empty_pop, sizepop, 1);
for i=1:sizepop
pop(i).Position = rand(n, 2).*[L, L]; % 初始种群位置
pop(i).V = rands(n, 2)*2; % 初始化速度
fitness(i) = fun(pop(i).Position(:, 1), pop(i).Position(:, 2), L, R, data); % 粒子群的适应度
end
[bestfitness, bestindex] = max(fitness);
gbest = pop(bestindex).Position; % 群体最优极值
pbest = pop; % 个体最优极值
fitnessgbest = bestfitness; % 种群最优适应度值
fitnesspbest = fitness; % 个体最优适应度值
%% 初始结果显示
disp('初始位置:' );
disp([num2str(gbest)]);
disp(['初始覆盖率:', num2str(fitnessgbest)]);
% 初始覆盖图
figure
for i = 1:n
axis([0 L 0 L]); % 限制坐标范围
x = gbest(:, 1);
y = gbest(:, 2);
sita = 0:pi/100:2*pi; % 角度[0, 2*pi]
hold on;
p2 = fill(x(i)+R*cos(sita), y(i)+R*sin(sita), 'y');
end
p1 = plot(gbest(:, 1), gbest(:, 2), 'r*');
legend([p1, p2], {'WSN节点', '覆盖区域'});
title 'PSO-WSN初始结果';
%% 迭代寻优
for i = 1:maxgen
W = Wmax-((Wmax-Wmin)/maxgen)*i;
for j=1:sizepop
%% 速度更新
pop(j).V = W*pop(j).V + c1*rand*(pbest(j).Position - pop(j).Position) + c2*rand*(gbest - pop(j).Position);
% 边界处理
pop(j).V = max(pop(j).V, Vmin);
pop(j).V = min(pop(j).V, Vmax);
%% 位置更新
pop(j).Position = pop(j).Position+pop(j).V;
% 边界处理
pop(j).Position = max(pop(j).Position, popmin);
pop(j).Position = min(pop(j).Position, popmax);
%% 适应度值更新
fitness(j) = fun(pop(j).Position(:, 1), pop(j).Position(:, 2), L, R, data);
end
%% 个体和群体极值更新
for j = 1:sizepop
% 个体极值更新
if fitness(j) > fitnesspbest(j)
pbest(j).Position = pop(j).Position;
fitnesspbest(j) = fitness(j);
end
% 群体极值更新
if fitness(j) > fitnessgbest
gbest = pop(j).Position;
fitnessgbest = fitness(j);
end
end
%% 每一代群体最优值存入zz数组
zz(i) = fitnessgbest;
end
%% 结果显示
disp('最优位置:' );
disp([num2str(gbest)]);
disp(['最优覆盖率:', num2str(zz(end))]);
%% 绘图
figure;
plot(zz, 'r', 'lineWidth', 2); % 画出迭代图
title('算法训练过程', 'fontsize', 12);
xlabel('迭代次数', 'fontsize', 12);
ylabel('粒子覆盖率', 'fontsize', 12);
figure
for i = 1:n
axis([0 L 0 L]); % 限制坐标范围
x = gbest(:, 1);
y = gbest(:, 2);
sita = 0:pi/100:2*pi; % 角度[0, 2*pi]
hold on;
p2 = fill(x(i)+R*cos(sita), y(i)+R*sin(sita), 'g');
end
p1 = plot(gbest(:, 1), gbest(:, 2), 'r*');
legend([p1, p2], {'WSN节点', '覆盖区域'});
title 'PSO-WSN最终结果';
无线传感器网络覆盖率最大化优化matlab仿真.zip
版权申诉
5星 · 超过95%的资源 167 浏览量
2022-11-01
20:47:03
上传
评论 1
收藏 174KB ZIP 举报
天天Matlab科研工作室
- 粉丝: 3w+
- 资源: 7261