【WSN定位】基于浣熊优化算法的多通信半径和跳距加权Dvhop定位算法【Matlab代码#46】

news2024/9/22 11:32:46

文章目录

    • 【可更换其他算法,`获取资源`请见文章第6节:资源获取】
    • 1. Dvhop定位算法
    • 2. 原始浣熊优化算法
      • 2.1 开发阶段
      • 2.2 探索阶段
    • 3. 多通信半径和跳距加权策略
      • 3.1 多通信半径策略
      • 3.2 跳距加权策略
    • 4. 部分代码展示
    • 5. 仿真结果展示
    • 6. 资源获取


【可更换其他算法,获取资源请见文章第6节:资源获取】


1. Dvhop定位算法

根据距离矢量和 GPS定位原理,2001年,Nieuleseu等人提出了 DV-Hop传感器节点定位算法,其只包含少数锚节点,剩余节点为未知节点,需要通过定位算法来确定它们的位置,具有无需测量距离,硬件要求低等点,在硬件条件有限的WSN得到了广泛的应用。

DV-Hop算法的定位步骤如下:
(1)各锚节点向通信范围内的邻居节点广播自身的位置信息。接收节点则记录到每个锚节点的最小跳数,同时忽略来自同一个锚节点的较大的跳数信息,而后将跳数值加1转发给邻居节点。
(2)每个锚节点根据所记录的其他锚节点的坐标信息和跳数,通过式(1)估算网络平均跳距距离。
在这里插入图片描述
式中,j为锚节点i数据表中的其他锚节点号,hopSij为锚节点i和j之间的跳数。
锚节点将所计算的平均跳距广播至整个网络后,未知节点仅记录所收到的第一个平均跳距,并向邻居节点转发,未知节点接收到平均跳距后,跟据所记录的跳数信息,按式(2)估算未知节点 i 到某个锚节点的距离:
在这里插入图片描述
(3)设P1(x1,y1), … ,Pn(xn,yn)表示n个锚节点的坐标位置,待定位节点D的位置为(x,y),其与标节点估计距离分别为d1, d2, … , dn-1,可以建立如下方程。
在这里插入图片描述
第一个方程组减去第后一个方程后,到得:
在这里插入图片描述
用线性方程组表示为AL= b,其中,
在这里插入图片描述
采用最小二乘法得到方程组的解为:
在这里插入图片描述
设定节点覆盖范围为100x100,总节点数为:100,信标节点数为3到30递增变化,通信半径为15、25、50,未知节点数等于总节点数减去锚节点数。采用归一化平均定位误差作为评价指标:
在这里插入图片描述

2. 原始浣熊优化算法

长鼻浣熊优化算法(Cоati Optimization Algorithm,COA)是一种启发式优化算法,灵感来源于长鼻浣熊(Coati)的行为策略。长鼻浣熊优化算法基于长鼻浣熊在觅食过程中的特性和行为模式。长鼻浣熊是一种树栖动物,具有长而灵活的鼻子,用于觅食和捕食。它们通过嗅觉感知周围环境,利用敏锐的视觉和协调的运动能力来寻找食物。

2.1 开发阶段

这个阶段模拟的是浣熊对鬣蜥的攻击策略,对搜索空间中的种群更新的第一个阶段进行建模。在这个策略中,一群浣熊会爬上树,对着一只鬣蜥,并吓唬它,其他几个浣熊会在树下等待鬣蜥掉下来。当鬣蜥掉下来之后,浣熊就会攻击并猎杀它。这个策略使得COA在搜索空间中移动到不同的位置,说明COA在问题解决空间中的全局搜索能力。

在COA的设计中,种群中的最佳位置被假定为鬣蜥的位置。此外,还假设有一般的浣熊能爬上树,另一半在地上等待鬣蜥掉下来。因此,浣熊在树上的位置可以用以下公式描述:
在这里插入图片描述
鬣蜥落地后,将其放置在搜索空间中的任意位置。基于这种随机位置,地面上的浣熊可以在搜索空间中移动,用下列公式来描述:
在这里插入图片描述
对于每个浣熊计算的新位置,如果它改善了目标函数的值,那么就会被接受,否则,浣熊将保持原先的位置,此过程用以下公式来表示。这个可以被视为贪婪法则。
在这里插入图片描述
这里 x i P 1 x_{i}^{P1} xiP1是计算第 i i i个浣熊的新位置, x i , j P 1 x_{i,j}^{P1} xi,jP1是它的第 j j j维, F i P 1 F_{i}^{P1} FiP1是它的目标函数值, r r r [ 0 , 1 ] [0,1] [0,1]区间内的随机实数。 I g u a n a Iguana Iguana代表鬣蜥在搜索空间中的位置,这实际上是指种群中最佳个体的位置; I g u a n a j Iguana_{j} Iguanaj是它的第 j j j维, j j j是一个整数,从集合{1,2}中随机选择, I g u a n a G Iguana^{G} IguanaG是在地面上的位置,它是随机生成的。 I g u a n a j G Iguana_{j}^{G} IguanajG蠢晰是它的第 j j j维, F I g u a n a G F_{Iguana}^{G} FIguanaG是它的目标函数值。

