【群智能算法改进】一种改进的算术优化算法 改进算术优化算法 改进AOA[1]【Matlab代码#37】

news2024/11/15 21:32:42

文章目录

    • 【`获取资源`请见文章第5节:资源获取】
    • 1. 基础算术优化算法
    • 2. 改进算术优化算法
      • 2.1 随机概率因子
      • 2.2 强制切换机制
    • 3. 部分代码展示
    • 4. 仿真结果展示
    • 5. 资源获取


获取资源请见文章第5节:资源获取】


1. 基础算术优化算法

算术优化算法是一类基于数学运算和搜索策略的智能优化算法,旨在解决优化问题。该算法通常用于求解连续优化问题,例如数学规划、函数优化和参数优化等。

算术优化算法的基本思想是通过模拟数学运算和搜索过程,逐步调整优化问题的解向更优的方向。算法通常维护一组候选解,并使用数学运算(如加法、减法、乘法、除法等)和搜索操作(如移动、变异、交叉等)对候选解进行更新和改进。通过迭代的方式,算法逐渐收敛到问题的最优解或近似最优解。

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

2. 改进算术优化算法

2.1 随机概率因子

在原始AOA算法中,概率因子MOP是一个非常重要的系数,它可以随着迭代从1非线性递减到0,它的公式如下:
M O P = 1 − ( t T ) 1 / α MOP=1-(\frac{t}{T})^{1/\alpha} MOP=1(Tt)1/α
在原始AOA程序中, α \alpha α被设置为定值5,这样的固定取值的方式容易使得寻优过程陷入局部最优,从而影响算法整体的寻优性能。因此,本文将 α \alpha α修改为如下的一个随机参数,范围在[-1,9]之间:
α = 10 ∗ r a n d − 1 \alpha =10*rand-1 α=10rand1
修改之后的RMOP参数会在原始MOP参数附近做随机移动,这在一定程度上提高了算法逃出局部最优的能力。
下面给出了改进后的RMOP参数和MOP参数的迭代过程对比:
在这里插入图片描述

2.2 强制切换机制

在原始AOA算法中,除法和乘法操作对应着上面图中的公式8,而减法和加法操作对应着上面图中的公式10,这也是为什么该算法叫算术优化算法。

在原始AOA算法中,MOA参数扮演着十分重要的角色,它用于平衡算法的探索和开发能力,探索行为由除法和乘法公式来负责,而开发行为由减法和加法负责。在原始AOA算法中,MOA参数并不能反映算法目前适用于哪种更新公式,因此将其与随机数rand来比较从而决策出进行公式8还是公式10的方式并不妥。

本文提出了一种改进的RMOA参数来替代原先的MOA参数,公式如下:
R M O A = t a n h ∣ r a n d × ( F ( i ) − b F F ( i ) + b F ) ∣ RMOA=tanh\left | rand\times (\frac{F(i)-bF}{F(i)+bF} ) \right | RMOA=tanh rand×(F(i)+bFF(i)bF)
同时,考虑到这样的方式仍然可能陷入局部最优,所以为每个个体配置了一个计数器,如果连续迭代多次,都未能找到更优的解,就100%执行探索行为(即除法和乘法操作),而不执行开发行为(即减法和加法操作)。

3. 部分代码展示

%% 画RMOP图像的相关代码
 Alpha=5;
 MOP(i)=1-((i)^(1/Alpha)/(Max_iter)^(1/Alpha));
 mAlpha=10*rand-1; % 根据论文描述,负数有效,但不显示在图像里
 if mAlpha>=0
     RMOP(i)=1-((i)^(1/mAlpha)/(Max_iter)^(1/mAlpha));
 end

