【WSN通信】基于matlab A_Star改进LEACH多跳传输协议【含Matlab源码 487期】

一、 A_Star改进LEACH多跳传输协议简介

1 理论基础
1.1 A*算法

A算法是一种智能搜索算法,他在求解问题时所得到的结果会选择所有路径中代价最小的节点。
A
算法是一种基于启发式函数的算法,搜索过程如下:首先创建两个分别命名为open表和close表的表格,其中open表中存放还未访问并准备扩展的节点,而close表则存放己经拓展过的节点。算法的搜索过程为:初始化时会将源节点放进open表中,然后依次取出源节点的相邻节点,假如相邻节点在close表中,那么忽略该节点;假如相邻节点在open表中,则用相邻节点计算出的启发函数值替换新open表中对应节点的启发函数值;假如相邻节点既不在close表中也不在open表中,那么将拓展出的节点加入到open表中。

1.2 A维诺图原理
将空间中的N个点看成是N个生长点,按照最近原则将空间划分成若干个部分,使得每一部分只包含一个生长点,那么可以将连续的空间划分成维诺覆盖。维诺图在区域划分上有较大的贡献,维诺图应用在无线传感网络中具有重要的现实意义。

1.3 原始LEACH算法
LEACH协议的工作按照轮的思想进行周期性工作,每一轮由3个步骤组成:
(1)簇首选取。在开始阶段,所有的节点的地位都是平等的。簇首的选举主要是依据普通节点与事先设定的阈值大小的比较以及该节点在上一轮找那个是否当选过簇首来判断。具体过程为将节点产生的随机数值rand(θ)与阈值T(n)进行比较,如果rand(θ)<T(n),那么该节点就作为簇首。阈值计算式为
式中,p为簇首在节点中所占的比例大小;r为轮数;G为上一轮非簇首节点集合。在上一轮中当选成簇首的节点在本轮不再担当簇首,这样的规定使得没有担任过簇首的节点在本轮选举中成为簇首的几率增加,有利于网络节点的均衡;
(2)建立簇。簇首选举完成后,其通过广播方式向周围区域的普通节点发送其当选的ADV消息。接收到ADV消息的普通节点根据所接收到的信号强弱选择加入相关簇。由于簇首在进行广播ADV消息时的功率在各个方向上都是相等的,普通节点接收到的ADV信号强度越强代表与簇首的距离越近。成员节点选择距离最近的簇首并加入可以减少能量的消耗,与此同时向簇首发送包含自信息的数据包;

在这里插入图片描述
图1 分簇流程图
(3)数据传输。簇划分完成后,簇内的普通节点将会感知周围的环境信息,簇首会收到簇中成员发送的相关数据。簇首接收这些数据之后,对数据进行分析、去重复和压缩等操作,并将融合后的数据发送至基站。

1.4 LEACH算法分析
LEACH算法在一定程度上延长了无线传感网络的寿命,但仍然存在一些不足,主要表现为:
(1)簇首的选取过程中,采用等概率的方式进行选取,并未考虑到能量和距离问题,从而无法保证簇首的位置,导致簇首产生集聚现象,加速了节点的死亡;
(2)簇的建立过程中,大量普通节点向新选取的簇首传输决定加入哪个簇的消息时,计算过程会消耗电池中的大量能量;
(3)消息传递过程中,所有的簇首均采用一跳方式与基站通信,致使距离基站较远的节点在通信过程中消耗大量能量,缩短了整个网络的寿命。
本文针对这3个不足,对LEACH算法进行了改进。

2 改进的LEACH算法
2.1 簇首的选取

正初始状态下,对每个节点仍然产生一个在[0,1]之间的随机数rand(θ),并使其与阈值T(n)进行比较。如果rand(θ)<T(n),那么该节点就作为簇首。在本文算法中,借鉴文献[15]中使用的加权概率进行普通节点与簇首节点之间的选取,其中普通节点的加权值定义为
在这里插入图片描述
簇首节点的加权值定义为
在这里插入图片描述
结合节点此时的能量值和其与汇聚节点之间的距离,定义普通节点的阈值为
定义簇首节点的阈值为
式中,参数Ec(n)表示节点当前的能量,Ei表示节点的总能量;dc表示当前节点到汇聚节点之间的距离,dm表示所有节点到汇聚节点之间距离的最大值;λ1, λ2≥0为权值,且λ1+λ2=1。通过上述改进,使得离汇聚节点近并且能量多的节点更容易称为簇首,更具有说服力。

