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

news2024/11/30 6:46:46

⛄一、 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 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/41271.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Hack The Box】linux练习-- Doctor

HTB 学习笔记 【Hack The Box】linux练习-- Doctor &#x1f525;系列专栏&#xff1a;Hack The Box &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4c6;首发时间&#xff1a;&#x1f334;2022年11月23日&#x1f334; &#x1f3…

量子计算(九):复合系统与联合测量

文章目录 复合系统与联合测量 一、张量积 二、复合系统的状态演化 复合系统与联合测量 拥有两个或两个以上的量子比特的量子系统通常被称为复合系统&#xff08;composite systems&#xff09;。单量子比特系统的描述与测量已有所了解&#xff0c;那么多个量子比特的系统该如…

R语言基于ARMA-GARCH过程的VaR拟合和预测

本文展示了如何基于基础ARMA-GARCH过程&#xff08;当然这也涉及广义上的QRM&#xff09;来拟合和预测风险价值&#xff08;Value-at-Risk&#xff0c;VaR&#xff09;。 最近我们被客户要求撰写关于ARMA-GARCH的研究报告&#xff0c;包括一些图形和统计输出。 视频&#xff…

树莓派安装ubuntu系统

ubuntu镜像下载 官方地址&#xff1a;https://cn.ubuntu.com/download/raspberry-pi 清华镜像&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/ubuntu-cdimage/ubuntu/releases/22.04.1/release/ 准备树莓派镜像工具&#xff08;Raspberry Pi Imager&#xff09; 下载地…

如何在 Spring Boot 中使用 JPA 和 JPQL 进行自定义查询示例

在本教程中&#xff0c;您将了解如何在 Spring Boot 示例中使用 Spring JPA Query进行自定义查询。我将向您展示&#xff1a; 使用JPQL&#xff08;Java持久性查询语言&#xff09;的方法如何在 Spring 引导中执行 SQL 查询具有 WHERE 条件的 JPA 选择查询示例内容 JPQL 与本机…

【408专项篇】C语言笔记-第七章(函数)

第一节&#xff1a;函数的声明与定定义 1. 函数的声明与定义 函数间的调用关系是&#xff1a;由主函数调用其他函数&#xff0c;其他函数也可以互相调用。同一个函数可以被一个或多个函数调用任意次。 #include "func.h"int main() {int a10;aprint_star(a);print_…

SPI和API还在傻傻分不清楚?

什么是SPI 介绍 再聊下一个类加载器框架OSGI之前&#xff0c;我们首先学习一下前驱知识SPI 全称&#xff1a;Service Provider Interface 区别于API模式&#xff0c;本质是一种服务接口规范定义权的转移&#xff0c;从服务提供者转移到服务消费者。 怎么理解呢&#xff1f…

JavaScript游戏开发(3)(笔记)

文章目录七、支持移动设备的横向卷轴游戏准备7.1 角色的简单移动7.2 背景7.3 加入敌人与帧数控制7.4 碰撞、计分、重新开始7.5 手机格式7.6 全屏模式7.7 存在的问题附录素材可以去一位大佬放在github的源码中直接下&#xff0c;见附录。 七、支持移动设备的横向卷轴游戏 使用…

手摸手使用IDEA创建多模块(maven)项目

有了前面两篇手摸手打底&#xff0c;相信大家对IDEA创建项目和配置使用maven已经没有什么问题了。那么这篇文章阅读起来也会非常流畅。 对于IDEA来说&#xff0c;可以用拼接模块&#xff08;Module&#xff09;并引用的方式来“搭”一个项目&#xff08;Project&#xff09;。…

【全志T113-S3_100ask】15-2 linux系统gpio模拟spi驱动屏幕——ILI9341

【全志T113-S3_100ask】15-2 linux系统gpio模拟spi驱动屏幕——ILI9341背景&#xff08;一&#xff09;查阅参考文档&#xff08;二&#xff09;使能内核模块&#xff08;三&#xff09;修改设备树&#xff08;四&#xff09;测试&#xff08;五&#xff09;后语背景 在上一小…

