【单目标优化算法】杂草优化算法(Matlab代码实现)

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


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


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

📋 📋 📋 本文目录如下: 🎁 🎁 🎁
目录
💥1 概述
📚2 运行结果
🎉3 参考文献
🌈4 Matlab代码实现

💥1 概述

杂草算法代码简单,易于实现,具有较强的自适应性和鲁棒性。

算法步骤:(以搜索最小值为例)

1、初始化种群

随机生成一定数量的初始解(杂草),这些初始解(杂草)随机地均匀地分布在搜索空间(草原)内。

2、种群繁殖

现实世界中,不同杂草在草原上的适应度不同,适应度高的个体生长旺盛,将会产生更多的子代种子。

对应到最优解搜索问题中,接近最优解的解具有更强的适应度,会产生更多的子代个体(下一代的解)。远离最优解的解具有较低适应度,会产生较少的下一代个体。

基于上述分析,当前解产生子代种子个数公式如下:

其中,Fx代表当前解的适应度,Fmin代表当前种群中所有解的最小适应度,Fmax代表代表当前种群中所有解的最大适应度。seed_max和seed_min分别代表每次迭代过程中单个解能够随机生成的最大/最小种子个数。

注意,当搜索目标函数最大解时,

当搜索目标函数最小解时,

其中Smax代表当前种群目标函数最大值,Smin代表当前种群目标函数最小值。(当搜索最小值的时候,函数值最小的解适应度最大)

3、空间搜索

现实世界中,杂草的种子随着动物的运动、风能等传播到父代个体周围。种子传播的距离服从正态分布。

对应到最优解搜索过程中,当前解的子代服从正态分布,该正态分布的均值为当前解的位置,标准差定义为sigma,sigma随着时间的推移与当前迭代次数g成负相关,在sigma最大值sigma_max、sigma最小值sigma_min、最大迭代次数g_max以及非线性调节因子w给定的情况下:

📚2 运行结果

部分代码:

%% IWO Main Loop

for it = 1:MaxIt

% 更新标准偏差

sigma = ((MaxIt - it)/(MaxIt - 1))^Exponent * (sigma_initial - sigma_final) + sigma_final;

% 获得最佳和最差的目标值

Costs = [pop.Cost];

BestCost = min(Costs);

WorstCost = max(Costs);

% 初始化子代种群

newpop = [];

% 繁殖

for i = 1:numel(pop)

% 比例系数

ratio = (pop(i).Cost - WorstCost)/(BestCost - WorstCost);

% 每个杂草产生的种子数

S = floor(Smin + (Smax - Smin)*ratio);

for j = 1:S

% 初始化子代

newsol = empty_plant;

% 生成随机位置

% randn是一种产生标准正态分布的随机数或矩阵的函数

newsol.Position = pop(i).Position + sigma * randn(VarSize);

% 边界(下限/上限)处理

newsol.Position = max(newsol.Position, VarMin);

newsol.Position = min(newsol.Position, VarMax);

% 子代的目标函数值

newsol.Cost = CostFunction(newsol.Position);

% 添加子代

newpop = [newpop;

newsol]; % #ok

end

end

% 合并种群

pop = [pop;

newpop];

% 种群排序

[~, SortOrder] = sort([pop.Cost]);

pop = pop(SortOrder);

% 竞争排除(删除额外成员)

if numel(pop)>nPop

pop = pop(1:nPop);

end

% 保存最佳种群

BestSol = pop(1);

% 保存最优函数值历史记录

BestCosts(it) = BestSol.Cost;

% 显示迭代信息

% disp(['Iteration ' num2str(it) ': Best Cost = ' num2str(BestCosts(it))]);

end

🎉3 参考文献

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

[1]张帅,贾如春.基于杂草优化算法优化极限学习机的DoS攻击检测研究[J].微型电脑应用,2019,35(04):85-89.

[2]李袁. 入侵杂草优化算法研究与应用[D].江苏科技大学,2018.

🌈4 Matlab代码实现

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DragGAN开源:生成图像流形上的基于点的交互式操作

