基于果蝇优化算法的无线传感器网络的覆盖优化

一、果蝇优化算法

1、算法介绍

请参考这里

2、基于果蝇算法的WSN节点部署

果蝇算法具体实现无线传感器网络的节点部署的步骤如下所示:
Step 1. 初始化果蝇算法的参数,初始化 WSN 的相关参数;
Step 2. 赋予每个果蝇个体利用嗅觉搜寻食物的随机方向和距离: X ( i , : ) = X _ a x i s + 2 ∗ s ∗ r a n d ( 1 , d ) − s (1) X(i,:)=X\_axis+2*s*rand(1,d)-s\tag{1} X(i,:)=X_axis+2srand(1,d)s(1) Y ( i , : ) = Y _ a x i s + 2 ∗ s ∗ r a n d ( 1 , d ) − s (2) Y(i,:)=Y\_axis+2*s*rand(1,d)-s\tag{2} Y(i,:)=Y_axis+2srand(1,d)s(2)其中, i i i代表第 i i i个果蝇个体, d d d代表传感器节点的数目, s s s代表搜索步长;
Step 3. 计算每个果蝇个体的味道浓度判定值,即其覆盖率: S m e l l ( i ) = c o m p u t e c o v e r ( X ( i , : ) , Y ( i , : ) , ⋯   ) (3) Smell(i) =computecover(X(i,:),Y(i,:),\cdots)\tag{3} Smell(i)=computecover(X(i,:),Y(i,:),)(3)Step 4. 找出此果蝇群体中味道浓度最高的果蝇个体,保留其最佳的味道浓度值和对应的 X _ a x i s , Y _ a x i s X\_axis,Y\_axis X_axis,Y_axis坐标: [ b e s t S m e l l , b e s t I n d e x ] = m a x ( S m e l l ) (4) [bestSmell,bestIndex]=max(Smell)\tag{4} [bestSmell,bestIndex]=max(Smell)(4)Step 5. 判断是否这次迭代的最好味道浓度值大于上次,如果是,那么果蝇群体利用视觉朝该位置飞去: X _ a x i s = X ( b e s t I n d e x , : ) (5) X\_axis=X(bestIndex,:)\tag{5} X_axis=X(bestIndex,:)(5) Y _ a x i s = Y ( b e s t I n d e x , : ) (6) Y\_axis=Y(bestIndex,:)\tag{6} Y_axis=Y(bestIndex,:)(6)否则执行步骤6.
Step 6. 进入迭代寻优,直到满足终止条件。

二、仿真分析

1、参数设置

FOA 实验部分参数设置如下:部署区域为 50 × 50 50×50 50×50,网格点设置为 0.4 × 0.4 0.4×0.4 0.4×0.4,搜索步长0.3,种群规模20,迭代次数为500,传感器感知半径 r s = 5 rs=5 rs=5,PSO和GSO的实验参数设置同文献[3]和文献[4]一样。

2、MATLAB程序实现

  • 计算WSN覆盖率函数
function z = computeCover(x, y, L, R, data)
%% 适应度函数:WSN的覆盖率
% input:
% x        圆心横坐标
% y        圆心纵坐标
% L        区域边长
% R        通信半径
% data     离散粒度
% output:
% z        覆盖率
N = length(x);                      % 节点总个数
[m, n] = meshgrid(0:data:L);        % 离散化区域内的点
[row, col] = size(m);
for i = 1:N
    D = sqrt((m-x(i)).^2+(n-y(i)).^2);     % 计算坐标点到圆心的距离
    [m0, n0] = find(D <= R);               % 检测出圆覆盖点的坐标
    Ind = (m0-1).*col+n0;                  % 坐标与索引转化
    M(Ind) = 1;                            % 改变覆盖状态
end
scale = sum(M(1:end))/(row*col);           % 计算覆盖比例
z = scale;
  • 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;
    % 显示迭代信息
    display(['FOA: At iteration ', num2str(gen), ' the best fitness is ', num2str(yy(gen))]);
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://pan.baidu.com/s/1LkVPq2UNZMA_T_v4Nlsl5w
提取码:k4ta

四、参考文献

[1] 心升明月. 基于果蝇优化算法的函数寻优算法. CSDN博客.
[2] 张谦. 基于群智能算法的无线传感器网络覆盖优化研究[D]. 长沙: 湖南大学, 2015.
[3] Wen-Hwa Liao, Yucheng Kao, Ying-Shan Li. A sensor deployment approach using glowworm swarm optimization algorithm in wireless sensor networks[J]. Expert Systems with Applications, 2011, 38(10): 12180-12188.
[4] N. A. B. A. Aziz, A. W. Mohemmed, M. Y. Alias. A wireless sensor network coverage optimization algorithm based on particle swarm optimization and Voronoi diagram[C]. 2009 International Conference on Networking, Sensing and Control, 2009, 602-607.
[5] Wen-Tsao Pan. A new Fruit Fly Optimization Algorithm: Taking the financial distress model as an example[J]. Knowledge-Based Systems, 2012, 26: 69-74.

  • 12
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心️升明月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值