延长无线传感器网络网络寿命的异构节点智能部署策略(Matlab代码实现)

news2024/9/21 12:26:51

       目录

💥1 概述

📚2 运行结果

🎉3 参考文献

👨‍💻4 Matlab代码


💥1 概述

无线传感器网络是通过大量分布的传感器节点作为终端来协同感知和自主地监测外部世界,以多跳、自组织或协作的方式进行通信和信息传输,具备自主决策和自控能力,并智能地完成目标任务。这些传感器节点具有体积微小、能耗较低等特点,并且计算和通信能力具有局限性。由于无线传感器网络具备实用性高、设置灵活,网络规模具备可扩展性,接入方式可变性等特征,近十多年来,无线传感器网络已经受到学术界和工业界密切的关注,并已广泛应用于智慧城市、国防军事、智能交通、工农业生产、智慧医疗、环境灾害预警等众多领域。作为一种新的计算模式,无线传感器网络已经发展成为涉及多种技术的交叉学科,成为构造智能物联系统和普适计算的关键技术,在物联网时代具有决定性作用。传感器网络通常是大规模部署在环境比较恶劣、高危、偏僻的无人区域。在海洋、浅海和湖泊等水下部署的无线传感器网络,明显具有传感器节点的位置或感知方向易发生摆动或漂移、监测信号衰减较快、噪声干扰大、节点能量损耗快、部署成本高等特性。因此,在水下复杂、多变的应用环境下,构建无线传感器网络节点部署优化策略将对提升传感器节点的监测能力和无线传感器网络的综合性能至关重要,也是无线传感器网络相关研究的基础性和关键性问题。本文针对二维有向无线传感器网络、水下三维异构无线传感器网络节点部署优化以及水下三维传感器网络异构节点部署优化问题,深入系统研究了不同目标应用所处场景下网络部署面临的环境特点和具体应用需求特征,探索具有针对性的、高效的无线传感器网络节点部署和优化方案,以有效分散节点功耗,提升感知质量,延长网络生命周期。本文主要研究内容与成果包括以下方面:1.二维有向无线传感器网络节点部署优化策略。针对在二维环境下的有向无线传感器网络监测任务中,以随机部署方式撒播在指定监测区域内部的有向感知节点通常会出现分布不均匀等问题,分析有向传感器节点、概率感知模型特征以及多个传感器节点对监测目标点的协同感知模型的特点,提出了极坐标下的感知优化策略,指导二维平面有向传感器节点的方向调整和感知优化,从而提升网络节点感知能力。

📚2 运行结果

 

 

主函数部分代码:

clear;
clc;
close all;

filename = "amal.gif";
%axis tight manual;
%ITERATIONS = 1200;
objective_history = [];
%fitness_history = [];
min_lifetime = -1;
min_index_lifetime = -1;
final_energy = 15;
prev_mean = -inf;

prompt = {'Number of Sensor Nodes', 'Number of Heterogenous Nodes', 'Initial energy of each sensor Node', 'Initial energy of each heterogenous Node', 'Size of Terrain(x)', 'X coordinate of Sink', 'Y coordinate of Sink', 'Total Population size:','Maximum Iterations:', 'Random Number generator Seed:', '0 for fixed deployment, 1 for random'};
title = 'Multihop Transmission Genetic Algorithm';
dims = [1 70];
definput = {'30', '6', '0.5', '1.5', '100', '50', '50', '1000', '50', '1', '1'};
answer = inputdlg(prompt,title,dims,definput);
NODES = str2double(answer{1});
HET_NODES = str2double(answer{2});
SENSOR_ENERGY = str2double(answer{3});
HETER_ENERGY = str2double(answer{4});
TERRAIN_SIZE = str2double(answer{5});
SinkX = str2double(answer{6});
SinkY = str2double(answer{7});
POPULATION_SIZE = str2double(answer{8});
ITERATIONS = str2double(answer{9});
RNG_SEED = str2double(answer{10});
DEP_TYPE = str2double(answer{11});
tic
relay_energy = SENSOR_ENERGY + HETER_ENERGY;

min_positions = zeros(1, HET_NODES);
% generate terrain and initialize sensor nodes
if DEP_TYPE == 1
    [x, y, en] = sensor_nodes(NODES, TERRAIN_SIZE, SENSOR_ENERGY);
else
    [x, y, en] = fixed_deployment(SENSOR_ENERGY);
    NODES = 40;
    TERRAIN_SIZE = 100;
end

nn_mv_tic = tic;
[nn, nn_dist] = calculate_nearest_neighbour(x, y, SinkX, SinkY);
mv = calculate_multiplier(size(x, 2), nn);
fprintf('Time Taken to calculate nn&mv : %.2f seconds. \n',toc(nn_mv_tic));

