【无线传感器】WSN 查找两个节点之间的最短路径并发送数据(Matlab代码实现)

news2024/12/24 8:31:09

 👨‍🎓个人主页:研学社的博客 

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现


💥1 概述

本文用于 wsn 的 MATLAB WSN 代码查找两个节点之间的最短路径并发送数据。

它的 WSN 在节点之间具有范围容差(您可以选择范围 - 以米为单位)。一旦节点建立连接,适当的范围公差(位置在1km x 1km地形中随机排序)。最短路径 alg 获取路由并开始将数据从节点 1(源)发送到节点 2(目标),直到路由路径中涉及的任何节点节点因能量故障而死亡(路由中涉及的所有节点都会降低其能量 - 也是随机定义的)。路由失败后,它会获得下一个最短的路由并继续发送。依此类推,直到源和目标之间没有路径。

📚2 运行结果

 

部分代码:

% Edges matrix definition due "range" variable value

dataset.weights = lt(dataset.euclidiana,dataset.range);

% Graph construction

G=graph(dataset.weights,'omitselfloops'); %Graph creation based on adjacency matrix (Edges matrix) built above

% Euclidean distance extraction for all existente end-to-end formed by
% "distance tolerance" (range variable value)

for a = 1 : height(G.Edges)
    garbage.s = G.Edges.EndNodes(a,1);
    garbage.t = G.Edges.EndNodes(a,2);
    garbage.Z(a,:) = dataset.euclidiana(garbage.s,garbage.t);
 end
G.Edges.Euclidiana = garbage.Z(:,1);

%Initial energy sortition (from 70% to 100% - minEnergy and maxEnergy variable valeu) 

[dataset.nodePosition(:,4)] = dataset.maxEnergy -(dataset.maxEnergy-dataset.minEnergy)*rand(dataset.nodeNo,1);
dataset.nodePosition(1:2,4)=STenergy;

%All "G" (Graph object) based nodes degree to use as "node processing
%status overload" (more connections, busier!)

for a = 1: length(dataset.nodePosition(:,1))
   
    dataset.nodePosition(a,5) = degree(G,dataset.nodePosition(a,1));
    
end

% Pathloss calc of each Edges based in a freespace (1.8 factor)

[G.Edges.Pathloss] = (10*dataset.atenuationFactor)*log10(G.Edges.Euclidiana);

%End points coordinates and energy migration to G object

for a = 1 : height(G.Edges)
    garbage.Sourcenode = G.Edges.EndNodes(a,1);
    garbage.Targetnode = G.Edges.EndNodes(a,2);
    G.Edges.SourcenodeXpos(a) = dataset.nodePosition(garbage.Sourcenode,2);
    G.Edges.SourcenodeYpos(a) = dataset.nodePosition(garbage.Sourcenode,3);
    G.Edges.TargetnodeXpos(a) = dataset.nodePosition(garbage.Targetnode,2);
    G.Edges.TargetnodeYpos(a) = dataset.nodePosition(garbage.Targetnode,3);
    G.Edges.ActiveEdge(a) = 1;
end

% Graph objects plot

figure('units','normalized','innerposition',[0 0 1 1],'MenuBar','none')
subplot(1,1,1) %1,3,1 (Line number,collumn number, graph id) - if you want to show more than 1 graph in same windows
garbage.Xmax = 1500;
garbage.Xmin = 0;
garbage.Ymax = 1500;
garbage.Ymin = 0;
p = plot(G,'XData',(dataset.nodePosition(:,2)),'YData',(dataset.nodePosition(:,3))); 
line(dataset.nodePosition(1:2,2),dataset.nodePosition(1:2,3),'color','green','marker','o','linestyle','none','markersize',50)
garbage.ax = gca;
garbage.ax.XAxis.TickValues = 0:100:1000;
garbage.ax.YAxis.TickValues = 0:100:1000;
grid on
hold on
title(['Original WSN | ','Nodes number: ',num2str(dataset.nodeNo),' | Nodes range: ', num2str(dataset.range)])
pause(2)

