【优化覆盖】基于matlab果蝇算法求解无线传感器覆盖优化问题【含Matlab源码 2215期】

news2024/12/23 4:01:46

一、⛄果蝇算法

果蝇优化算法(Fruit Fly Optimization Algorithm, FOA) 是台湾学者潘文超经过研究发现, 并于2011年提出的一种新型智能优化算法, 它具有很好的全局优化性能, 能够解决很多的优化求解问题.果蝇有着优于其它生物的感官知觉, 特别是视觉与嗅觉, 依靠灵敏的嗅觉, 果蝇可以很好的感知到空气中的各种气味分子, 甚至可以嗅到几十公里以外的食物.同时利用敏锐的视觉与其它果蝇聚集, 并向该方向移动.果蝇算法就是模仿果蝇的觅食过程而提出一种新型的群智能优化算法.

1 基本果蝇算法:
果蝇拥有优于其它物种的感官, 它可以收集空气中的气味分子搜寻远处的食物, 然后聚集同伴朝食物方向并拢.FOA算法就是模拟果蝇群体的觅食过程而衍生的优化算法, 其步骤可以归纳为:

(1) 初始化种群大小Sizepop, 最大迭代次数Maxgen, 随机初始化果蝇群体位置X_axis, Y_axis.
(2) 果蝇个体随机向各个方向的位置进行搜寻.
(3) 计算果蝇个体与原点距离d, 再将距离的倒数做为果蝇个体的味道浓度判定值
(4) 将味道浓度判定值Si代入适应度函数 (Fitness function) , 求出果蝇个体的味道浓度.
(5) 找出果蝇群体中最佳的果蝇
(6) 记录并保留最佳味道浓度值与X, Y坐标.
(7) 开始迭代, 重复执行 (2) ~ (5) , 并判断最佳味道浓度是否优于前一次迭代得到的味道浓度, 并且当前迭代次数小于最大迭代数Maxgen, 则执行 (6) , 否则, 算法结束.

将CS-FOA应用于解决WSN问题的算法步骤如下:
(1) 初始化无线传感器网络相关参数, 包括区域长a, 宽b, 节点的额定有效覆盖半径R, 该区域布置传感器节点个数N;
(2) 初始化CS-FOA的相关参数, 包括果蝇种群大小Sizepop, 最大迭代次数Maxgen, 单位周期迭代次数T, 搜索区间长度L;
(3) 随机初始Sizepop个果蝇的位置Wt, 根据式 (2) , 第t个果蝇的传感器节点表示为, 其中t∈[1, Sizepop], i∈[1, N];
(4) 根据式 (3) ~ (6) 计算出GW, 将GW最大的果蝇标记为最佳果蝇, 记录此果蝇的GW以及位置W:
(5) 进入迭代寻优计算, 果蝇个体根据式 (7) 确定搜索步长, 随机向各个方向搜寻.
(6) 执行步骤 (4) , 找出其中覆盖率最大的果蝇个体, 记录此果蝇的位置和覆盖率, 并将此果蝇的覆盖率与上一代最佳果蝇的覆盖率比较, 如果此果蝇覆盖率大于上一代覆盖率, 那么将此果蝇标记为最佳果蝇.最佳果蝇的位置设为节点位置, 也是下一次搜索的果蝇初始位置, 所有果蝇向此果蝇聚拢.
(7) 循环执行步骤 (5) (6) , 直至迭代次数达到Maxgen, 记录最终的结果.此时得到无线传感器网络最大的覆盖率best G和对应节点位置G_axis.

⛄二、部分源代码

%% 清空环境变量
clc;
clear;

%% 网络参数
L = 60; % 区域边长
n = 40; % 节点个数
rs = 6; % 感知半径
data = 0.4; % 离散粒度

%% FOA参数
maxgen = 500; % 迭代次数
sizepop = 25; % 种群规模
s = 0.3; % 步长

%% 随机初始化果蝇群体位置
X_axis = Lrand(1, n); % X = rand(sz1,…,szN)返回由随机数组成的 sz1×…×szN 数组
Y_axis = L
rand(1, n); % 使用公式 r = a + (b-a).*rand(N,1) 生成区间 (a,b) 内的 N 个随机数