initial_energy = en;
[lifetime1, en2] = multihop_transmission(x, y, en, SinkX, SinkY, nn_dist, mv);
initial_lifetime = lifetime1;

total_energy_hist = -1 * ones(1, ITERATIONS);
lifetime_hist = -1 * ones(1, ITERATIONS);

rng(RNG_SEED);

p = [x(:) y(:)];
% initial population
% heter_nodes_index = randi([1, size(x, 2)], POPULATION_SIZE, HET_NODES);
for i = 1 : POPULATION_SIZE
    heter_nodes_index(i, :) = randperm(size(x, 2), HET_NODES);
end
int_hni = heter_nodes_index;
%for i = 1:HET_NODES
%    hetero_nodes_position(i, 1) = x(heter_nodes_index(i));
%    hetero_nodes_position(i, 2) = y(heter_nodes_index(i));
%    en(heter_nodes_index(i)) = en(heter_nodes_index(i)) + HETER_ENERGY;
%end
%plot_nodes(x, y, SinkX, SinkY, hetero_nodes_position);
f = figure('Position', [750, 50, 600, 400]);

saturation_count = 0;

for z = 1 : ITERATIONS
    lifetimes = -1 * ones(1, POPULATION_SIZE);
    fitness = -1 * ones(1, POPULATION_SIZE);
    objective = -1 * ones(1, POPULATION_SIZE);

    for i = 1 : POPULATION_SIZE
        energy = initial_energy;    
        for j = 1 : HET_NODES
            energy(heter_nodes_index(i, j)) = energy(heter_nodes_index(i, j)) + HETER_ENERGY;            
        end
        [lifetime2, en3] = multihop_transmission(x, y, energy, SinkX, SinkY, nn_dist, mv);
        lifetimes(i) = lifetime2;
        objective(i) = lifetime2;
        fitness(i) = 1 / (1 + objective(i));
        
    end
    %lifetime_hist(z) = min(lifetimes);
    [lifetime_hist(z), min_index] = max(lifetimes(~ismember(lifetimes, 0)));
    if lifetime_hist(z) > min_lifetime
        min_lifetime = lifetime_hist(z);
        all_min_indices = find(lifetimes == max(lifetimes));
        random_index = randi([1, size(all_min_indices, 2)]);
        min_index_lifetime = all_min_indices(random_index);
        min_positions = heter_nodes_index(min_index_lifetime, :);
        for i = 1:HET_NODES
            hetero_nodes_position(i, 1) = x(min_positions(i));
            hetero_nodes_position(i, 2) = y(min_positions(i));
        end
    end

🎉3 参考文献

[1]王若霖. 基于群智能算法的异构WSN节点部署优化研究[D].哈尔滨工程大学,2020.

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

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

相关文章

Android系统架构

Application层,也就是应用层,不仅包括通话短信联系人这种系统级的应用,还包括用户自己安装的一些第三方应用Framework层,这一层大部分用Java写的,包括系统服务和四大组件Library层,这一层大部分都是C/C写的…

C++调用matlab编译动态库方法及相关问题解决

目录 参考链接:1、C调用matlab代码的方法1.1、Library Compiler 方法1.1.1、功能1.1.2、参考链接 1.2、mex -setup方法1.2.1、功能参考链接: 1.3、coder 方法功能 1.4、Matlab engine 2、C 使用matlab编译动态库的传参方法3、matlab运行时 参考链接&…

《AI嵌入式系统技术与实践-基于树莓派RP2040和MicroPython》书籍介绍

图书封面及出版信息 该书由本博主编著,全书总字数约50万字,本书于2023年4月出版。 内容简介 本书基于以RP2040 MCU芯片为核心的树莓派Pico开发板硬件扩展接口,利用Pico硬件扩展接口和面包板设计典型硬件电路,并结合当今流行的微…

网络编程(TCP与UDP协议)

文章目录 1. 网络编程1.1 软件架构1.2 网络基础 2. 网络通信要素2.1 如何实现网络中的主机互相通信2.2 通信要素一:IP地址和域名2.2.1 IP地址2.2.2 域名 2.3 通信要素二:端口号2.4 通信要素三:网络通信协议 3. 传输层协议:TCP与UD…

如何快速查询Git的config配置文件的本地路径

如何快速查询Git的config配置文件的本地路径 命令作用git config --local --list --show-origin查看仓库级别 git 配置信息,并打印配置文件本地路径最高优先级(仓库下)git config --global --list --show-origin查看全局级别 git 配置信息&a…

2022年全国职业院校技能大赛网络系统管理赛项模块B:Windows部署(样题1)