%Creation of some stuff needed
garbage.deadnodelist=[];
garbage.deadnodeneighbors=[];

%% finding routes

% Finding shortest path route
G2 = shortestpathtree(G,1,2);


%% Initialize patch existance test for loops

fileID = fopen('report-noACO-simulation.txt','w'); %Open file to collect data to external file
fprintf(fileID,'%6s %20s %20s %20s %20s\r\n','|NodeNo|','|No ACO Scene|','|Hops|','|Packets sent|','|Dead node|');

while ~isempty(G2.Edges)
    G2 = shortestpathtree(G,1,2);
    iterationcounter=iterationcounter+1;
    % Test if there is connection between node 1 and 2. If not, terminate!
    if isempty(G2.Edges)
        break
    end

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

致谢:cesar silva (2022). 

🌈4 Matlab代码实现

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

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

相关文章

前后端分离项目,vue+uni-app+php+mysql教室预约系统设计与实现(H5移动项目)

功能模块 【后台管理功能模块】 系统设置:设置关于我们、联系我们、加入我们、法律声明 广告管理:设置小程序首页轮播图广告和链接 留言列表:所有用户留言信息列表,支持删除 会员列表:查看所有注册会员信息&#xff0c…

【力扣】787. K 站中转内最便宜的航班加权——有向图最短路径

前言 我感觉这题比较有代表性,所以记录一下,这题是加权有向图中求最短路径的问题。 题目 787. K 站中转内最便宜的航班 动态规划 假设有一条路径是[src, i, ..., j, dst],解法一子问题的定义是[src, i, ..., j],解法二子问题…

面经汇总--校招--北京顺丰同城

文章目录🔥1.一面🔥2.二面🔥3. 三面🔥4. 结果🔥1.一面 你对Spring aop的理解 面向切面编程,可以对某个方法前后加入自己想执行的方法函数。底层是动态代理,默认jdk动态代理,没有实现…

Redis 通用命令(keys,help,mset,exists,expire,ttl,tab补全)