2.2 簇的划分
使用维诺图对监测区域进行划分。为了使与汇聚节点距离较近的节点向其通信,令汇聚节点为一个簇首,那么n个点和一个汇聚节点共同组成了n+1个节点的无线传感网络,维诺图会将监测区域划分成n+1个区域,形成n+1个维诺多边形,那么每一个维诺多边形构成一个簇,并且每一个簇内会存在一个簇首。

2.3 数据传输方法
对每一个簇首建立一个簇首集合,使用优化的启发式算法A*将传统LEACH算法的单跳传输模式优化成多跳模式。通过使用这个方法找到相关的转发节点,由转发节点将数据传送到汇聚节点,从而节省能量的消耗。

A算法中,估算路径总长度的路径长度评价函数为
F(n)=G(n)+H(n) (6)
式中,G(n)是簇首发送的数据报到达当前簇首n(xn, yn)所消耗的实际能量值;H(n)是启发函数,其作用是计算从当前簇首n到达汇聚节点(xe,ye)消耗的估计能量值,其表达式为
H(n)=sqrt[(xn−xe)2+(yn−ye)2] (7)
本文对路径长度评价函数进行改进,改进后的评价函数为
F(n)=αG(n)+βH(n) (8)
式中,α和β均为权重因子。
以下对权重因子大小分类进行讨论:
(1)当α=1时,F(n)=G(n),A
算法简化成为Dijkstra算法。此时的算法没有了启发函数H(n)的引导,整个搜索过程没有方向性,致使其在大范围内搜索,效率低下;
(2)当α=1,β=1时,此时算法为原始A*算法;
(3)当α=β+q,β=1(q>0)时,F(n)=(1+q)G(n)+H(n),此时的估计函数中,G(n)函数的作用大于启发函数H(n),因此簇首在向相邻的簇首发送消息时会更加偏向于离汇聚节点远的簇首;
(4)当α=1,β=1(q>0)时,F(n)=G(n)+(1+q)H(n),此时的估计函数中,启发函数H(n)的作用大于G(n)函数,因此簇首在向相邻的簇首发送消息时会更加偏向于离汇聚节点近的簇首,那么路径搜索的过程将会有更强的方向性,提高了效率。
基于上述分析,本文选取的评价函数为
F(n)=G(n)+(1+q)H(n) (9)
式中,q=e1/NM;e1为移动一次需要消耗的能量;NM 为允许移动的最大值。

二、部分源代码

close all;
clear;
clc;
%-------------------------------
%现场节点数
 n=200;
%n=input('Enter the number of nodes in the space : '); 
%Energy Model (all values in Joules)
%初始能量
Eo=0.1;
%Eo=input('Enter the initial energy of sensor nJ : ');
%Field Dimensions - x and y maximum (in meters)
% xm=input('Enter x value for area plot : ');
% ym=input('Enter y value for area plot : ');  
xm=100;
ym=100;

%Sink 的 x 和 y 坐标
sink.x=1.5*xm;
sink.y=0.5*ym;
% 节点的最优选举概率
%成为簇头
p=0.2;

%Eelec=Etx=Erx
ETX=50*0.000000001;
ERX=50*0.000000001;
%发射放大器类型
Efs=10*0.000000000001;
Emp=0.0013*0.000000000001;
%数据聚合能量
EDA=5*0.000000001;

三、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 沈再阳.精通MATLAB信号处理[M].清华大学出版社,2015.
[2]高宝建,彭进业,王琳,潘建寿.信号与系统——使用MATLAB分析与实现[M].清华大学出版社,2020.
[3]王文光,魏少明,任欣.信号处理与系统分析的MATLAB实现[M].电子工业出版社,2018.
[4]黄利晓,王晖,袁利永,曾令国.基于能量均衡高效WSN的LEACH协议改进算法[J].通信学报第38卷第Z2期
[5]纪磊,张欣,文章,高进.一种基于LEACH的无线传感网络路由协议[J].电子科技. 2020,33(07)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

猜你喜欢

转载自blog.csdn.net/TIQCmatlab/article/details/125023365