%% 改进红的MAOA算法相关部分代码
for j=1:size(X,2)
           r1=rand();
           
           
            if (size(LB,2)==1)
                if r1<p
                    r2=rand();
                    if r2>0.5
                        Xnew(i,j)=Best_P(1,j)/(MOP+eps)*((UB-LB)*Mu+LB);
                    else
                        Xnew(i,j)=Best_P(1,j)*MOP*((UB-LB)*Mu+LB);
                    end
                else
                    r3=rand();
                    if r3>0.5
                        Xnew(i,j)=Best_P(1,j)-MOP*((UB-LB)*Mu+LB);
                    else
                        Xnew(i,j)=Best_P(1,j)+MOP*((UB-LB)*Mu+LB);
                    end
                end               
            end
            
           
            if (size(LB,2)~=1)   % if each of the UB and LB has more than one value 
                r1=rand();
                if r1<p
                    r2=rand();
                    if r2>0.5
                        Xnew(i,j)=Best_P(1,j)/(MOP+eps)*((UB(j)-LB(j))*Mu+LB(j));
                    else
                        Xnew(i,j)=Best_P(1,j)*MOP*((UB(j)-LB(j))*Mu+LB(j));
                    end
                else
                    r3=rand();
                    if r3>0.5
                        Xnew(i,j)=Best_P(1,j)-MOP*((UB(j)-LB(j))*Mu+LB(j));
                    else
                        Xnew(i,j)=Best_P(1,j)+MOP*((UB(j)-LB(j))*Mu+LB(j));
                    end
                end               
            end
            
        end

4. 仿真结果展示

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

5. 资源获取

可以获取完整代码资源。

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

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

相关文章

mount -l | grep bpf

BPF & Cillum mount -l | grep bpfBPF&#xff08;Berkeley Packet Filter&#xff09;文件系统netfilter和tcprofiling和tracingHTTP、gRPC和Kafka等协议VXLAN组网模式BGP&#xff08;Border Gateway Protocol&#xff09; mount -l | grep bpf 这是一个通过运行mount -l…

Linux 实操篇-Linux 磁盘分区、挂载

Linux 实操篇-Linux 磁盘分区、挂载 Linux 分区 原理介绍 Linux 来说无论有几个分区&#xff0c;分给哪一目录使用&#xff0c;它归根结底就只有一个根目录&#xff0c;一个独立且唯一的文件结构, Linux 中每个分区都是用来组成整个文件系统的一部分。Linux 采用了一种叫“载…

使用数据库连接池来快速访问数据库Druid

使用数据库连接池来快速访问数据库Druid 简介为什么使用连接池原理及使用连接池访问数据库的优势开源项目 alibaba/druid 地址 使用方法准备jar包定义Druid的配置文件 代码示例 简介 数据库连接池是一个容器&#xff0c;负责分配、管理数据库的连接(Connection)。通过连接池可…

[图表]pyecharts模块-反转柱状图

[图表]pyecharts模块-反转柱状图 先来看代码&#xff1a; from pyecharts import options as opts from pyecharts.charts import Bar from pyecharts.faker import Fakerc (Bar().add_xaxis(Faker.choose()).add_yaxis("商家A", Faker.values()).add_yaxis("…

图论与算法(2)图的基本表示

1. 图的分类 &#xff08;1&#xff09; 有向图和无向图&#xff1a; 有向图&#xff08;Directed Graph&#xff09;&#xff1a;图中的边具有方向&#xff0c;表示节点之间的单向关系。无向图&#xff08;Undirected Graph&#xff09;&#xff1a;图中的边没有方向&#x…

【Web开发技术】数据缓存中间件Redis(非关系型数据库)

文章目录 一、引言1、介绍2、五种常用数据类型 二、配置1、下载2、使用 三、使用1、命令行操作&#xff08;1&#xff09;字符串&#xff08;2&#xff09;哈希&#xff08;3&#xff09;列表&#xff08;4&#xff09;集合 set&#xff08;5&#xff09;有序集合 sorted set&a…

python基础练习题20道,快收藏起来检测自己吧 !

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 实例001&#xff1a;数字组合 题目&#xff1a; 有四个数字&#xff1a;1、2、3、4&#xff0c;能组成多少个互不相同且无重复数字的三位数&#xff1f;各是多少&#xff1f; 答案跳转 实例002&#xff1a;“个税计…

路径规划算法:基于乌燕鸥优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于乌燕鸥优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于乌燕鸥优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化算法…

Leetcode 剑指 Offer II 029. 排序的循环链表

题目难度: 中等 原题链接 今天继续更新 Leetcode 的剑指 Offer&#xff08;专项突击版&#xff09;系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 给定循环单调非递减列表中的一个点&#xff0c;写一个函数向这个…

基于QT的智能家居中控系统的简明设计