nginx的安装与nginx降权+匹配php

安装nginx: 安装的插件的作用: 1.gcc 可以编译 C,C,Ada,Object C和Java等语言&#xff08;安装 nginx 需要先将官网下载的源码进行编译&#xff0c;编译依赖 gcc 环境&#xff09; 2.pcre pcre-devel pcre是一个perl库&#xff0c;包括perl兼容的正则表达式库&#xff0c;ngin…

样本于抽样分布(1)-基本概念

从理论上讲&#xff0c;只要对随机现象进行足够多次的试验&#xff0c;被研究的随机现象的规律 性就能清楚地呈现出来&#xff0e; 但实际上&#xff0c;试验的次数只能是有限的&#xff0c;有时甚至是很少 的&#xff0c;因为采集某些数据时&#xff0c;常要将研究的对象破坏&…

【Gradle】四、使用Gradle创建SringBoot微服务项目

使用Gradle创建SringBoot微服务项目一、 创建Springboot项目0、阿里云脚手架创建项目1、引入 t springboot2 、引入依赖3、执行 geradle bootRun 指令4、spring-boot-gradle-plugin 插件‘二、多模块项目1、settings.gradle2、build.gradle3、version.gradle4、test_service的配…

图论:自反与对称

图论1.自反与反自反2.对称与反对称3.传递与非传递1.自反与反自反 自反&#xff1a;相同顶点都在集合内。 反自反&#xff1a;相同顶点都不在集合内。 参考下图&#xff1a;有三部分&#xff0c;红色的自反&#xff0c;蓝色的反自反&#xff0c;以及白色的都不是。 例1&#…

Animation

1、Animation窗口 Window——>Animation——>Animation Animation窗口 直译就是动画窗口&#xff0c;它主要用于在Unity内部创建和修改动画&#xff0c;所有在场景中的对象都可以通过Animation窗口为其制作动画 原理&#xff1a; 制作动画时&#xff1a;记录在固定时间…

[Linux]-----进程信号

文章目录前言一、什么是信号我们是如何得知这些信号呢&#xff1f;我们知道对应的信号产生时&#xff0c;要做什么呢&#xff1f;二、进程信号前台进程和后台进程注意三、信号列表信号的捕捉四、信号产生前用户层产生信号的方式signal函数killraiseabort由软件条件产生信号硬件…

【Java】才疏学浅·小石Java问道之路

大家好&#xff0c;这里是喜爱编程&#xff0c;又热爱生活的小石~———— ————个人情报昵称&#xff1a;小石&#xff08;起源于姓氏啦~&#xff09;破壳日&#xff1a;4月12日身高&#xff1a;1 m ↑技术基础&#xff1a;c node.js mysql 爱好&#xff1a;上网冲浪 听…

【学习笔记45】JavaScript的分页效果

highlight: an-old-hope 一、分页效果 (一) 首次打开页面 从数组内截取部分数据展示调整页码信息为&#xff1a;当前页 / 总页码处理按钮 3.1 如果当前在第一页&#xff0c;禁用上一页按钮(添加类名disable)3.2 如果当前页在最后一页(当前页 总页码),禁用下一页按钮(添加类名…

SpringCloud微服务实践之六 Feign最佳实践(抽取)

传统Feign面临的问题&#xff1a; 1、每个子项目都要写所要调用服务的pojo 2、每个子项目都要写所要调用服务的feign client客户端 优化思路&#xff1a;由提供服务服务的子项目统一归集代码&#xff0c;统一对外提供接口服务、Feign子项目统一管理服务远程调用、 将FeignClien…

【菜菜的sklearn课堂笔记】逻辑回归与评分卡-用逻辑回归制作评分卡-分箱

视频作者&#xff1a;菜菜TsaiTsai 链接&#xff1a;【技术干货】菜菜的机器学习sklearn【全85集】Python进阶_哔哩哔哩_bilibili 分训练集和测试集 from sklearn.model_selection import train_test_split X pd.DataFrame(X) y pd.DataFrame(y)Xtrain,Xtest,Ytrain,Ytest …