基于果蝇优化算法的无线传感器网络的覆盖优化
Posted 博主QQ2449341593
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于果蝇优化算法的无线传感器网络的覆盖优化相关的知识,希望对你有一定的参考价值。
文章目录
一、果蝇优化算法
1、算法介绍
2、基于果蝇算法的WSN节点部署
二、仿真分析
1、参数设置
FOA 实验部分参数设置如下:部署区域为50 × 50 50×5050×50,网格点设置为0.4 × 0.4 0.4×0.40.4×0.4,搜索步长0.3,种群规模20,迭代次数为500,传感器感知半径r s = 5 rs=5rs=5,PSO和GSO的实验参数设置同文献[3]和文献[4]一样。
2、MATLAB程序实现
- 计算WSN覆盖率函数
- FOA主函数
%% 清空环境变量
clc;
clear;
%% 网络参数
L = 50; % 区域边长
n = 35; % 节点个数
rs = 5; % 感知半径
data = 0.4; % 离散粒度
%% FOA参数
maxgen = 500; % 迭代次数
sizepop = 20; % 种群规模
s = 0.3; % 步长
%% 随机初始化果蝇群体位置
X_axis = L*rand(1, n);
Y_axis = L*rand(1, n);
%% 个体和速度最大和最小值
for i = 1:sizepop
% 随机位置
X(i, :) = X_axis + 2*s*rand(1, n)-s;
Y(i, :) = Y_axis + 2*s*rand(1, n)-s;
% 味道浓度函数(覆盖率)
Smell(i) = computeCover(X(i, :), Y(i, :), L, rs, data);
end
% 找出此果蝇群体中味道浓度最高的果蝇(求极大值)
[bestSmell, bestindex]=max(Smell);
% 最佳气味浓度、果蝇位置、适应度最优位置
X_axis = X(bestindex, :);
Y_axis = Y(bestindex, :);
Smellbest = bestSmell;
%% 初始结果显示
gbest = [X_axis; Y_axis]';
disp('初始位置:' );
disp([num2str(gbest)]);
disp(['初始覆盖率:', num2str(Smellbest)]);
% 初始覆盖图
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)+rs*cos(sita), y(i)+rs*sin(sita), 'y');
end
p1 = plot(gbest(:, 1), gbest(:, 2), 'r*');
legend([p1, p2], {'WSN节点', '覆盖区域'});
title 'FOA-WSN初始结果';
%% 果蝇迭代寻优
for gen = 1:maxgen
% 粒子位置和速度更新
for i = 1:sizepop
X(i, :) = X_axis + 2*s*rand(1, n)-s;
Y(i, :) = Y_axis + 2*s*rand(1, n)-s;
% 边界处理
X(i, :) = max(X(i, :), 0);
X(i, :) = min(X(i, :), L);
Y(i, :) = max(Y(i, :), 0);
Y(i, :) = min(Y(i, :), L);
% 计算覆盖率
Smell(i) = computeCover(X(i, :), Y(i, :), L, rs, data);
end
% 根据气味浓度值寻找极值
[bestSmell, bestindex]=max(Smell);
% 保留最佳值位置
if bestSmell > Smellbest
X_axis = X(bestindex, :);
Y_axis = Y(bestindex, :);
Smellbest = bestSmell;
end
% 每代最优Smell值记录到yy数组中,并记录最优迭代坐标
yy(gen) = Smellbest;
Xbest(gen, :) = X_axis;
Ybest(gen, :) = Y_axis;
end
%% 结果显示
gbest = [ Xbest(end, :); Ybest(end, :)]';
disp('最优位置:');
disp([num2str(gbest)]);
disp(['最优覆盖率:', num2str(yy(end))]);
%% 绘图
figure;
plot(yy, '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)+rs*cos(sita), y(i)+rs*sin(sita), 'g');
end
p1 = plot(gbest(:, 1), gbest(:, 2), 'r*');
legend([p1, p2], {'WSN节点', '覆盖区域'});
title 'FOA-WSN最终结果';
- 结果分析
初始随机值和最终的最优解如下:
初始位置:
11.3992 42.9134
46.4846 21.4115
18.9674 21.3475
19.7325 5.92607
24.5759 8.33414
30.3007 39.8163
24.4309 19.7192
38.955 31.9414
5.89293 13.0946
4.86598 45.6089
17.8458 38.9107
45.8842 42.2636
29.6156 13.7195
39.3956 12.6461
21.9514 2.57533
11.4672 47.473
0.942948 19.4017
16.3267 25.3175
31.3105 49.1938
31.4587 42.2226
43.0972 40.9238
12.8064 11.2997
7.38445 10.7124
23.5245 0.0660435
6.54869 37.3028
25.832 41.3215
8.14725 46.5262
23.546 33.2224
45.1849 10.2908
11.5111 28.2609
31.5034 45.0351
33.488 15.9543
41.0271 48.5808
17.6613 7.93437
29.9125 11.2115
初始覆盖率:0.6746
最优位置:
10.5194 38.122
46.2522 20.5155
18.2447 20.096
15.3878 5.68425
22.7347 12.5966
33.9807 28.9422
27.7835 21.1212
44.3602 28.7919
4.249 14.1221
1.71559 42.2764
17.4226 35.3523
46.8187 36.6482
31.9846 13.1763
41.6468 13.1489
27.8534 5.41028
16.2994 45.4212
4.43401 23.3939
22.0547 27.7662
26.8426 47.8792
31.616 39.2224
39.3754 36.8049
11.9248 20.0657
5.62702 5.1783
21.7934 2.8847
4.32715 33.0404
23.3466 41.2151
8.12649 46.8282
27.4225 32.935
45.9546 5.64526
12.562 28.711
36.8622 46.476
37.1369 21.0672
45.5211 45.3852
12.7297 11.6139
36.6151 5.33876
最优覆盖率:0.94778
对应的覆盖图如图1、图2所示。
图1 FOA-WSN初始覆盖效果
图2 FOA-WSN最终覆盖效果
覆盖率变化如图3所示。
图3 WSN节点覆盖率变化
三、算法对比
将传感器节点数目设置为35,为克服实验的随机现象,更好的观察算法的性能,三种算法(FOA、PSO、改进GSO)都分别独立做了15次实验,它们的平均覆盖率、标准差以及最好、最差的覆盖率如表1所示。
表1 35 个节点下覆盖率的比较结果
然后,为了进一步更加形象化观察算法的改进性能,随机选取一组初始部署节点的数据利用三种算法对节点进行优化,图4是覆盖率进化曲线对比图。
图4 三种算法网络覆盖率比较图
由表1可知,本文提出的算法(FOA)的平均覆盖率、最好和最差覆盖率均高于PSO和改进GSO相对应的结果,且标准差较PSO和改进GSO小,说明结果更稳定;由图4可知,本文提出的算法在50次迭代的时候覆盖率就超过其他算法,然后在160次迭代的时候逐渐收敛。
因此,可以得出结论:本文提出的FOA算法相比较PSO、改进GSO而言收敛速度更快,有更高更稳定的覆盖率。
代码下载https://www.cnblogs.com/matlabxiao/p/14883637.html
四、参考文献
[2] 张谦. 基于群智能算法的无线传感器网络覆盖优化研究[D].湖南大学,2015.
[3] Liao W H , Kao Y , Li Y S . A sensor deployment approach using glowworm swarm optimization algorithm in wireless sensor networks[J]. Expert Systems with Applications, 2011, 38( 10):12180-12188.
[4] Ab Aziz N A , Alias M Y , W. Mohemmed A . A wireless sensor network coverage optimization algorithm based on particle swarm optimization and Voronoi diagram[C]// International Conference on Networking. IEEE, 2009.
[5] Pan W T . A new Fruit Fly Optimization Algorithm: Taking the financial distress model as an example[J]. Knowledge-Based Systems, 2012, 26(2):69-74.
以上是关于基于果蝇优化算法的无线传感器网络的覆盖优化的主要内容,如果未能解决你的问题,请参考以下文章
优化覆盖基于matlab模因算法求解集群无线传感器网络中节能覆盖控制优化问题含Matlab源码 1563期
优化覆盖基于matlab前缀B算法求解传感器覆盖优化问题含Matlab源码 379期
优化覆盖基于matlab粒子群算法求解传感器覆盖优化问题含Matlab源码 598期
优化覆盖基于matlab人工蜂群算法求解无线网络传感覆盖优化问题含Matlab源码 1097期