文章目录 系统总体说明主板UI设计后续改进与完善 系统总体说明 系统采用 “主从式架构” &#xff0c;即一主多从式&#xff0c;该智能居家控制系统的主要功能包括登录功能、注册功能、音乐播放功能、时间显示、日历显示、温度湿度光照气压海拔数据等环境指标数据显示等。   …

【Linux】基于阻塞队列的生产消费模型

文章目录 生产者消费者模型基本概念生产者消费者模型优点生产者消费者模型的特点 基于阻塞队列的生产者消费者模型阻塞队列-BlockingQueue C模拟实现基于阻塞队列的生产消费模型BlockQueue.hpp基本框架构造析构判空&&判满从阻塞队列插入数据向阻塞队列获取数据 Cptest.…

用pandasai轻松上手Python数据分析

一、引言 最近&#xff0c;一位名叫Gabriele Venturi的软件工程师在github上建立了pandasai的项目。据官方介绍&#xff0c;pandasai是一个 Python 第三方库&#xff0c;将人工智能的生成能力集成到pandas包中&#xff0c;使数据分析具有对话性。实际上&#xff0c;该第三方包…

Vue表格Table精美模板分享

文章目录 &#x1f412;个人主页&#x1f3c5;Vue项目常用组件模板仓库&#x1f4d6;前言&#xff1a;&#x1f380;源码如下&#xff1a; &#x1f412;个人主页 &#x1f3c5;Vue项目常用组件模板仓库 &#x1f4d6;前言&#xff1a; 本篇博客主要提供vue组件之表格组件模板…

16、MongonDB数据库的基本使用

1、MongonDB简介 问答什么是MongoDB一个以JSON为数据模型的文档非关系型数据库什么是非关系型数据库NoSQL&#xff0c;—种区分关系型数据库的数据存储方案&#xff0c;具有易扩展&#xff0c;大数据量&#xff0c;高性能&#xff0c;灵活数据模型&#xff0c;高可用等特点为什…

Vue面试题合集(原理深入,持续更新)

2023Vue面试题剖析原理 18.生命周期有哪些19.Vue中的diff算法原理diff概念diff比较流程 20.Vue中key的作用和原理key的概念key的作用 21.Vue.use作用和原理use概念插件的功能实现原理 22.Vue.extend方法的作用Vue.extend概念原理分析 23.Vue组件中data为什么必须是函数24.函数式…

SqlServer的基本使用

本文章主要是交给大家SqlServer的基本用法&#xff0c;因为SqlServer本身的运行机制问题&#xff0c;会让很多人觉得sql语句是不是写错了&#xff1f;这个代码有问题&#xff1f; 文章目录 选中数据库语法报错&#xff1f;执行部分代码存储过程、触发器只能创建一次sql书写建议…

如何在Linux c/c++ 进行多播(组播)编程

第一章: 前言 多播技术&#xff0c;也被称为“组播”&#xff0c;是一种网络通信机制&#xff0c;它允许一个节点&#xff08;发送者&#xff09;向一组特定的节点&#xff08;接收者&#xff09;发送信息。这种方式在网络编程中非常有用&#xff0c;因为它可以大大提高效率和…

Git、GitFlow协作 、Git commit规范、语义化版本

目录 一、概述 二、Git 2.1 安装与配置 2.2 基本指令操作 2.3 创建一个新的存储库 2.4 推送一个已有的文件夹 2.5 忽略临时文件 2.6 添加commit模板 2.7 冲突解决 二、GitFlow协作 三、Git Commit规范 四、语义化版本 为什么需要语义化版本号&#xff1f; 什么是…

线段树为什么可以开三倍空间

参考链接 四倍空间的原因如上图所示&#xff0c;但是实际操作时&#xff0c;我们可以直接开三倍空间也是可以的。 原因分析&#xff1a; 由于在分割区间时&#xff0c;我们计算mid使用下取整&#xff0c;所以左边区间大小大于等于右边区间大小&#xff0c;如果要实现上图中的树…

智能路由器开发之创建一个procd init脚本示例

智能路由器开发之创建一个procd init脚本示例 Procd init脚本默认提供了许多好用的功能&#xff0c;例如重启策略和能够从UCI系统中存储和读取配置。 设置 举个例子&#xff0c;假设我们想创建一个作为服务的Shell脚本&#xff0c;并且这个服务可以通过消息和超时时间进行配…