目录 1.help【command】 2.tab自动补全 3. KEYS pattern(模板)(不建议再生产环境上使用) 4.del 删除指定的key,value也会删除(也可以批量删除) 5.MSET(批量插入键值对&#xf…

【C语言】反序加密(非文件)

《算法集训传送门》 👉引言 铭记于心🎉✨🎉我唯一知道的,便是我一无所知🎉✨🎉💖 ❄️我们的算法之路❄️💖众所周知,作为一名合格的程序员,算法 能力 是不可…

Python OpenCV实现鼠标绘制矩形框和多边形

Python OpenCV实现鼠标绘制矩形框和多边形 目录 Python OpenCV实现鼠标绘制矩形框和多边形 1. OpenCV鼠标事件操作说明 (1)setMouseCallback函数说明 (2)回调函数onMouse说明 (3)event 具体说明&…

Flutter高仿微信-第24篇-隐私政策

Flutter高仿微信系列共59篇,从Flutter客户端、Kotlin客户端、Web服务器、数据库表结构、Xmpp即时通讯服务器、视频通话服务器、腾讯云服务器全面讲解。 详情请查看 效果图: 实现代码: /*** 显示服务条款、隐私政策对话框*/ static void show…

如何修复老照片?这三个方法建议收藏

当你在图书馆查阅一些资料时,会发现里面有许多的老照片,通过这些老照片我们能大概了解到那个时期的建筑特色、人们的穿衣特色等等。但由于那个时候的照片只有黑白,再加上时间悠久,老照片已经过于模糊了,影响到我们进行…

线性回归的梯度下降法——机器学习

一、实验内容 理解单变量线性回归问题;理解最小二乘法;理解并掌握梯度下降法的数学原理;利用python对梯度下降法进行代码实现; 二、实验过程 1、算法思想 梯度下降法是一阶最优化算法。 要使用梯度下降法找到一个函数的局部极小值…

Docker学习(3)—— 将容器转化为新的镜像,并将新镜像发布到阿里云公共仓库或私有仓库

一. 将容器转化为镜像 使用docker pull命令从远程仓库下载的镜像为base镜像,只具有最小的内核。我们可以在base镜像上安装其他工具,将其生成为一个新的镜像。相当于可以在原始的基础镜像上一层一层添加。 例如:下载一个centos的镜像&#x…

kibana 操作elasticsearch索引

前言 使用kibana可以很方便的对es进行各种操作,比如创建索引,删除索引,查询文档等,本篇先演示如何基于kibana 对es的索引进行常见的操作。 环境准备 请提前安装好es和kibana,可以参考 docker搭建es kibana操作es索引…

进销存商城前几名的运营方法|三招提高微信商城用户黏性

你有没有感到奇怪,明明是差不多装修,为什么有的微信商城只能和用户做成“单次消费行为”,但有的微信商城能让用户在他家复购一次两次三次? 这其实都跟用户忠诚度有关。进入存量时代后,维护好老用户就成为门店经营不可…

如何配置 ESXi 主机管理网络?

配置 ESXi 主机管理网络 VMware ESXi管理网络提供ESXi主机和客户端之间的通信。在服务器上安装 ESXi 虚拟机监控程序后,将通过动态主机配置协议(DHCP)获得ESXi管理IP。你可能需要配置ESXi主机的静态管理IP和主机名。按照以下指南配置ESXi管理网络,以便你可以通过域名而不是…

Apache ShenYu ModifyResponse插件使用

Apache ShenYu网关使用手册1 介绍1.1 概念1.2 特性1.3 架构图2 运行2.1 运行先决条件2.1 本地运行3 插件使用3.1 ModifyResponse插件3.1.1 插件名称3.1.2 适用场景3.1.3 插件功能3.1.4 插件代码3.1.5 如何使用插件3.1.5.1 插件使用流程图3.1.5.2 接入SpringBoot应用改造3.1.5.3…

kali没有wlan0

kali没有wlan0解决方案 第一步ifconfig发现没有wlan0 使用wget下载无线设备 命令如下: wget https://mirror2.openwrt.org/sources/compat-wireless-2010-06-28.tar.bz2 3. 解压刚才下载的压缩包: tar -xjvf compat-wireless-2010-06-28.tar.bz2 进…

【Leetcode】拿捏链表(三)——CM11 链表分割(牛客)、OR36 链表的回文结构(牛客)

作者:一个喜欢猫咪的的程序员 专栏:《Leetcode》 喜欢的话:世间因为少年的挺身而出,而更加瑰丽。 ——《人民日报》 目录 CM11 链表分割 OR36 链表的回文结构 CM11 链表分割 链表分割_牛客题霸…

【Linux】线程概念与线程控制

认识线程 线程是一个执行流(运行代码,处理数据) ​ 1.操作系统使用pcb来描述一个程序的运行-------pcb就是进程 ​ 2.linux下通过pcb模拟实现线程,因此linux下的线程是一个轻量级进程 ​ 3.这个轻量级进程因为公用大部分进程资…

Python编程 字典创建map与Zip

作者简介:一名在校计算机学生、每天分享Python的学习经验、和学习笔记。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 字典(dict) 字典创建(拓展) 拓展: 前言 本章将会扩展Python…

IP 地址详解(IPv4、IPv6)

文章目录1 概述2 IP 地址结构2.1 IPv4 地址结构2.2 IPv6 地址结构3 IP 地址管理3.1 地址分类策略:A、B、C、D、E 类3.2 无分类策略:CIDR3.3 地址分类策略 和 无分类策略 相结合1 概述 IP地址:Internet Protocol Address(互联网协…

Flutter高仿微信-第25篇-服务条款

Flutter高仿微信系列共59篇,从Flutter客户端、Kotlin客户端、Web服务器、数据库表结构、Xmpp即时通讯服务器、视频通话服务器、腾讯云服务器全面讲解。 详情请查看 效果图: 实现代码: /*** Author : wangning* Email : maoning20080809163.…