【三维Dvhop定位】基于麻雀搜索算法的多通信半径和跳距加权的三维Dvhop定位算法【Matlab代码#81】

news2024/11/16 6:50:37

文章目录

    • 【可更换其他算法,`获取资源`请见文章第6节:资源获取】
    • 1. Dvhop定位算法
    • 2. 麻雀搜索算法
    • 3. 多通信半径和跳距加权策略
      • 3.1 多通信半径策略
      • 3.2 跳距加权策略
    • 4. 部分代码展示
    • 5. 仿真结果展示
    • 6. 资源获取


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


1. Dvhop定位算法

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

DV-Hop算法的定位步骤如下:
(1)各锚节点向通信范围内的邻居节点广播自身的位置信息。接收节点则记录到每个锚节点的最小跳数,同时忽略来自同一个锚节点的较大的跳数信息,而后将跳数值加1转发给邻居节点。
(2)每个锚节点根据所记录的其他锚节点的坐标信息和跳数,通过式(1)估算网络平均跳距距离。
在这里插入图片描述
式中(少了z坐标),j为锚节点i数据表中的其他锚节点号,hopSij为锚节点i和j之间的跳数。
锚节点将所计算的平均跳距广播至整个网络后,未知节点仅记录所收到的第一个平均跳距,并向邻居节点转发,未知节点接收到平均跳距后,跟据所记录的跳数信息,按式(2)估算未知节点 i 到某个锚节点的距离:
在这里插入图片描述
(3)设P1(x1,y1,z1), … ,Pn(xm,ym,zm)表示m个锚节点的坐标位置,待定位节点D的位置为(x,y,z),其与标节点估计距离分别为d1, d2, … , dm,可以建立如下方程。
在这里插入图片描述
用线性方程组表示为AL= b,其中,
在这里插入图片描述

采用最小二乘法得到方程组的解为:
在这里插入图片描述
设定节点覆盖范围为100x100,总节点数为:100,信标节点数为3到30递增变化,通信半径为15、25、50,未知节点数等于总节点数减去锚节点数。(下面式子中少了z坐标)采用归一化平均定位误差作为评价指标:
在这里插入图片描述

2. 麻雀搜索算法

此处不再介绍。

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 , z ) D(x,y,z) D(x,y,z),能与该未知节点通信的锚节点为 A 1 ( x 1 , y 1 , z 1 ) , A 2 ( x 2 , y 2 , z 2 ) , . . . , A n ( x n , y n , z n ) A_{1}(x_{1},y_{1},z_{1}),A_{2}(x_{2},y_{2},z_{2}),...,A_{n}(x_{n},y_{n},z_{n}) A1(x1,y1,z1)A2(x2,y2,z2)...An(xn,yn,zn),这些锚节点的平均每跳距离为 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 , z ) D(x,y,z) D(x,y,z)的跳数为 h o p 1 , h o p 2 , . . . , h o p n hop_{1},hop_{2},...,hop_{n} hop1hop2...hopn,那么 D ( x , y , z ) D(x,y,z) D(x,y,z) A 1 ( x 1 , y 1 , z 1 ) A_{1}(x_{1},y_{1},z_{1}) A1(x1,y1,z1)的距离 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 = 40; %区域边界范围,200x200
NodeAmount = 100; %总的节点数200
BeaconAmount = 20; %信标节点数(锚节点)
UnAmount = NodeAmount - BeaconAmount; %未知节点数
R = 18; %通信距离

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

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

5. 仿真结果展示

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

6. 资源获取

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

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

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

相关文章

Istio介绍

1.什么是Istio Istio是一个开源的服务网格&#xff08;Service Mesh&#xff09;框架&#xff0c;它提供了一种简单的方式来为部署在Kubernetes等容器编排平台上的微服务应用添加网络功能。Istio的核心功能包括&#xff1a; 服务治理&#xff1a;Istio能够帮助管理服务之间的…

openGauss学习笔记-266 openGauss性能调优-TPCC性能调优测试指导-文件系统配置

文章目录 openGauss学习笔记-266 openGauss性能调优-TPCC性能调优测试指导-文件系统配置266.1 查看当前数据盘的文件系统类型266.2 对于需要修改的磁盘&#xff0c;备份所需的数据至其他磁盘或其他服务器266.3 格式化磁盘为xfs文件系统266.4 执行**步骤一** openGauss学习笔记-…

allure2教程-3-测试报告定制

领取资料&#xff0c;咨询答疑&#xff0c;请➕wei: June__Go 上一小节&#xff0c;我们学习一下pytestallure2生成html测试报告的方法&#xff0c;本小节我们学习一下allure2测试报告的定制。 allure2报告预览 预览网址&#xff1a;https://demo.qameta.io/allure/# allur…

WordPress的全面解析:为什么它是创建博客和网站的首选

在当前的数字化时代&#xff0c;无论是个人博客还是企业网站&#xff0c;都需要一个强大而灵活的平台以支撑其内容和用户交互。WordPress作为全球最流行的内容管理系统&#xff08;CMS&#xff09;&#xff0c;以其强大的功能、灵活的定制性和广泛的用户基础&#xff0c;成为了…

问答营销之官方号问答推广技巧

问答营销作为一种网络推广的重要手段&#xff0c;受到各大品牌企业的关注。实战中&#xff0c;问答营销有新起提问再回答和直接回复老问题两种形式&#xff0c;一般做企业官方号问答营销都是选择后者。这里小马识途营销顾问详细解析下开展老问题回复营销的思路和步骤。 一、分析…