文旨在解决生成对抗网络(GAN)中控制生成图像的问题。通过“拖动”图像中的任意点,实现用户交互式精确控制生成图像的姿态、形状、表情和布局。 这个名叫DragGAN的模型,本质上是为各种GAN开发的一种交互式图像操作方法。论文以Sty…

软件外包开发在线监控工具

软件系统上线后需要实时监控,这样在系统出现问题后可以及时发现问题并解决问题。今天和大家分享常见的软件系统监控工具,这些工具功能强大且成熟稳定,熟练的应用可以帮助运维人员解决很多项目中的实际问题。北京木奇移动技术有限公司&#xf…

java面试高频面试题

文章目录 面向对象 什么是面向对象?封装继承多态 和equals比较hashCode与equals重载和重写的区别Final类加载器spring是什么AOP的理解谈谈你对IOC的理解零拷贝RocketMQ 架构设计RocketMq 事务消息原理RockeMq顺序消息消费原理简述RockerMQ持久化机制RocketMQ如何保…

Redis的简单使用 (实现Session持久化)

🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🤺🤺🤺 目录 一、Redis数据类型的使用 1. 字符串&#xff…

“前端已死”

一、一些迹象 逛社区,偶然看到了这张图片: 嗯……我眉头一皱,久久不语,心想,有这么夸张吗,假的吧? 突然想到,最近我在社区发了个前端招聘的信息,结果简历漫天纷飞&…

并发-JMM-CPU缓存一致性协议MESI

回顾 指令重排 第一V读,都不能指令重排;第二个V写,都不能指令重排 普通读写,写读都会发生指令重排,V写普通读写会发生指令重排,普通读写V读会发生指令重排 CPU缓存一致性协议MESI java—》cpu的执行过程…

kafka基础

文章目录 1、什么是消息队列?2、基础架构3、Kafka为什么快4、零拷贝5、Rebalance机制6、kafka如何避免重复消费7、避免消息丢失8、Kafka怎么实现消息的顺序消费9、什么是ISR10、Kafka文件存储机制 1、什么是消息队列? kafka是一个消息队列的中间件&…

MySQL - 数据库级别的外键

1. 外键 FOREIGN KEY (了解) 测试数据 : 学生表 CREATE TABLE IF NOT EXISTS student (id INT(4) NOT NULL AUTO_INCREMENT COMMENT 学号,name VARCHAR(30) NOT NULL DEFAULT 匿名 COMMENT 姓名,pwd VARCHAR(20) NOT NULL DEFAULT 123456 COMMENT 密码,sex VARC…

FastDFS单机部署及SpringBoot整合

前言 FastDFS是一个开源的高性能分布式文件系统。它的主要功能包括:文件存储、文件同步和文件访问(文件上传和文件下载),可以解决高容量和负载平衡问题。FastDFS应满足其服务基于文件的网站的要求,如照片共享网站和视…

卷积基础知识总结

卷积层是卷积神经网络中的核心模块,**卷积层的目的是提取输入特征图的特征,**如下图所示,卷积核可以提取图像中的边缘信息。卷积也成为过滤器,即Filter 1 卷积的计算方法 卷积运算本质上就是在滤波器和输入数据的局部区域间做点…

ECharts数据可视化

目录 第一章 什么是ECharts 第二章 搭建环境 2.1 Echarts的下载 2.2 Visual Studio Code下载 第三章 一个简单的可视化展示 第四章 Echarts组件 4.1 标题 4.2 提示框 4.3 工具栏 4.4 图例 4.5 时间轴 4.6 数据区域缩放 4.6.1 滑动条型数据区域缩放 4.6.2 内置型…

IDEA中创建编写JSP

一、安装Tmocat并配置环境 安装请参考:https://www.cnblogs.com/weixinyu98/p/9822048.html 安装请参考:https://www.cnblogs.com/zhanlifeng/p/14917777.html 注意:在安装成功Tomcat测试是否成功安装时,访问“http://localhost:8…