%% 个体和浓度最大和最小值
for i = 1:sizepop
% 随机位置(第i行的全部列)
X(i, 😃 = X_axis + 2srand(1, n)-s; % 冒号:就是全部的意思,可以创建向量,为数组加下标,以及指定 for 迭代
Y(i, 😃 = Y_axis + 2srand(1, n)-s;
% 味道浓度函数(覆盖率)
Smell(i) = computeCover(X(i, 😃, Y(i, 😃, L, rs, data);
end
% 找出此果蝇群体中味道浓度最高的果蝇(求极大值)
[bestSmell, bestindex]=max(Smell); % index:返回表格或数组中的元素值,此元素由行号和列号的索引值给定
% 最佳气味浓度、果蝇位置、适应度最优位置
X_axis = X(bestindex, 😃;
Y_axis = Y(bestindex, 😃;
Smellbest = bestSmell;

%% 初始结果显示
gbest = [X_axis; Y_axis]';
disp(‘初始位置:’ ); % disp输出字符串
disp([num2str(gbest)]); % num2str把数值转换成字符串, 转换后可以使用fprintf或disp函数进行输出
disp([‘初始覆盖率:’, num2str(Smellbest)]);
% 初始覆盖图
figure;
for i = 1:n
axis([0 L 0 L]); % 限制坐标范围,axis([xmin xmax ymin ymax]),xmin和xmax分别表示在绘图时x、y轴的上下限
x = gbest(:, 1); % axis函数通常在绘图中用于设置坐标值范围
y = gbest(:, 2);
sita = 0:pi/100:2pi; % 角度[0, 2pi],sita:角度
hold on;
p2 = fill(x(i)+rscos(sita), y(i)+rssin(sita), ‘y’); % 填充区域颜色
end
p1 = plot(gbest(:, 1), gbest(:, 2), ‘r*’);
legend([p1, p2], {‘WSN节点’, ‘覆盖区域’});
title ‘FOA-WSN初始结果’;

%% 果蝇迭代寻优
for gen = 1:maxgen
% 粒子位置和速度更新

% 根据气味浓度值寻找极值
[bestSmell, bestindex]=max(Smell);
% 保留最佳值位置
if bestSmell > Smellbest
    X_axis = X(bestindex, :);
    Y_axis = Y(bestindex, :);
    Smellbest = bestSmell;
end
% 每代最优Smell值记录到yy数组中,并记录最优迭代坐标
yy(gen) = Smellbest;
Xbest(gen, :) = X_axis;
Ybest(gen, :) = Y_axis;
% 显示迭代信息
display(['FOA: At iteration ', num2str(gen), ' the best fitness is ', num2str(yy(gen))]);

end

%% 结果显示
gbest = [ Xbest(end, 😃; Ybest(end, 😃]';
disp(‘最优位置:’);
disp([num2str(gbest)]);
disp([‘最优覆盖率:’, num2str(yy(end))]);

⛄三、运行结果

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

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]尹向兵,吴良超.基于周期果蝇算法的无线传感网覆盖优化[J].赤峰学院学报(自然科学版). 2017,33(16)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

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

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

相关文章

Linux服务器被入侵后的排查思路(应急响应思路)

目录Linux-暴力破解、替换ps命令并留存后门事件复现一、事件背景二、应急响应过程排查crontab后门排查是否有命令被替换响应过程回顾三、事件还原查看后门排查安全日志Linux-暴力破解、替换ps命令并留存后门事件复现 一、事件背景 服务器疑似被入侵,与恶意IP进行通信…

手眼标定笔记

文章目录基本介绍:坐标系变换运算规则:关系运算说明:坐标系运算规则一:坐标系运算规则二:齐次坐标系:齐次坐标系下的坐标变换:眼在手外:眼在手内:解方程:- Ta…

Spring学习第4篇:Spring 的依赖注入

大家家好,我是一名网络怪咖,北漂五年。相信大家和我一样,都有一个大厂梦,作为一名资深Java选手,深知Spring重要性,现在普遍都使用SpringBoot来开发,面试的时候SpringBoot原理也是经常会问到&…

数据结构 | 单链表

… 🌳🌲🌱本文已收录至:数据结构 | C语言 更多知识尽在此专栏中!文章目录🌳前言🌳正文🌲链表打印与销毁🪴打印🪴销毁🌲尾部插入与删除🪴节点申请&…

javaweb JAVA JSP销售系统购物系统jsp购物系统购物商城系统源码(jsp电子商务系统)网上在线销售

JSP销售系统购物系统jsp购物系统购物商城系统源码(jsp电子商务系统)网上在线销售

Linux基础 - 虚拟化介绍(KVM)

‍‍🏡博客主页: Passerby_Wang的博客_CSDN博客-系统运维,云计算,Linux基础领域博主 🌐所属专栏:『Linux基础』 🌌上期文章: Linux基础 - 服务管理(systemd) 📰如觉得博…

爬取医药卫生知识服务系统的药品数据——超详细流程

爬取医药卫生知识服务系统的药品数据——超详细流程 文章目录爬取医药卫生知识服务系统的药品数据——超详细流程前言一、寻找药品数据二、爬取药品ID1.资源获取2.数据提取3.资源保存4.主函数5.总体代码三、爬取药品信息1.加载资源ID2.获取数据3.数据提取4.保存信息5.主函数6.总…

SpringBoot-属性绑定和bean属性校验

目录 属性绑定 自定义类属性绑定 第三方bean属性匹配 规则:松散绑定(宽松绑定) Bean属性校验 属性绑定 属性绑定:我们可以使用配置文件对类的属性进行赋值绑定。 自定义类属性绑定 我们自定义一个类,在此使用yml文件进行类…

【滤波器】基于matlab实现微波带低通高通带通滤波器设计

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

python科研做图系列之雷达图

文章目录参考资料matplotlib库画的复现一个 pyecharts的雷达图尝试在上面的基础上,把pyecharts 导出存为一般的png图尝试在上面的基础上,把pyecharts 导出存为一般的矢量图用pygal画雷达图参考资料 参考知乎 CSDN给出了一些参数 matplotbib库雷达图官网 …

Python实现九九乘法表的几种方式,入门必备案例~超级简单~

前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 们在学习Python的过程中需要不断的积累和练习,这样才能够走的更远, 今天一起来学习怎么用Python写九九乘法表~ 第一种方法:for-for 代码: for i in range(1, 10):for j in…

数据挖掘面试经总结【私人版,仅供参考】

1特征归一化 1.1为什么需要对数值类型的特征做归一化? 线性函数归一化零均值归一化 1.2在对数据进行预处理时,应该怎样处理类别型特征? 序号编码独热编码二进制编码 1.3什么是组合特征?如何处理高维组合特征? 例…

【python】云打印实现

这两天为了实现云打印功能找了很多相关的文章 记录一下这一篇,python云打印实现-朝花夕拾,代码通过监听文件夹有无产生新文件来判断是否执行,我尝试运行了下没问题,于是打算转载一下 程序运行结果 由于对方的代码和我实现的有点出…

【Maven】你好,Maven >>> 与Maven的初次见面~

个人主页:.29.的博客 学习社区:进去逛一逛~ 个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的道路上摸爬滚打,记录学习的过程~ 与Maven的初次见面~一、了解Maven二、Maven的…

Flink双流join导致数据重复

大家都知道flink sql 中 left join 数据不会互相等待,存在 retract 问题,会导致写入 kafka 的数据量变大,就会导致出现数据重复的问题。 举例:即常见的曝光日志流(show_log)通过 log_id 关联点击日志流&am…

SQL:数据去重的三种方法

1、使用distinct去重 distinct用来查询不重复记录的条数,用count(distinct id)来返回不重复字段的条数。用法注意: distinct【查询字段】,必须放在要查询字段的开头,即放在第一个参数;只能在SELECT 语句中使用&#…

spring整合fastdfs客户端

解决Dependency ‘com.github.tobato:fastdfs-client:1.27.2’ not found 错误问题。 一、 将fastdfs客户端git下来 git https://github.com/happyfish100/fastdfs-client-java.gitcd fastdfs-client-java然后将fastdfs-client-java构建到本地maven仓库 mvn clean install&…

Pandas的数据结构

Pandas的数据结构 处理CSV 文件 CSV(Comma-Separated Values,逗号分隔值,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。 Pan…

【强化学习】深入浅出强化学习--机器人找金币

文章目录Grid_mdp.py定义和初始化从环境状态构建观测值ResetStepRenderingClose注册环境参考文章Grid_mdp.py 定义和初始化 首先自定义环境,自定义的环境将继承gym.env环境。在初始化的时候,可以指定环境支持的渲染模式(例如human,rgb_arra…

项目实战 | YOLOv5 + Tesseract-OCR 实现车牌号文本识别

项目实战 | YOLOv5 Tesseract-OCR 实现车牌号文本识别 最近看到了各种各样的车牌识别,觉得挺有意思,自己也简单搞一个玩玩😼。 传统的图像处理算法我也不太会,就直接用深度学习的方法实现吧。 文章目录项目实战 | YOLOv5 Tesser…