2022年全国职业院校技能大赛 网络系统管理赛项 模块B:Windows部署 (样题1) 目录 一、 初始化环境 (一)默认账号及默认密码 二、项目任务描述 (一)基本配置 (二)拓…

C语言控制语句

文章目录 前言一、分支语句1.if语句2.if else else if3.switch语句 二、循环语句1.for循环2.while循环3.do-while循环 三、跳转语句1.break语句2.continue语句3.goto语句 四、嵌套语句1.if语句嵌套2.for语句嵌套3.while语句嵌套 总结 前言 C语言中的控制语句是非常重要的一个知…

JVM入门必备

1、JVM 的位置 2、JVM 的体系结构 JVM(Java虚拟机)是Java程序的运行环境,它对于Java平台的运行和跨平台特性的实现有着重要的作用。JVM的体系结构有以下几个部分: 类加载器(ClassLoader):负责将…

day4 IP地址与端口号

IP地址及其表示方式 IP地址表示方法: 分类的IP地址: 多归属主机: 当一个主机通过两个网卡同时连接到两网络时,也就是该主机同时拥有两个IP地址,该主机被称为多归属主机; 一个路由器至少连接到两个不同的网…

C++语法(21)---- 模拟map和set

(1条消息) C语法(20)---- 模拟红黑树_哈里沃克的博客-CSDN博客https://blog.csdn.net/m0_63488627/article/details/130296772?spm1001.2014.3001.5501 目录 1.stl中的设计思想 2.模拟set和map 1.set和map的类 2.BRTree的仿函数实现 3.红黑树的迭…

C语言力扣简单题-两数之和

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 两数之和 题目: 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和…

从数据处理到人工智能(常用库的介绍)

Python库之数据分析 ​​​​​​​​​​​​ 可以这么理解pandas通过扩展了对一维数据和二维数据的一种表示,因而能够形成更高层对数据的操作,简化数据分析的运行 Python库之数据可视化 Matplotlib — Visualization with Python seaborn: statistic…

DNS基础:通过dig命令理解DNS域名解析中的A记录,AAAA记录,CNAME记录,MX记录,NS记录

参考博文:https://blog.csdn.net/zxl1990_ok/article/details/125432123 目录 参考资料DNS简介查询过程直接显示DNS寻址结果向特定DNS服务器寻址查询A记录查询AAAA记录CNAME记录MX记录NS记录PTR记录SOA记录查看DNS服务器的主从关系 参考资料 http://ruanyifeng.com…

C++ Primer阅读笔记--异常处理机制

目录 1--异常处理机制 2--throw表达式 3--try语句块 4--标准异常类 5--代码实例 1--异常处理机制 异常处理机制为程序中的异常检测和异常处理这两部分的协作提供支持;在 C 语言中,异常处理包括:throw表达式、try语句块和异常类&#xff…

线程池【Linux】

文章目录 1. 引入2. 应用3. 实现封装线程封装线程池线程函数生产消费逻辑互斥锁条件变量线程函数主线程测试1 4. 优化5. 日志日志的重要性实现日志级别提取参数stdarg.h 头文件日志文件 懒汉实现单例模式什么是懒汉模式什么是单例模式实现 1. 引入 线程池是一种池化技术&#…

Vue后台管理系统-前端登录设计

在做后台管理系统时,登录模块是必不可少的,访模块看似简单,在开发涉及到许多细节,一般来说主要有以下这些: 1. 登录输入的信息要进行正则校验; 2. 密码输入要可以查看明文; 3. 密码输入时要对…

JavaWeb——IP协议的相关特性

目录 一、IP协议 1、地址管理 (1)、动态分配IP地址 (2)、NAT机制 (3)、IPv6协议 2、路由选择 (1)、定义 (2)、原理 二、路由器 三、IP地址的组成 1…

Postman登录注册指导

在做后端开发的小伙伴经常需要测试自己写的接口是否可以用 这时Postman就是一个很好的选择 如果您还没有下载 可以参考我的文章 API接口调试工具Postman下载安装步骤 安装好之后 我们就需要处理 它的一个注册和登录 我们点击右上角 这里就有一个创建一个账户 我们点击一下 …

CF - Playing in a Casino

题意:一个数的幸运值计算规则是用里面最大的数字-最小的数字所得值 给出一个范围,求这个范围里幸运值最大的是哪个数 解: 这道题相对来说就很简单了,注意数值限制范围在1道1e6,虽然这道题确实暴力就能做出来&#xf…

手把手教你用几行代码给winform多个控件(数量无上限)赋值

前言: 我们在开发winform程序的过程中,经常会遇到这样一个场景,我们设计的界面,比如主窗体有一百多个TextBox,然后初始化的时候要对这个一百多个TextBox的Text属性赋值,比如赋个1,如果是winfor…