[蓝桥杯 | 暴搜] 学会暴搜之路

虽然会调侃蓝桥杯是暴力求解的&#xff0c;但是本弱弱不会搜&#xff0c;不知道如何搜&#xff0c;于是写下这篇碎碎念&#xff0c;记录看到过的&#xff0c;惊艳自己的暴搜。 小总结 题目特征&#xff1a;很复杂的排列组合 说是暴力&#xff0c;其实就是枚举罢了&#xff0…

如何理解信创产品?成为信创产品?

信创产品是指运用信息技术手段创造的产品&#xff0c;它是数据安全、网络安全的基础&#xff0c;也是新基建的重要组成部分。信创产品包括了IT基础设施如CPU芯片、服务器、存储、交换机、路由器、各种云和相关服务内容&#xff1b;基础软件如数据库、操作系统、中间件&#xff…

FebHost:谁可以注册.CA加拿大域名?

在加拿大&#xff0c;互联网域名的注册管理遵循一套独特的规则。特别是对于代表加拿大身份的顶级域名“.ca”&#xff0c;其申请和注册过程涉及一些严格的条件。这些条件确保了只有符合特定标准的个人或实体才能获得这一具有国家象征意义的网络地址。 首先&#xff0c;想要注册…

初识C++ · 类和对象(中)(1)

目录 1 类的6个默认成员函数 2 构造函数 3 析构函数 3 拷贝构造函数 1 类的6个默认成员函数 class Date { public:private:}; 这是一个空类&#xff0c;试问里面有什么&#xff1f; 可能你会觉得奇怪&#xff0c;明明是一个空类&#xff0c;却问里面有什么。其实一点也不…

PE文件(一)PE结构概述

PE结构简述 Windows操作系统是只能运行以内存4D 5A开头&#xff0c;翻译是MZ的可执行文件&#xff0c;也叫做PE结构文件&#xff0c;是以exe&#xff0c;.sys&#xff0c;.dll等等作为后缀的文件。而不同的操作系统能运行的可执行文件都是各自特有的&#xff0c;比如Linux可运…

zabbix 自定义模板,邮件报警,代理服务器,自动发现与自动添加及snmp

目录 一. 自定义监控内容 1. 在客户端创建自定义 key 2. 在 web 页面创建自定义监控项模块 2.1 创建模板 2.2 创建应用集 2.3 创建监控项 2.4 创建触发器 2.5 创建图形 2.6 将主机与模板关联起来 登录测试 2.7 设置邮件报警 测试邮件报警 3. nginx 服务状况的检测…

2024年腾讯云服务器价格一览表

随着云计算技术的快速发展&#xff0c;越来越多的企业和个人开始选择使用云服务器来满足他们的数据存储和计算需求。腾讯云作为国内领先的云服务提供商&#xff0c;其服务器产品因性能稳定、安全可靠而备受用户青睐。那么&#xff0c;2024年腾讯云服务器的价格情况如何呢&#…

状态压缩DP题单

P1433 吃奶酪&#xff08;最短路&#xff09; dp(i, s) 表示从 i 出发经过的点的记录为 s 的路线距离最小值 #include<bits/stdc.h> #define int long long using namespace std; const int N 20; signed main() { int n; cin >> n;vector<double>x(n 1),…

matplotlib plt.gca()学习

之前一直在这个代码里看到plt.gca()的使用&#xff0c;但是一直没搞明白这个怎么用&#xff0c;今天总结一下 gca是get current axis的首字母的缩写&#xff0c;就是控制坐标轴的&#xff0c;也是比较简单的&#xff0c;并不是一个很复杂的函数 移动坐标轴 import matplotlib…

Bacnet 入门参考资料 (一)

[OTC] 在网上整理的一些BACnet的相关资料&#xff0c;在这里作一个整理&#xff0c;方便自己食用。 参考博文 ① BACnet基础入门&#xff1a;https://blog.csdn.net/li1197538342/article/details/128341198 ② BACnet网络讲义 &#xff08;建议先看这个&#xff0c;第1章&a…

LeetCode 1.两数之和(HashMap.containsKey()、.get、.put操作)

给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回…

代码随想录第39天|62.不同路径 63. 不同路径 II

62.不同路径 62. 不同路径 - 力扣&#xff08;LeetCode&#xff09; 代码随想录 (programmercarl.com) 动态规划中如何初始化很重要&#xff01;| LeetCode&#xff1a;62.不同路径_哔哩哔哩_bilibili 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标…

spring-数据处理及跳转

结果跳转方式 ModelAndView 设置ModelAndView对象 , 根据view的名称 , 和视图解析器跳到指定的页面 . 页面 : {视图解析器前缀} viewName {视图解析器后缀} <!-- 视图解析器 --> <bean class"org.springframework.web.servlet.view.InternalResourceViewRes…

flink network buffer

Flink 的网络协议栈是组成 flink-runtime 模块的核心组件之一&#xff0c;是每个 Flink 作业的核心。它连接所有 TaskManager 的各个子任务(Subtask)&#xff0c;因此&#xff0c;对于 Flink 作业的性能包括吞吐与延迟都至关重要。与 TaskManager 和 JobManager 之间通过基于 A…

一些重新开始面试之后的八股文汇总

一、内存中各项名词说明 1、机器内存概念说明 linux中的free命令可以查看机器的内存使用情况&#xff0c;vmstat命令也可以 其中不容易被理解的是&#xff1a; 内存缓冲/存数&#xff08;buffer/cached&#xff09; 1.buffers和cache也是RAM划分出来的一部分地址空间 2.buff…