2.2 探索阶段

在第二阶段即探索阶段的过程中,位置更新模拟的是浣熊在遇到捕食者和逃避捕食者的行为。当食肉动物攻击浣熊时,浣熊就会从它的位置上逃走。浣熊在该策略中的移动使其处于接近其当前位置的安全位置,这代表这COA的局部开发能力。为了模拟这种行为,COA在每个长鼻浣熊个体附近生成一个随机位置,公式如下所示:
在这里插入图片描述
与开发阶段中类似,同样使用贪婪选择来决定是替换还是保留原先的位置。

3. 多通信半径和跳距加权策略

3.1 多通信半径策略

设网络通信半径为 R R R,将锚节点与邻居节点间分为 m m m级,网络中各信标节点与其邻居节点的实际距离为 d d d,跳数记为 H H H
H = { 1 m , 0 < d ≤ R m i m , ( i − 1 ) R m < d ≤ i R m 1 , ( m − 1 ) R m < d ≤ R (1) H=\begin{cases} & \frac{1}{m} , 0<d\le \frac{R}{m} \\ & \frac{i}{m} , \frac{(i-1)R}{m} <d\le \frac{iR}{m} \\ & 1 , \frac{(m-1)R}{m}<d\le R \end{cases}\tag{1} H= m1,0<dmRmi,m(i1)R<dmiR1,m(m1)R<dR(1)
经过改进后,锚节点与邻居节点的跳数值不再是整数,是更加精确的小数,与距离更接近正比关系,有效地提高了数据的精确性,减小定位误差。

3.2 跳距加权策略

在原始Dvhop定位算法中,设未知节点坐标为 D ( x , y ) D(x,y) D(x,y),能与该未知节点通信的锚节点为 A 1 ( x 1 , y 1 ) , A 2 ( x 2 , y 2 ) , . . . , A n ( x n , y n ) A_{1}(x_{1},y_{1}),A_{2}(x_{2},y_{2}),...,A_{n}(x_{n},y_{n}) A1(x1,y1)A2(x2,y2)...An(xn,yn),这些锚节点的平均每跳距离为 h o p s i z e 1 , h o p s i z e 2 , . . . , h o p s i z e n hopsize_{1},hopsize_{2},...,hopsize_{n} hopsize1hopsize2...hopsizen,到 D ( x , y ) D(x,y) D(x,y)的跳数为 h o p 1 , h o p 2 , . . . , h o p n hop_{1},hop_{2},...,hop_{n} hop1hop2...hopn,那么 D ( x , y ) D(x,y) D(x,y) A 1 ( x 1 , y 1 ) A_{1}(x_{1},y_{1}) A1(x1,y1)的距离 r i r_{i} ri为:
r i = h o p i ∗ h o p s i z e (2) r_{i}=hop_{i}*hopsize\tag{2} ri=hopihopsize(2)
由于 h o p s i z e hopsize hopsize是取离未知节点最近的锚节点的平均跳距作为未知节点到所有锚节点的平均跳距,但是实际网络中节点在不同区域的分布状况是不同的,平均每跳距离也是不同的,原始Dvhop算法用单一的平均跳距不能正确反应网络状况,误差较大。
本文用下面式子来修正未知节点平均跳距:
w i = 1 h o p i ∑ j = 1 n 1 h o p j (3) w_{i}=\frac{\frac{1}{hop_{i}} }{\sum_{j=1}^{n}\frac{1}{hop_{j}} }\tag{3} wi=j=1nhopj1hopi1(3)
h o p s i z e i = w i ∗ h o p s i z e i (4) hopsize_{i}= w_{i}*hopsize_{i}\tag{4} hopsizei=wihopsizei(4)
通过上面两个式子的处理,每个能与未知节点通信的信标节点的平均跳距都参与计算未知节点平均跳距,每个信标节点平均跳距都根据与未知节点的距离远近进行了加权处理,使得每个未知节点根据平均跳距计算自身坐标时更接近网络的真实情况。

4. 部分代码展示

%% 基于浣熊优化算法的多通信半径和跳距加权DVHop定位算法

%BorderLength ----- 正方形区域的边长,单位m
%NodeAmount ----- 网络节点的个数
%BeaconAmount ----- 信标节点数
%UnAmount ----- 未知节点数
%Sxy ----- 用于存储节点的序号,横坐标,纵坐标的矩阵
%Beacon ----- 信标节点坐标矩阵
%UN ----- 未知节点坐标矩阵
%Distance ----- 未知节点到信标节点距离矩阵
%h ----- 节点间初始跳数矩阵
%X ----- 节点估计坐标初始矩阵,X = [x,y]
%R ----- 节点间的通信距离,一般为10-100m
clear;close all;clc;

BorderLength = 100; %区域边界范围,200x200
NodeAmount = 100; %总的节点数200
BeaconAmount = 30; %信标节点数(锚节点)
UnAmount = NodeAmount - BeaconAmount; %未知节点数
R = 30; %通信距离

%在区域范围内随机生成节点,即总节点数NodeAmount个坐标
AreaC = BorderLength.*rand(2,NodeAmount);%[x1,...,xn;y1,...,yn;];
%为每个点添加序号,如第1,2,3。放在第1行
data = [(1:NodeAmount);AreaC];
%信标坐标信息
BeaconData = data(2:3,1:BeaconAmount);%提取2,3行存放的坐标
UnKnownData = data(2:3,BeaconAmount+1:end);%提取剩下的坐标为未知节点坐标
%画图
figure
plot(BeaconData(1,:),BeaconData(2,:),'r*','linewidth',1.5);%绘制信标(锚节点)
hold on
plot(UnKnownData(1,:),UnKnownData(2,:),'bo','linewidth',1.5)%绘制未知节点
grid on;
title('* 红色信标节点 蓝色未知节点')

%% 多通信半径和跳距加权优化的Dvhop
[X,d]=MRW_Dvhop(BeaconAmount,UnAmount,NodeAmount,R,data,BeaconData);

5. 仿真结果展示

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

6. 资源获取

可更换其他群智能优化算法,可以获取完整代码资源。

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

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

相关文章

超细,设计一个“完美“的测试用例,用户登录模块实例...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 好的测试用例一定…

ad18学习笔记七:drc检查在线和批量的区别

Altium Designer 22 DRC规则检查解析 - 哔哩哔哩 硬件工程师基本功&#xff1a;DRC设置要点详解-凡亿课堂 AD中PCB检查设计错误规则设置&#xff08;DRC检查配置&#xff09;_ad怎么检查pcb有没有错误_没有价值的生命的博客-CSDN博客 Altium Designer之DRC检查学习笔记_ad d…

【Linux】基于环形队列的生产者消费者模型的实现

文章目录 前言一、基于环形队列的生产者消费者模型的实现 前言 上一篇文章我们讲了信号量的几个接口和基于环形队列的生产者消费者模型&#xff0c;下面我们就快速来实现。 一、基于环形队列的生产者消费者模型的实现 首先我们创建三个文件&#xff0c;分别是makefile&#x…

【C++】医学影像归档和通信系统-PACS

一、PACS是通过DICOM3.0国际标准接口&#xff0c;将CT、超声、放射检查(DR)、核磁、磁共振&#xff08;MR)等多种医学影像以数字化的形式保存&#xff0c;提供授权方式查看和调回&#xff0c;并提供一些辅助诊断管理功能的系统。 二、PACS系统是HIS系统的重要组成部分&#xff…

强化学习路径优化:基于Q-learning算法的机器人路径优化(MATLAB)

一、强化学习之Q-learning算法 Q-learning算法是强化学习算法中的一种&#xff0c;该算法主要包含&#xff1a;Agent、状态、动作、环境、回报和惩罚。Q-learning算法通过机器人与环境不断地交换信息&#xff0c;来实现自我学习。Q-learning算法中的Q表是机器人与环境交互后的…

打造自己的分布式MinIO对象存储

MinIO是一个对象存储解决方案&#xff0c;它提供了一个与Amazon Web Services S3兼容的API&#xff0c;并支持所有核心S3特性。MinIO旨在部署在任何地方——公共云或私有云、裸机基础架构、协调环境和边缘基础架构。 分布式MinIO如何工作 Server Pool由多个Minio服务节点与其附…

OPNET Modeler 怎么修改背景颜色

OPNET Modeler 软件中除了顶层的网络模型&#xff0c;节点模型和进程模型中的默认背景色都是灰色的。 节点模型背景颜色如下图所示。 进程模型背景颜色如下图所示。 使用时间长了发现这个灰色背景对眼睛保护还真不错&#xff0c;而且在这种灰色背景下&#xff0c;你添加包流线…

高压线路零序电流方向保护程序逻辑原理(四)

2&#xff0e;全相循环程序逻辑框图 全相循环程序逻辑简图如图3&#xff0d;18所示。程序入口首先检测标志位UQDB1&#xff0c;在采样中断服务程序中采用3U。突变量来区分接地故障和TA断线&#xff0c;接地故障时Δ3U。大于定值&#xff0c;置标志位UQDB1&#xff0c;这是11型…

web标签的使用

一、iframe标签的使用 iframe参数说明 实例&#xff1a; <body><iframe width"400" height"400" name"abc"></iframe><br /><ul><a href"01.table.html" target"abc">01.table.html&l…

使用docker安装mysql主从集群

1.安装MySQL主容器 1.1首先&#xff0c;使用以下命令创建MySQL主容器&#xff1a; sudo docker run --name mysql-master -p 3306:3306 -e MYSQL_ROOT_PASSWORD123456 -d mysql:latest 在这里&#xff0c;使用了Docker官方提供的MySQL镜像&#xff0c;并且使用了MySQL的默认3…

浅谈自动化测试框架开发,有你们不会知道的吗?

在自动化测试项目中&#xff0c;为了实现更多功能&#xff0c;我们需要引入不同的库、框架。 首先&#xff0c;你需要将常用的这些库、框架都装上。 pip install requests pip install selenium pip install appium pip install pytest pip install pytest-rerunfailures pip …

以中非经贸连线,看星沙如何练就一流营商环境

不知不觉&#xff0c;“一带一路”倡议提出已有十年&#xff0c;回望过去十年间&#xff0c;在“一带一路”倡议推动下&#xff0c;中国与各国合作共识不断凝聚&#xff0c;国际感召力持续增强&#xff0c;共建“一带一路”的朋友圈持续扩大&#xff0c;遍布亚、欧、非等五大洲…

往数据库插入数据时出现了多条重复数据

业务场景 钉钉端发起审批流程后&#xff0c;会回调开发者后台的callback接口&#xff0c;然后callback接口逻辑处理时会对一些数据做入库处理&#xff0c;但是突然发现数据库中出现了很多重复的数据 问题发现 业务代码进行断点&#xff0c;发现并无异常&#xff0c;就是一条…

探索思维导图:提升思维能力与效率的利器

思维导图作为一种强大的思考工具&#xff0c;已经被广泛应用于各个领域&#xff0c;从学习、工作到创意思维和项目管理。 本文将为您介绍思维导图的基本概念、使用方法以及它对思维能力和效率提升的价值。通过学习和掌握思维导图&#xff0c;您将能够更系统地组织和表达您的思…

scss中写3元运算

为真选第1个参数&#xff0c;为假选第2个参数 前端基础——sass的使用_sass 三元运算_ccopcx的博客-CSDN博客

LabVIEW进行临床肝透析试验

LabVIEW进行临床肝透析试验 慢性肾衰竭患者可以在透析或肾移植的帮助下大大延长其预期寿命。肝病患者需要与透析相当的治疗作为肝移植的替代方案。肾透析可清除患者血液中的水基毒素&#xff0c;肝脏透析需要消除与蛋白质相关的毒素。 为了降低肝病患者的高死亡率&#xff0c…

JNPF可视化平台的搭建及使用

目录 一、前言 二、可视化平台介绍 三、搭建可视化平台 【表单设计】 【报表设计】 【流程设计】 【代码生成器】 四、使用可视化平台 前后端分离&#xff1a; 多数据源&#xff1a; 预置功能&#xff1a; 私有化部署&#xff1a; 五、总结 一、前言 可视化低代码平台是一种快速…

项目打包exe文件

1。先准备exe4j VM Parameters后面要写上 -Dfile.encodingutf-8 不是很重要 因为是springboot项目在打包成exe的时候会出现不能运行的问题 所以在Main class from Class Path这里填&#xff08;org.springframework.boot.loader.JarLauncher&#xff09; 这样打包就好了

Android View 事件派发流程

原文链接 Android View 事件派发流程 自从乔帮主横空出世推出了iPhone以来&#xff0c;触控式的操作便成了21世纪智能设备的标准输入方式。对于同是智能操作系统的Android来说&#xff0c;也不例外。事件&#xff0c;特别是触控事件对于移动应用程序开发来说是一个非常重要的&…

Docker容器中应用部署

Docker应用部署 在Docker容器中部署MySQL&#xff0c;并通过外部的mysql客户端操作MySQL Server 一、Mysql部署 端口映射 容器内的网络服务和外部机器不能直接通信外部机器和宿主机可以通信宿主机和容器可以直接通信当容器中的网络服务需要被外部访问的时候&#xff0c;可以把…