基于粒子群算法的无线传感器网络覆盖优化

2021/6/20 11:52:15

本文主要是介绍基于粒子群算法的无线传感器网络覆盖优化,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文章目录

  • 一、理论基础
    • 1、节点感知模型
      • (1)0/1感知模型
      • (2)概率感知模型
    • 2、覆盖数学模型
    • 3、粒子群优化(PSO)算法
  • 二、MATLAB程序实现
    • 1、参数设置
    • 2、适应度函数
    • 3、主函数
    • 3、结果分析
  • 三、参考文献

 

一、理论基础

1、节点感知模型

传感器节点的感知模型主要分为两种:0/1(二元)感知模型和概率感知模型。

(1)0/1感知模型

该模型是最理想的感知模型,指的是在一个平面上以传感器节点为圆心、r rr为半径的圆区域,在此区域内的感知概率记为1,超出这个区域的传感器对它的感知概率为0。其中r rr感知半径由传感器节点的物理特性决定。对二维平面的任何一定点p ( x , y ) p(x,y)p(x,y),传感器节点i ii对它的感知概率定义如下:

(2)概率感知模型

(2)概率感知模型

 2、覆盖数学模型

3、粒子群优化(PSO)算法

二、MATLAB程序实现

1、参数设置

实验参数:
迭代次数:500,节点个数:35,感知半径:r = 5 r=5r=5,位置范围:[ 0 , 50 ] [0,50][0,50],速度范围:[ − 2 , 2 ] [-2,2][−2,2],加速因子:c 1 = c 2 = 2 c_1=c_2=2c1​=c2​=2,惯性权重:0.4 ≤ w g ≤ 0.9 0.4≤wg≤0.90.4≤wg≤0.9,离散粒度:d a t a = 1 data=1data=1

2、主函数

%% 清空环境变量
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);
        %% 位置更新

        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最终结果';

3、结果分析

初始随机值和最终的最优解如下:

初始位置:
0.904522      19.0258
 8.69026      25.9893
 42.2468      45.6202
 16.0256      12.0388
 48.0632      44.4174
  13.919      16.0169
 31.6586      29.4094
 3.82078      32.6419
 32.4564      19.0176
 49.0228      34.0132
 26.0312      10.1234
 4.64958      38.2106
 8.32003      40.0178
 15.7309      42.5049
 26.2661       21.479
 38.4964      43.6318
 39.9338      30.3761
 33.4178      21.7565
 14.4604      15.9405
 44.4453      21.2681
 24.6109      32.9286
  25.784      48.3829
 37.5038      15.4823
 4.71615      25.2817
 7.92029      10.9253
 37.6701      39.8185
 40.9716      1.85434
 21.4861      38.4574
 48.3235      5.26085
 1.79348      1.74249
 13.1786       18.063
 31.1479      19.5781
  31.951      14.4106
 20.6043      5.00904
 47.2907         41.4
初始覆盖率:0.68435
最优位置:
6.69667      17.4692
18.6787       25.677
37.6056       45.967
16.4003      16.3665
44.4088      44.9523
15.6398      7.94384
 39.028      23.5229
10.3198      35.3409
24.9243      13.9243
45.4214      34.6088
33.1839      8.65765
4.95417      44.5512
14.0575      42.7922
17.1556       45.236
17.5786      31.1089
 33.359      46.6023
32.2229      32.8939
 38.185      28.7335
13.3897      19.9836
47.2304      27.7674
27.6429       33.348
25.1923      41.2169
43.2884      15.5091
4.37728      29.2529
8.24945      9.83391
38.2074       38.675
41.7384       3.5438
21.5924      33.3411
46.2542      10.1693
4.29853      3.31768
10.9144       21.165
27.2748      23.9816
33.1514      17.8386
24.6509       4.1925
47.9948      44.5559
最优覆盖率:0.82045

对应的覆盖图如图1、图2所示。
在这里插入图片描述

图1 PSO-WSN初始覆盖效果

在这里插入图片描述

图2 PSO-WSN最终覆盖效果

覆盖率变化如图3所示。
在这里插入图片描述

图3 WSN节点覆盖率变化

代码下载https://www.cnblogs.com/matlabxiao/p/14883637.html

三、参考文献

[1] 史朝亚. 基于PSO算法无线传感器网络覆盖优化的研究[D].南京理工大学,2013.
[2] 张谦. 基于群智能算法的无线传感器网络覆盖优化研究[D].湖南大学,2015.



这篇关于基于粒子群算法的无线传感器网络覆盖优化的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程