【WSN】基于蚁群算法的WSN路由协议(最短路径)消耗节点能量研究(Matlab代码实现)

news2024/11/24 11:55:25

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

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

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

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

目录

💥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 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)

%% 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代码实现

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

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

相关文章

postgresql-存储过程

postgresql-存储过程 简述PL/pgSQL 代码块结构示例嵌套子块 声明与赋值控制结构IF 语句CASE 语句简单case语句搜索 CASE 语句 循环语句continuewhilefor语句遍历查询结果 foreach 游标游标传参 错误处理报告错误和信息检查断言 捕获异常自定义函数重载VARIADIC 存储过程示例事务…

Opencv-python去图标与水印方案实践

RGB色彩模式是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色&#xff…

【虚拟化】虚拟机vcpu绑核物理机

文章目录 一、NUMA二、虚拟机xml配置解析 参考文章 第一篇:KVM虚拟化CPU技术总结 第二篇:虚机cpu和mem的配置(cputune和numatune) 第三篇:libvirt 中cpu, numa 的配置 第四篇:如何提高虚拟机性能&#xff1…

最新研究综述——探索基础模型中的“幻觉”现象

深度学习自然语言处理 原创作者:Winnie “幻觉”问题即模型生成的内容可能包含虚构的信息。它不仅在大语言模型(LLMs)中存在,也存在于图像、视频和音频等其他一系列基础模型中。 针对这一问题,一篇最近的综述论文对目前所有基础模型的“幻觉”…

树、二叉树、堆及其应用(堆排序、top-k问题)

目录 树的概念与结构 概念: 与树相关的概念: 树的表示: 二叉树 概念: 特殊的二叉树: 二叉树性质: 二叉树的存储结构: 堆 堆的概念: 堆的实现: 堆的创建: 堆的插入: 堆的删…

linux、windows的pip一键永久换源[清华源、中科大、豆瓣、阿里云]

前言 本文概述:linux、windows操作系统一键将pip下载源永久设置为国内下载源,避免了使用临时源需要到处找镜像地址的麻烦。 作者介绍:作者本人是一名人工智能炼丹师,目前在实验室主要研究的方向为生成式模型,对其它方向…

stm32_标准库_中断_按键点灯|蜂鸣器

配置流程 需要对AFIO、EXTI、NVIC、GPIOB进行配置形成通路将中断连接至CPU APB2总线连接的寄存器 LED灯代码 #include "stm32f10x.h" // Device header #include "Delay.h"GPIO_InitTypeDef GIPO_InitStruct;//结构体配置GPIO EXTI_InitTypeDef EXTI_…

海普纯化产品-多肽固相合成载体

#海普纯化产品-多肽固相合成载体 多肽固相合成法被广泛应用于多肽和蛋白质的研究领域,特别是短多肽的合成,随着全新化学结构的新药开发难度加大,投入费用逐年增高,多肽类药物的开发逐渐成为医药领域的新热点。 多肽类药物合成技术…

【Redis】专栏合集,从入门到高级业务场景实战

作者简介 目录 1.概述 2.下载安装 3.基础操作 4.集群 5.实战场景 1.概述 诸如数mysql、Oracle之类的关系型数据库或者NTFS、HDFS之类的文件存储系统,其本质上数据都是存在磁盘上的。这是现代计算机体系架构的架构所决定的,要持久化存储的数据都会落…

一文带你实现从PDF到Word文件的相互转换

一文带你实现从PDF到Word文件的相互转换 01. 前期准备 模块安装 pip install pdf2docx or使用国内镜像源进行安装(清华的镜像源) pip install pdf2docx -i https://pypi.tuna.tsinghua.edu.cn/simple 02. 模块介绍 pdf2docx是一个Python模块&#xff0…

SpringBoot源码解析: 从手写一个简易版SpringBoot开始

IDE:IntelliJ IDEA 2019.2.4 x64 操作系统:win10 x64 位 家庭版 Maven版本:apache-maven-3.6.3 文章目录 真正的SpringBoot手写一个简易版的springboot一. 准备1.1 准备自定义的springboot模块1.2 准备用户模块User 二. 运行测试2.1 第一次运…

如何快速上传批量剪辑的素材?附素材水印、字幕去除教程

想要快速上传网络素材,大家可以使用超级编导批量剪辑软件。 首先进入超级编导官网,免费下载超级编导超级编导软件,可以在官网中添加产品顾问,获取试用账号,登录即可开始使用。 超级编导支持批量上传URL链接到后台&…

Manifest merger failed

编译报错:Manifest merger failed with multiple errors 定位编译错误:java.lang.RuntimeException: Manifest merger failed with multiple errors 近日,项目中需要引入一个module。在成功导入后,添加依赖到主模块上&#xff0c…

【RocketMQ】(六)顺序消息实现原理

全局有序 在RocketMQ中,如果使消息全局有序,可以为Topic设置一个消息队列,使用一个生产者单线程发送数据,消费者端也使用单线程进行消费,从而保证消息的全局有序,但是这种方式效率低,一般不使用…

955. 删列造序 II;1838. 最高频元素的频数;1392. 最长快乐前缀

955. 删列造序 II 核心思想:我们可以按照一行一行排列strs,删除索引序列就代表删除某一列,那么我们如何判断一列是否应该删除呢,我们可以从反方向思考,应该保留那些列呢?从第一列开始,如果它不…

WebGIS面试题(浙江中海达)

1、Cesium中有几种拾取坐标的方式,分别介绍 Cesium是一个用于创建3D地球和地理空间应用的JavaScript库。在Cesium中,你可以使用不同的方式来拾取坐标,以便与地球或地图上的对象进行交互。以下是Cesium中几种常见的拾取坐标的方式&#xff1a…

jdk21(最新版) download 配置(linux window mac)

download 直达链接 jdk21,17 # wget https://download.oracle.com/java/20/latest/jdk-21_linux-x64_bin.deb # 选择你需要的包类似格式替换包的名称就可以实现终端下载jdk下载登录/oracle账号 下载jdk有可能存在要求登录帐号的情况 # 好心人的帐号 账号: 599…

C语言内存函数的使用、剖析及模拟实现

目录 一、内存拷贝函数——memcpy 1.函数声明: 注意: 2.函数使用用例: 3.memcpy函数的模拟实现: 二、内存拷贝函数2——memmove 1.函数声明: 2.memmove函数的模拟实现 三、内存比较函数——memcmp 1.函数声明…

01_docker镜像管理:80分钟一口气学完docker+k8s!带你掌握docker+k8s所有核心知识点,全程干货,无废话!

docker镜像的实际使用学习 开发过程中,需要安装很多三方工具,比如etcd、kafka、mysql、nginx等等 1、下载安装Docker工具。 2、获取该软件的Docker镜像(基本上,都能搜索到核实的镜像),下载镜像nginx镜像…

浏览器基本原理

1、浏览器内部组成 我们看到浏览器主要包括: 1个浏览器主进程: 主要负责界面显示,用户交互,子进程管理多个渲染进程:一般浏览器会为每个Tab标签窗口创建一个渲染进程,主要负责将html,css&#…