【WSN布局优化】基于果蝇优化算法的无线传感器网络的覆盖优化

132 阅读6分钟

一、果蝇优化算法

1、算法介绍

果蝇优化算法(Fruit Fly Optimization Algorithm, FOA)是基于果蝇觅食行为的仿生学原理而提出的一种新兴群体智能优化算法。

果蝇优化算法(FOA)通过模拟果蝇利用敏锐的嗅觉和视觉进行捕食的过程,FOA实现对解空间的群体迭代搜索。FOA原理易懂、操作简单、易于实现,具有较强的局部搜索能力。

果蝇算法可应用于求解最优解:

 

果蝇群体迭代搜寻食物的步骤如下:

(1)随机初始化果蝇群体位置。

          Init X_axis

          Init Y_axis

(2)赋予果蝇个体利用嗅觉搜寻食物的随机距离与方向。

          Xi = X_axis + Random Value

          Yi = Y_axis + Random Value

(3)由于无法得知食物的位置,因此先估计与原点的距离(Dist),再计算味道浓度判定值(S),此值为距离的倒数。

          Disti = sqrt(Xi^2 + Yi^2)

          Si = 1 / Disti

(4)味道浓度判定值(S)代入味道浓度判定函数(或称为Fitness function)以求出该果蝇个体位置的味道浓度(Smelli)。

          Smelli = Function(Si)

(5)找出该果蝇群体中味道浓度最高的果蝇(求极大值)。

          [bestSmell bestIndex] = max(Smell)

(6)保留最佳味道浓度值与x、y的坐标,此时果蝇群体利用视觉往该位置飞去。

          Smellbest = bestSmell

          X_axis = X(bestIndex)

          Y_axis = Y(bestIndex)

(7)进入迭代寻优,重复执行步骤2-5,并判断味道浓度是否优于前一迭代味道浓度,若是则实行步骤6。

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而言收敛速度更快,有更高更稳定的覆盖率。

代码下载或者仿真咨询添加

image.png

四、参考文献

完整代码或者仿真咨询添加QQ1575304183
[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.