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

news2024/9/21 2:33:31

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

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

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

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

目录

💥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给定的情况下:

\text { sigma }=\operatorname{sigma}_{\min }+\left(\frac{g_{\max }-g}{g_{\max }}\right)^{w} \times\left(\operatorname{sigma}_{\max }-\operatorname{sigma}_{\min }\right)

📚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.coloradmin.cn/o/467620.html

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

相关文章

这些使用工具大推荐,现在知道不晚

1.Snip Snip是一款截图软件,它突出的优点就是可以制作滚动截图。 例如:对整个网页进行截图,使用Snip即可轻松获取,无需处理水印。 2.Sleep Cycle 快节奏、高压力的生活导致我们越来越晚睡觉,睡眠质量越来越差。 想提…

Python学习9:对指定r计算圆的面积(python123)

平台:python123 题目描述: 编写函数getCircleArea(r),对给定的参数r计算圆的面积,并返回首先读入n(n>0),然后依次读入n个半径r1,r2,...,rn,以这些半径为参数依次调用getCircleArea函数,得到对应圆的面…

3.动态规划(0x3f:从周赛中学算法 2022下)

来自0x3f 【从周赛中学算法 - 2022 年周赛题目总结(下篇)】:https://leetcode.cn/circle/discuss/WR1MJP/ 【【灵茶山艾府】2022 年周赛题目总结(上篇)】https://leetcode.cn/circle/discuss/G0n5iY/ 学习动态规划是否…

( 栈和队列) 503. 下一个更大元素 II ——【Leetcode每日一题】

❓503. 下一个更大元素 II 难度:中等 给定一个循环数组 nums ( nums[nums.length - 1] 的下一个元素是 nums[0] ),返回 nums 中每个元素的 下一个更大元素 。 数字 x 的 下一个更大的元素 是按数组遍历顺序,这个数字…

为何越来越多人不喜欢“试用期六个月”的公司?网友:感觉不靠谱

众所周知,任何一份工作都有试用期,一般是三月左右。但如果你遇到试用期达到半年的公司,你会不会进入? 近日,就有人遇到了此类公司,并对是否要进入该公司犹豫不决。他在论坛上发帖求助:大家是怎…

京城、京味、京韵:从一台服务器看数字北京

北京,既是首善之都,也是数字化创新之城。 早在1999年,北京就基于整座城市的信息化建设方案,率先提出了“数字北京”。后来,数字北京的魅力在奥运会期间大放异彩,受到了全球高度认可。如今,数字经…

【Python】【进阶篇】10、Django中间件

目录 Django中间件1. Django默认自带中间件1)中间的执行与响应顺序2)在调用视图之前3)在调用视图之后 2. 中间件的作用总结 Django中间件 中间件是一个插件系统,嵌入在 Django 的 Request 和 Response 之间执行,可以对…

使用@Bean注解指定初始化和销毁的方法

bean的生命周期 通常意义上讲的bean的生命周期,指的是bean从创建到初始化,经过一系列的流程,最终销毁的过程。只不过,在Spring中,bean的生命周期是由Spring容器来管理的。在Spring中,我们可以自己来指定be…

apple pencil有买的必要吗?便宜的平替电容笔推荐

在当今世界,电容笔就已经成为一种热门的电子产品,其的各项性能也在不断改进。因此,如何挑选一款性价比高的电容笔成为大家关心的焦点,越来越多的人开始追求更好更廉价的电容笔。那么,哪个品牌的电容笔价格更实惠、性价…

工业设备巨头MSC Industrial Supply的供应链建设——EDI

MSC Industrial Supply提供广泛的工业用品和解决方案,包括切削工具、测量工具、金属加工和设备维护工具、劳动保护用品、工业设备等。MSC Industrial Supply的供应商来自全球各地,包括多个行业的领先品牌,例如Kennametal、Sandvik Coromant、…

【图像分割】【深度学习】SAM官方Pytorch代码-Prompt encoder模块ProEnco网络解析

【图像分割】【深度学习】SAM官方Pytorch代码-Prompt encoder模块PromptEncoder网络解析 Segment Anything:建立了迄今为止最大的分割数据集,在1100万张图像上有超过1亿个掩码,模型的设计和训练是灵活的,其重要的特点是Zero-shot(…

北邮22信通:二叉树层序遍历的非递归算法:A Story Between Two Templates

北邮22信通一枚~ 跟随课程进度每周更新数据结构与算法的代码和文章 持续关注作者 解锁更多邮苑信通专属代码~ 获取更多文章 请访问专栏~ 北邮22信通_青山如墨雨如画的博客-CSDN博客 目录 一.总纲 二.用队列存储 2.1用模板类实现队列 2.1.1核心思路: …

丁鹿学堂:使用vite手动构建vue项目的注意事项和步骤总结

使用yarn 默认安装了nodeJS环境,使用yarn,比npm更好用。 npm install --global yarn使用yarn按钻过vite yarn add -D vite使用yarn初始化项目 yarn init -y安装vite yarn add vite -D安装vue yarn add vue项目目录: 创建index.html sr…

分享一个有意思的文字飞入动画(模仿水滴融合)

先上效果图&#xff1a; 代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>* {margin: 0;padding: 0;box-sizing: border-box;}:root {--text-…

前后端分离demo 旅馆管理系统(Angular+Springboot)

模型设计 旅馆管理系统&#xff0c;主要涉及到登记入住&#xff0c;退房以及客房和客人信息管理&#xff1b;经过分析抽像出涉及到的实体以及各实体之间的关系&#xff1a;   可以看出整个业务以客房为中心&#xff0c;入住&#xff0c;退房&#xff0c;定价&#xff0c;收费…

Build an SAP Fiori App(一)后面更新中

1.登录 SAP BTP Trial 地址&#xff1a; https://account.hanatrial.ondemand.com 流程可以参考 点击 serviced marketplace 搜索studio 点击创建 点击创建&#xff0c;点击view subscription 点击go to application 创建完成后 添加新链接 Field Value Name ES5 - if you’…

Shell基础入门实战

写在前面 好久没在项目内做自动化了&#xff0c;主要是现阶段在项目内做自动化收益不大&#xff0c;最近开发做batch run的正好缺人&#xff0c;我看了一下代码&#xff0c;就是通过代码读取jar包和远程服务器连接&#xff0c;然后通过shell脚本&#xff0c;向数据库插入数据&a…

如何成为一名优秀的接口自动化测试工程师?了解这些技能是关键

摘要&#xff1a; 随着互联网行业的不断发展&#xff0c;越来越多的应用程序通过API接口提供服务。因此&#xff0c;接口自动化测试成为了保障软件质量的重要环节。本文将介绍接口自动化测试所需掌握的技能&#xff0c;以及相关的历史进程。 B站首推&#xff01;2023最详细自…

什么是 Java 垃圾回收器~

什么是 Java 垃圾回收器 Java 垃圾回收器是 Java 虚拟机 (JVM) 的三个重要模块 (另外两个是解释器和多线程机制) 之一&#xff0c;为应用程序提供内存的自动分配 (Memory Allocation)、自动回收 (Garbage Collect) 功能&#xff0c;这两个操作都发生在 Java 堆上 (一段内存快)…

sqoop安装

文章目录 1. 上传安装包至虚拟机2. 解压安装包到指定路径3. 修改目录名4. 配置环境变量5. 修改配置文件6. 拷贝mysql驱动包7. 验证安装是否成功8. 测试sqoop连接mysql 注&#xff1a;sqoop安装的前提条件是环境已安装java和hadoop 1. 上传安装包至虚拟机 上传安装包sqoop-1.4.…