【WSN】基于蚁群算法的WSN路由协议(最短路径)消耗节点能量研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
💥1 概述
📚2 运行结果
🎉3 参考文献
🌈4 Matlab代码实现
💥1 概述
【WSN】基于蚁群算法的路由协议(最短路径)对节点能量的消耗研究是一个十分重要的课题。
在无蚁群算法(ACO)的情况下的无线传感器网络(WSN)中,当使用相同的路由协议(最短路径)时,节点能量会不断消耗,最终导致节点死亡。这是因为传感器节点在进行数据传输时,往往需要通过多个中继节点才能到达目的地,这些中继节点的数据转发会消耗大量的能量。而在没有ACO算法的情况下,网络中的节点并没有考虑到能量消耗的差异,因此无法做出针对性的路由选择。
而在应用了ACO步骤的WSN网络中,情况就不同了。同样是通过路由协议(最短路径)进行数据传输,但ACO分析了正在使用的路径的能量消耗情况,并根据能量消耗的评估结果来进行路由调整。这意味着在ACO算法的指导下,节点能够根据路由路径上的能量变化情况做出相应的决策。比如,如果某个路径的能量消耗较大,ACO可以选择其他能量消耗相对较小的路径,以减少节点的能量消耗。
通过引入ACO算法,WSN网络中的节点能够更加智能地选择路由路径,从而减少节点能量的消耗。这将延长整个网络的寿命,并提高网络的稳定性和性能。此外,ACO算法也可以根据网络的实际情况进行调整和优化,以更好地适应不同的应用场景和节点能量消耗的变化。
总而言之,通过研究基于蚁群算法的路由协议(最短路径)对节点能量的消耗,我们可以深入理解WSN网络中能量问题的关键因素,并为解决节点能量消耗过高的问题提供有效的方法。引入ACO算法可以使节点能够根据能量消耗情况智能地选择路由路径,从而优化能量分配,延长网络寿命,并提高网络的可靠性和性能。
📚2 运行结果
持续运行中。
部分代码:
%% Main configuration values for this simulationdataset.nodeNo = 9; %Number of nodes
ACOnodeNo = dataset.nodeNo;
dataset.nodePosition(1,:) = [1 50 50]; %(Sender node fixed position)
dataset.nodePosition(2,:) = [2 900 900]; %(Receiver node fixed position)
dataset.NeighborsNo = 5;
dataset.range = 500; %Tolerance distance to became neighbor of one node (Euclidean distance based)
dataset.atenuationFactor = 1.8; %Atenuation factor in freespace - ranges from 1.8 to 4 due environment
dataset.minEnergy = 80; % Mw - Miliwatts (70% energy)
dataset.maxEnergy = 100; % Mw - Miliwatts (Full energy (100%) - 1 mAh charge capacity within 1 Volt energy)
dataset.energyconsumptionperCicle = 0.85;
dataset.energyrecoveryperCicle = 0.2;
dataset.minenergyfactor = 0.18;
dataset.maxenergyfactor = 0.2;
STenergy=inf;
packet=0;
iterationcounter=1;
plotgraphs=1; %Choose 1 for "yes" or 0 for "no" if you want to plot graphs or no (Better performance if no)
reprodutibily = 0; %1 = yes (always generate same random numbers) (0) for no reprodutibility (Different random numbers every code execution);% Node position sortition
if reprodutibily == 0rng('shuffle');
elserng('default');
end
for a = 3 : dataset.nodeNodataset.nodeId = a; garbage.x = randi([1 900]); %Xpos sortitiongarbage.y = randi([1 900]); %Ypos sortitiondataset.nodePosition(a,:) = [dataset.nodeId garbage.x garbage.y]; %NodeID, X and Y position into nodePosition tableend% Euclidean Distance calc from one node to all othersfor i = 1 : dataset.nodeNofor j = 1: dataset.nodeNogarbage.x1 = dataset.nodePosition(i,2); garbage.x2 = dataset.nodePosition(j,2); garbage.y1 = dataset.nodePosition(i,3); garbage.y2 = dataset.nodePosition(j,3);dataset.euclidiana(i,j) = sqrt( (garbage.x1 - garbage.x2) ^2 + (garbage.y1 - garbage.y2)^2 ); end
end% Edges matrix definition due "range" variable valuedataset.weights = lt(dataset.euclidiana,dataset.range);% Graph constructionG=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)
%% Main configuration values for this simulation
dataset.nodeNo = 9; %Number of nodes
ACOnodeNo = dataset.nodeNo;
dataset.nodePosition(1,:) = [1 50 50]; %(Sender node fixed position)
dataset.nodePosition(2,:) = [2 900 900]; %(Receiver node fixed position)
dataset.NeighborsNo = 5;
dataset.range = 500; %Tolerance distance to became neighbor of one node (Euclidean distance based)
dataset.atenuationFactor = 1.8; %Atenuation factor in freespace - ranges from 1.8 to 4 due environment
dataset.minEnergy = 80; % Mw - Miliwatts (70% energy)
dataset.maxEnergy = 100; % Mw - Miliwatts (Full energy (100%) - 1 mAh charge capacity within 1 Volt energy)
dataset.energyconsumptionperCicle = 0.85;
dataset.energyrecoveryperCicle = 0.2;
dataset.minenergyfactor = 0.18;
dataset.maxenergyfactor = 0.2;
STenergy=inf;
packet=0;
iterationcounter=1;
plotgraphs=1; %Choose 1 for "yes" or 0 for "no" if you want to plot graphs or no (Better performance if no)
reprodutibily = 0; %1 = yes (always generate same random numbers) (0) for no reprodutibility (Different random numbers every code execution);
% Node position sortition
if reprodutibily == 0
rng('shuffle');
else
rng('default');
end
for a = 3 : dataset.nodeNo
dataset.nodeId = a;
garbage.x = randi([1 900]); %Xpos sortition
garbage.y = randi([1 900]); %Ypos sortition
dataset.nodePosition(a,:) = [dataset.nodeId garbage.x garbage.y]; %NodeID, X and Y position into nodePosition table
end
% Euclidean Distance calc from one node to all others
for i = 1 : dataset.nodeNo
for j = 1: dataset.nodeNo
garbage.x1 = dataset.nodePosition(i,2);
garbage.x2 = dataset.nodePosition(j,2);
garbage.y1 = dataset.nodePosition(i,3);
garbage.y2 = dataset.nodePosition(j,3);
dataset.euclidiana(i,j) = sqrt( (garbage.x1 - garbage.x2) ^2 + (garbage.y1 - garbage.y2)^2 );
end
end
% 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)
🎉3 参考文献
文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。
[1]廖明华,张华,谢建全.基于蚁群算法的WSN能量预测路由协议[J].计算机工程, 2012, 38(3):88-90.DOI:10.3969/j.issn.1000-3428.2012.03.030.
[1]米奕萍.基于改进型蚁群算法的WSN路由算法的研究[D].中北大学[2023-09-19].DOI:CNKI:CDMD:2.1012.336755.
🌈4 Matlab代码实现
相关文章:
![](https://img-blog.csdnimg.cn/fc505aa2036649b480e0f2fb29ab20dc.png)
【WSN】基于蚁群算法的WSN路由协议(最短路径)消耗节点能量研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
![](https://img-blog.csdnimg.cn/d033addc6d5141caa0c29fd27fcd9e7b.png)
JVM的内存分配及垃圾回收
内存分配 在了解Java的内存管理前,需要知道JVM中的内存分配。 栈 存储局部变量。在方法的定义中或在方法中声明的变量为局部变量;栈内存中的数据在该方法结束(返回或抛出异常或方法体运行到最后)时自动释放栈中存放的数据结构为…...
![](https://img-blog.csdnimg.cn/be07141ff27846fdbf95f511415f25c2.png)
Python实现查询一个文件中的pdf文件中的关键字
要求,查询一个文件中的pdf文件中的关键字,输出关键字所在PDF文件的文件名及对应的页数。 import os import PyPDF2def search_pdf_files(folder_path, keywords):# 初始化结果字典,以关键字为键,值为包含关键字的页面和文件名列表…...
![](https://img-blog.csdnimg.cn/5cc7ca0c73484e46996a33644b633746.png)
【计算机网络笔记一】网络体系结构
IP和路由器概念 两台主机如何通信呢? 首先,主机的每个网卡都有一个全球唯一地址,MAC 地址,如 00:10:5A:70:33:61 查看 MAC 地址: windows: ipconfig / alllinux:ifconfig 或者 ip addr 同一个网络的多…...
![](https://img-blog.csdnimg.cn/3f22505a843e4dad8f8dd442f28132e3.png)
硕士应聘大专老师
招聘信息 当地人社局、学校(官方) 公众号(推荐): 辅导员招聘 厦门人才就业信息平台 高校人才网V 公告出完没多久就要考试面试,提前联系当地院校,问是否招人。 校招南方某些学校会直接去招老师。…...
![](https://www.ngui.cc/images/no-images.jpg)
Gram矩阵
Gram矩阵如何计算 Gram 矩阵是由一组向量的内积构成的矩阵。如果你有一组向量 v 1 , v 2 , … , v n v_1, v_2, \ldots, v_n v1,v2,…,vn,Gram 矩阵 G G G 的元素 G i j G_{ij} Gij 就是向量 v i v_i vi 和向量 v j v_j vj 的内积。数学上&#x…...
![](https://img-blog.csdnimg.cn/969d0f7e690f4925a1991ab574023921.png)
【数据结构】七大排序算法详解
目录 ♫什么是排序 ♪排序的概念 ♪排序的稳定性 ♪排序的分类 ♪常见的排序算法 ♫直接插入排序 ♪基本思想 ♪算法实现 ♪算法稳定性 ♪时间复杂度 ♪空间复杂度 ♫希尔排序 ♪基本思想 ♪算法实现 ♪算法稳定性 ♪时间复杂度 ♪空间复杂度 ♫直接选择排序 ♪基本思想 ♪算法…...
![](https://www.ngui.cc/images/no-images.jpg)
OpenCV之VideoCapture
VideoCaptrue类对视频进行读取操作以及调用摄像头。 头文件: #include <opencv2/video.hpp> 主要函数如下: 构造函数 C: VideoCapture::VideoCapture(); C: VideoCapture::VideoCapture(const string& filename); C: VideoCapture::Video…...
![](https://www.ngui.cc/images/no-images.jpg)
ESP32微控制器与open62541库: 详细指南实现OPC UA通信协议_C语言实例
1. 引言 在现代工业自动化和物联网应用中,通信协议起着至关重要的作用。OPC UA(开放平台通信统一架构)是一个开放的、跨平台的通信协议,被广泛应用于工业4.0和物联网项目中。本文将详细介绍如何在ESP32微控制器上使用C语言和open…...
![](https://img-blog.csdnimg.cn/b1849c22fa1e454eb3f60a9ff31777ed.png)
怎样快速打开github.com
访问这个网站很慢是因为有DNS污染,被一些别有用心的人搞了鬼了, 可以使用火狐浏览器开启火狐浏览器的远程dns解析就可以了.我试了一下好像单独这个办法不一定有用,要结合修改hosts文件方法,双重保障 好像就可以了...
![](https://img-blog.csdnimg.cn/6d970f53dae9464399ce0fe79c5ff3d6.png)
【C#】.Net基础语法二
目录 一、字符串(String) 【1.1】字符串创建和使用 【1.2】字符串其他方法 【1.3】字符串格式化的扩展方法 【1.4】字符串空值和空对象比较 【1.5】字符串中的转移字符 【1.6】大写的String和小写的string 【1.7】StringBuilder类的重要性 二、数组(Array) 【2.1】声…...
![](https://img-blog.csdnimg.cn/20190106163945739.jpg#pic_center)
C++之this指针总结(二百二十)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…...
![](https://img-blog.csdnimg.cn/97cbb12c1b03434ebf11b9b55032aa49.png#pic_center)
C++——如何正确的使用STL中的vector?
什么是vector? 在STL(标准模板库)中,vector是一种动态数组容器,可根据需要自动增长或缩小。它可以存储任意类型的元素,并且支持快速的随机访问。 vector是表示可变大小数组的序列容器vector采用的是连续的…...
![](https://img-blog.csdnimg.cn/9d17ac45598f42bdafd83eb6fe326df5.png)
【C语言】模拟实现内存函数
本篇文章目录 相关文章1. 模拟 memcpy 内存拷贝2. 模拟 memmove 内存移动 相关文章 【C语言】数据在内存中是以什么顺序存储的?【C语言】整数在内存中如何存储?又是如何进行计算使用的?【C语言】利用void*进行泛型编程【C语言】4.指针类型部…...
![](https://img-blog.csdnimg.cn/544b2275b77a458ebea5708d9240d8b1.png)
Jenkins学习笔记3
gitgithubjenkins: 架构图: 说明:jenkins知道github有更新了,就pull进行构建build,编译、自动化测试。然后部署到应用服务器。 maven java的项目构建工具。 在开发者电脑上创建空密码密钥对。 [rootgit-developer ~…...
![](https://img-blog.csdnimg.cn/629a5ca6385e454389e4ce2dd249c9bf.jpeg#pic_center)
基于单片机火灾报警器仿真设计
一、系统方案 1、本设计采用51单片机作为主控器。 2、DS18B20采集温度值送到液晶1602显示。 3、MQ2采集烟雾值,送到液晶1602显示。 4、按键设置温度报警值,大于报警值,声光报警。 二、硬件设计 原理图如下: 三、单片机软件设计…...
![](https://img-blog.csdnimg.cn/68a7b510cdf94d8793b0883c5df6824b.jpeg)
阿里测开面试大全(一)附答案完整版
万字长文,建议收藏 1 什么是POM,为什么要使用它? POM是Page Object Model的简称,它是一种设计思想,而不是框架。大概的意思是,把一个一个页面,当做一个对象,页面的元素和元素之间操…...
![](https://img-blog.csdnimg.cn/img_convert/92fefe765d347742fe1e88298d2fd5b8.png)
STL-常用容器
string容器 string构造函数 string本质:类 string和char*区别: char* 是一个指针 string是一个类,类内部封装了char*,管理这个字符串,是一个char*型的容器。 特点: string类内部封装了很多成员方法 …...
![](https://www.ngui.cc/images/no-images.jpg)
【owt】关闭microk8s 等无关服务
打算部署下owt,发现之前跑了microk8s ,一直运行:操作指令 // 1. 启动 microk8s.start// 2. 关闭 microk8s.stop// 3. kubectl 操作 // --- 查看 cluster microk8s.kubectl cluster-info// --- 查看 nodes microk8s.kubectl get nodes// --- 查看 pods microk8s.kubectl get …...
![](https://img-blog.csdnimg.cn/c3318091f9ec49f294ddb7c91d66ec94.png)
【面试题】——Spring
1.Spring是什么? Spring是一个开源的Java应用框架,它提供了广泛的基础设施支持,用于构建Java应用程序。极大提高了开发效率。它提供了一种轻量级的编程模型,通过依赖注入(Dependency Injection)和面向切面…...
![](https://img-blog.csdnimg.cn/img_convert/a08571f736dc04b5bef51cd09e8e3a0a.gif#pic_center)
【算法思想-排序】根据另一个数组次序排序 - 力扣 1122 题
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…...
![](https://img-blog.csdnimg.cn/845290a9b8af413baa5d3d1614073270.png)
毕业设计|基于stm32单片机的app视频遥控抽水灭火小车设计
基于stm32单片机的app视频遥控抽水灭火水泵小车设计 1、项目简介1.1 系统构成1.2 系统功能 2、部分电路设计2.1 L298N电机驱动电路设计2.2 继电器控制电路设计 3、部分代码展示3.1 小车控制代码3.1 水泵控制代码 4 演示视频及代码资料获取 1、项目简介 视频简介中包含资料http…...
![](https://www.ngui.cc/images/no-images.jpg)
编译原生安卓aosp源码,实现硬改以及定位
系列文章目录 第一章 安卓aosp源码编译环境搭建 第二章 手机硬件参数介绍和校验算法 第三章 修改安卓aosp代码更改硬件参数 第四章 编译定制rom并刷机实现硬改(一) 第五章 编译定制rom并刷机实现硬改(二) 第六章 不root不magisk不xposed lsposed frida原生修改定位 第七章 安卓…...
![](https://www.ngui.cc/images/no-images.jpg)
找单身狗。一个数组中只有两个数字出现一次,其他数字出现了两次,编写一个函数找出这两个只出现一次的数字
例:在{1 2 3 4 5 6 1 2 3 4}找出5和6 方法二: 设计思想: 1.分组原理 (1)将所有数字进行异或,相同数字异或为零,所以只会剩5^6,即为异或的结果xor_result (…...
![](https://www.ngui.cc/images/no-images.jpg)
Java数据结构技巧
Java数据结构技巧 1、循环 for-each循环如果不是"[]"的数组类型,则需要提前判断数据结构是否为空,否则有可能会有空指针异常。 2、对于List对象的i到j位进行排序 for(List<String> now_result:result){List<String> sublist …...
![](https://www.ngui.cc/images/no-images.jpg)
easyui disabled 属性设置
1.设置disabled $("#id").attr("disabled",true); 或 $("#id").attr("disabled","随意字符"); easyui写法 $("#id").numberbox("textbox").attr("disabled", true); $("#id")…...
![](https://img-blog.csdnimg.cn/25f58edc04ae46759f77d3fba63e5c27.png)
使用容器运行Nginx应用及Docker命令
目录 一、使用容器运行Nginx应用 1.1 使用docker run命令运行Nginx应用 1.1.1 观察下载容器镜像过程 1.1.2 观察容器运行情况 编辑 1.2 访问容器中运行的Nginx服务 1.2.1 确认容器IP地址 1.2.2 容器网络说明 1.2.3 在主机中使用curl命令容器IP地址访问 二、Docker命…...
![](https://www.ngui.cc/images/no-images.jpg)
fastapi 基本介绍+使用
FastAPI是一个基于Python 3.6的现代、快速(高性能)的web框架,它使用Starlette作为其底层Web框架。FastAPI有很好的文档和丰富的功能,包括自动为路由生成API文档、查询参数验证、依赖注入、WebSocket等等。 以下是一个FastAPI的基…...
![](https://www.ngui.cc/images/no-images.jpg)
C语言的结构体的认识
注:类似于①、②……是代码的编写顺序,也是对下方代码的注解 【①】、【②】……是用到了之前的代码 #include <stdio.h> //②定义生日结构体,必须声明在前面不然会报错,c语言是从上到下执行的(这点要注意&#…...
![](https://www.ngui.cc/images/no-images.jpg)
只通过在vimrc文件写东西来实现或安装vim的插件
2023年9月23日,周日上午 有时候觉得用插件管理器来安装插件太麻烦了, 所以我就在想能不能只通过在vimrc文件写东西来实现或安装vim的插件, 不过这样做肯定有很大的局限性,但我会尽量做到最好的效果 不定期更新 把下面这些代码…...
![](/images/no-images.jpg)
网页设计与网站建设考试名词解释/百度智能小程序怎么优化排名
1 线程中断: java中对于中断的大部分操作无外乎以下两点: 设置或者清除中断标志位(对运行状态线程需要自检,堵塞状态会抛出异常)抛出InterruptedException 2 设置中断 直接看源码 :对上面的两个操作说的很清晰了 /*…...
![](https://images2015.cnblogs.com/blog/1067815/201704/1067815-20170403121708847-710599420.png)
做网站专题模板/app开发费用
Computer Organization and Design ----------------------个人作业,如果有后辈的作业习题一致,可以参考学习,一起交流,请勿直接copy Problem 1: Floating Point Arithmetic (5 points) Assume that we are using the IEEE 754 32…...
![](/images/no-images.jpg)
做网站政府扶持/南京seo培训
内容来源:2017年5月20日,腾讯高级软件工程师吴友强在“中生代技术沙龙系列之互联网大数据”进行《腾讯云大数据实战》演讲分享。IT 大咖说作为独家视频合作方,经主办方和讲者审阅授权发布。阅读字数:1954 | 3分钟阅读嘉宾演讲视频…...
![](https://img-blog.csdnimg.cn/20200408210914620.png)
做网站客户尾款老不给怎么办/创建自己的网页
LeetCode-面试题13. 机器人的运动范围-中等 地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行…...
![](/images/no-images.jpg)
环影视界wordpress企业主题/app推广注册招代理
序 本文主要研究一下redis的监控工具 redis-stat redis-stat是一个比较有名的redis指标可视化的监控工具,采用ruby开发,基于redis的info命令来统计,不影响redis性能。 docker运行docker run --name redis-stat -p 8080:63790 -d insready/red…...
![](https://img-blog.csdnimg.cn/b7c4e046684446f38f5eb9a88aab136c.jpeg)
wordpress使用技巧/网销是什么工作好做吗
据悉,2022国际人工智能大会SAIL奖TOP30榜单近来正式出炉。作为国际人工智能大会的最高奖项,SAIL奖(Superior AI Leader,卓越人工智能引领者)坚持“追求卓越、引领未来”的理念,从全球规模发掘在人工智能范畴…...