2024.04最新 鹦鹉优化算法 (PO) 开源MATLAB代码

!!!只需要代码的直接跳转到最后一节,有开源代码

    • 1.算法简介
    • 2.灵感来源与核心思想
      • 2.1 灵感来源
      • 2.2 核心思想
    • 3.主要步骤
      • 3.1 种群初始化
      • 3.2 觅食行为
      • 3.3 停留行为
      • 3.4 交流行为
      • 3.5 对陌生人的恐惧行为
    • 4.伪代码与核心代码
      • 4.1流程图与伪代码
        • 流程图
        • 伪代码
      • 4.2 核心代码(PO函数)
    • 核心代码(免费自取)

1.算法简介

引用自:Lian J, Hui G, Ma L, et al. Parrot optimizer: Algorithm and applications to medical problems[J]. Computers in Biology and Medicine, 2024, 172: 108064.
鹦鹉优化器(PO)是一种受自然界中鹦鹉行为启发的新型元启发式优化算法。这一算法的设计灵感源自于鹦鹉的社交行为、觅食策略以及它们对环境的适应能力。PO算法通过模拟鹦鹉在自然环境中的行为模式,如搜索食物、群体协作和社会学习,来解决复杂的优化问题。
在这里插入图片描述

2.灵感来源与核心思想

2.1 灵感来源

在这里插入图片描述
Pyrrhura Molinae是一种备受喜爱的鹦鹉品种,因其迷人的外观、与主人的亲密关系以及易于训练的特点,成为宠物主人的热门选择。以往的研究与繁殖努力揭示了Pyrrhura Molinae展现出的四种独特行为特质:觅食、停留、交流及对陌生人的恐惧[。这些行为,在现实情境中生动展现如上图所示,构成了我们设计鹦鹉优化器(PO)的灵感来源。

  • 觅食行为:家养的Pyrrhura Molinae的觅食行为令人着迷,它们倾向于成小群活动,寻找食物丰饶之地[54]。它们通过朝向食物的方向移动,利用主人的位置和群体的存在进行搜索。视觉提示和嗅觉帮助它们提高搜索效率。
  • 停留行为:停留行为指的是Pyrrhura Molinae随机栖息在主人身体的不同部位。
  • 交流行为:这些善于社交的鸟类会发出独特的叫声,在群体内进行沟通,既促进了社交互动,也传播了信息。
  • 对陌生人的恐惧:如同多数鸟类,Pyrrhura Molinae天生对陌生人感到恐惧,这促使它们远离不熟悉的人,寻求主人的庇护以求安全。

2.2 核心思想

  • 探索:类似于鹦鹉寻找新食物来源,算法在解空间中随机探索,寻找潜在的优质解。
  • 开发:一旦发现了好的解,算法就像鹦鹉聚集在丰富食物源一样,集中资源进一步细化和优化这些解。
  • 社会学习:算法中的个体(即搜索代理)通过观察和模仿群体中表现优异的同伴,学习更好的解。
  • 恐惧反应:引入了对陌生环境或潜在威胁的反应,这有助于算法跳出局部最优,避免过早收敛。
  • 通信:模仿鹦鹉间的通信,算法促进个体间的信息交换,提高搜索效率。

3.主要步骤

3.1 种群初始化

对于提议的PO算法,考虑到群体规模 N N N、最大迭代次数 M a x i t e r Maxiter Maxiter 以及搜索空间的界限 l b lb lb(下界)和 u b ub ub(上界),初始化公式可以表示为:

X i 0 = l b + r a n d ( 0 , 1 ) ⋅ ( u b − l b ) (1) X^0_i = lb + rand(0, 1) \cdot (ub - lb) \tag{1} Xi0=lb+rand(0,1)(ublb)(1)

其中, r a n d ( 0 , 1 ) rand(0, 1) rand(0,1) 表示范围在 [0, 1] 之间的随机数,而 X i 0 X^0_i Xi0 代表初始阶段第 i i i 只 Pyrrhura Molinae 的位置。

3.2 觅食行为

在 PO 的觅食行为中,鹦鹉主要通过观察食物位置或参照主人位置来估计食物的大致位置,然后飞向相应地点。因此,位置移动遵循以下方程:

X i t + 1 = ( X i t − X b e s t ) ⋅ L e v y ( d i m ) + r a n d ( 0 , 1 ) ⋅ ( 1 − t M a x i t e r ) 2 t M a x i t e r ⋅ X m e a n t (2) X^{t+1}_i = (X^t_i - X_{best}) \cdot Levy(dim) + rand(0, 1) \cdot \left(1 - \frac{t}{Maxiter}\right)^{\frac{2t}{Maxiter}} \cdot X^t_{mean} \tag{2} Xit+1=(XitXbest)Levy(dim)+rand(0,1)(1Maxitert)Maxiter2tXmeant(2)

在上述方程中, X i t X^t_i Xit 表示当前位置,而 X i t + 1 X^{t+1}_i Xit+1 意味着更新后的下一个位置。 X m e a n t X^t_{mean} Xmeant 表示当前群体中的平均位置, L e v y ( D ) Levy(D) Levy(D) 表示莱维分布,用于描述鹦鹉的飞行。 X b e s t X_{best} Xbest 表示从初始化到当前搜索到的最佳位置,同时也代表了主人的当前位置。 t t t 表示当前迭代次数。 ( X i t − X b e s t ) ⋅ L e v y ( d i m ) (X^t_i - X_{best}) \cdot Levy(dim) (XitXbest)Levy(dim) 表示基于与主人相对位置的移动,而 r a n d ( 0 , 1 ) ⋅ ( 1 − t M a x i t e r ) 2 t M a x i t e r ⋅ X m e a n t rand(0, 1) \cdot \left(1 - \frac{t}{Maxiter}\right)^{\frac{2t}{Maxiter}} \cdot X^t_{mean} rand(0,1)(1Maxitert)Maxiter2tXmeant 表示观察群体整体位置以进一步锁定食物方向。这一过程在图2中展示。

当前群体的平均位置 X m e a n t X^t_{mean} Xmeant,使用如下公式计算:

X m e a n t = 1 N ∑ k = 1 N X k t (3) X^t_{mean} = \frac{1}{N} \sum^{N}_{k=1} X^t_k \tag{3} Xmeant=N1k=1NXkt(3)

莱维分布可以通过遵循公式 (4) 的规则获得,其中 γ \gamma γ 赋值为 1.5:

L e v y ( d i m ) = { μ ⋅ σ ⋅ ∣ v ∣ − 1 γ μ ∼ N ( 0 , d i m ) v ∼ N ( 0 , d i m ) σ = ( Γ ( 1 + γ ) ⋅ sin ⁡ ( π γ 2 ) Γ ( 1 + γ 2 ) ⋅ γ ⋅ 2 1 + γ 2 ) 1 γ + 1 (4) Levy(dim) = \begin{cases} \mu \cdot \sigma \cdot |v|^{\frac{-1}{\gamma}} \\ \mu \sim N(0, dim) \\ v \sim N(0, dim) \\ \sigma = \left(\frac{\Gamma(1+\gamma) \cdot \sin\left(\frac{\pi \gamma}{2}\right)}{\Gamma\left(\frac{1+\gamma}{2}\right) \cdot \gamma \cdot 2^{\frac{1+\gamma}{2}}}\right)^{\frac{1}{\gamma+1}} \end{cases} \tag{4} Levy(dim)= μσvγ1μN(0,dim)vN(0,dim)σ=(Γ(21+γ)γ221+γΓ(1+γ)sin(2πγ))γ+11(4)

3.3 停留行为

Pyrrhura Molinae 是一种高度社交的生物,其停留行为主要涉及突然飞向主人身体的任意部位,并在那里停留一段时间。这一过程在图3中展示。这一过程可以表示为:

X i t + 1 = X i t + X b e s t ⋅ L e v y ( d i m ) + r a n d ( 0 , 1 ) ⋅ o n e s ( 1 , d i m ) (5) X^{t+1}_i = X^t_i + X_{best} \cdot Levy(dim) + rand(0, 1) \cdot ones(1, dim) \tag{5} Xit+1=Xit+XbestLevy(dim)+rand(0,1)ones(1,dim)(5)

其中, o n e s ( 1 , d i m ) ones(1, dim) ones(1,dim) 表示维度为 d i m dim dim 的全1向量。 ( X b e s t ⋅ L e v y ( d i m ) ) (X_{best} \cdot Levy(dim)) (XbestLevy(dim)) 表示飞向主人的过程,而 r a n d ( 0 , 1 ) ⋅ o n e s ( 1 , d i m ) rand(0, 1) \cdot ones(1, dim) rand(0,1)ones(1,dim) 表示随机停留在主人身体的一部分。

3.4 交流行为

Pyrrhura Molinae 鹦鹉本质上是群居动物,其特征是在群体内部密切交流。这种交流行为包括飞向群体并与之交流,以及不飞向群体而进行交流。在 PO 算法中,假设这两种行为发生的概率相等,当前群体的平均位置被用来象征群体的中心。这一过程在图4中展示。

3.5 对陌生人的恐惧行为

通常而言,鸟类对陌生人表现出天然的恐惧感,Pyrrhura Molinae 鹦鹉也不例外。它们远离不熟悉的个体,并寻求主人的安全,寻找安全环境的行为在图5中展示,具体描述如下:

X i t + 1 = X i t + r a n d ( 0 , 1 ) ⋅ cos ⁡ ( 0.5 π ⋅ t M a x i t e r ) ⋅ ( X b e s t − X i t ) − cos ⁡ ( r a n d ( 0 , 1 ) ⋅ π ) ⋅ ( t M a x i t e r ) 2 M a x i t e r ⋅ ( X i t − X b e s t ) (6) X^{t+1}_i = X^t_i + rand(0, 1) \cdot \cos\left(\frac{0.5\pi \cdot t}{Maxiter}\right) \cdot (X_{best} - X^t_i) - \cos(rand(0, 1) \cdot \pi) \cdot \left(\frac{t}{Maxiter}\right)^{\frac{2}{Maxiter}} \cdot (X^t_i - X_{best}) \tag{6} Xit+1=Xit+rand(0,1)cos(Maxiter0.5πt)(XbestXit)cos(rand(0,1)π)(Maxitert)Maxiter2(XitXbest)(6)

其中, r a n d ( 0 , 1 ) ⋅ cos ⁡ ( 0.5 π ⋅ t M a x i t e r ) ⋅ ( X b e s t − X i t ) rand(0, 1) \cdot \cos\left(\frac{0.5\pi \cdot t}{Maxiter}\right) \cdot (X_{best} - X^t_i) rand(0,1)cos(Maxiter0.5πt)(XbestXit) 显示了重新定向飞向主人的过程,而 cos ⁡ ( r a n d ( 0 , 1 ) ⋅ π ) ⋅ ( t M a x i t e r ) 2 M a x i t e r ⋅ ( X i t − X b e s t ) \cos(rand(0, 1) \cdot \pi) \cdot \left(\frac{t}{Maxiter}\right)^{\frac{2}{Maxiter}} \cdot (X^t_i - X_{best}) cos(rand(0,1)π)(Maxitert)Maxiter2(XitXbest) 显示了远离陌生人的移动过程。

4.伪代码与核心代码

4.1流程图与伪代码

流程图

在这里插入图片描述

伪代码
1. 初始化PO参数  
2. 随机初始化解决方案的位置  
3. 对于 i = 1:Max_iter 执行以下操作  - 计算适应度函数  - 查找最佳位置  - 对于 j = 1:N 执行以下操作  - 行为1:觅食行为  如果 St == 1 则  根据式(2)更新位置  - 行为2:停留行为  否则,如果 St == 2 则  根据式(5)更新位置  - 行为3:交流行为  否则,如果 St == 3 则  根据式(6)更新位置  - 行为4:陌生人恐惧行为  否则,如果 St == 4 则  根据式(7)更新位置  - 结束  
4. 返回最佳解决方案  
5. 结束

4.2 核心代码(PO函数)

function [Score, Best_pos, CPO_curve] = PO(Search_Agents, Max_iterations, Lowerbound, Upperbound, dimensions, objective)% 如果上下界是标量,则转换为向量
if (max(size(Upperbound)) == 1)Upperbound = Upperbound .* ones(1, dimensions);Lowerbound = Lowerbound .* ones(1, dimensions);
end%% 初始化
X0 = initialization(Search_Agents, dimensions, Upperbound, Lowerbound); % 初始化种群
X = X0;% 计算初始适应度值
fitness = zeros(1, Search_Agents);
for i = 1:Search_Agentsfitness(i) = objective(X(i, :));
end
[fitness, index] = sort(fitness); % 排序
GBestF = fitness(1); % 全局最佳适应度值
AveF = mean(fitness); % 平均适应度值
for i = 1:Search_AgentsX(i, :) = X0(index(i), :);
end
CPO_curve = zeros(1, Max_iterations); % 收敛曲线
GBestX = X(1, :); % 全局最佳位置
X_new = X;%% 开始搜索
for i = 1:Max_iterationsif mod(i,100) == 0display(['迭代次数 ', num2str(i), ' 当前最佳适应度值 ', num2str(CPO_curve(max(1,i-1)))]);endalpha = rand(1) / 5;sita = rand(1) * pi;for j = 1:Search_AgentsSt = randi([1, 4]);% 觅食行为if St == 1X_new(j, :) = (X(j, :) - GBestX) .* Levy(dimensions) + rand(1) * mean(X) * (1 - i / Max_iterations) ^ (2 * i / Max_iterations);% 停留行为elseif St == 2X_new(j, :) = X(j, :) + GBestX .* Levy(dimensions) + randn() * (1 - i / Max_iterations) * ones(1, dimensions);% 交流行为elseif St == 3H = rand(1);if H < 0.5X_new(j, :) = X(j, :) + alpha * (1 - i / Max_iterations) * (X(j, :) - mean(X));elseX_new(j, :) = X(j, :) + alpha * (1 - i / Max_iterations) * exp(-j / (rand(1) * Max_iterations));end% 恐惧陌生人行为elseX_new(j, :) = X(j, :) + rand() * cos((pi *i )/ (2 * Max_iterations)) * (GBestX - X(j, :)) - cos(sita) * (i / Max_iterations) ^ (2 / Max_iterations) * (X(j, :) - GBestX);end% 边界控制Flag4ub = X_new(j,:) > Upperbound;Flag4lb = X_new(j,:) < Lowerbound;X_new(j,:) = (X_new(j,:).*(~(Flag4ub+Flag4lb))) + Upperbound.*Flag4ub + Lowerbound.*Flag4lb;% 更新最佳位置fitness_new(j) = objective(X_new(j, :));if fitness_new(j) < GBestFGBestF = fitness_new(j);GBestX = X_new(j, :);endend% 更新位置X = X_new;fitness = fitness_new;CPO_curve(i) = GBestF;Best_pos = GBestX;Score = CPO_curve(end);
end%% Levy搜索策略
function o = Levy(d)beta = 1.5;sigma = (gamma(1 + beta) *sin(pi * beta / 2) / (gamma((1 + beta) / 2) * beta * 2^((beta - 1) / 2)))^(1 / beta);u = randn(1, d) * sigma;v = randn(1, d);step = u ./ abs(v).^(1 / beta);o = step;
end   end

核心代码(免费自取)

链接:https://pan.baidu.com/s/1tTpL0OOk-wWyGVS34J31ew
提取码:9999

本篇文章不靠卖代码赚取收益,麻烦给个点赞和关注,后续还会有开源的免费优化算法及其代码,栓Q!同时如果大家有想要的算法可以在评论区打出,如果有空的话我可以帮忙复现

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

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

相关文章

nodejs下载+react安装

一、nodejs安装 1、nodejs下载 具体安装可参考连接&#xff1a;2023最新版Node.js下载安装及环境配置教程&#xff08;非常详细&#xff09;从零基础入门到精通&#xff0c;看完这一篇就够了_nodejs安装及环境配置-CSDN博客 下载地址&#xff1a;Node.js — 下载 Node.js 测…

ubuntu 更新源

前言 实现一键替换在线源 一键更新源 ubuntu 全球镜像站以下支持现有ubuntu 20&#xff0c;22&#xff0c;24 echo "Delete the default source" rm -rf /etc/apt/sources.listecho "Build a new source" cat <<EOF>>/etc/apt/sources.li…

微信小程序 button样式设置为图片的方法

微信小程序 button样式设置为图片的方法 background-image background-size与background-repeat与border:none;是button必须的 <view style" position: relative;"><button class"customer-service-btn" style"background-image: url(./st…

MVC架构在Web开发中的实现

MVC架构在Web开发中的实现 1、MVC架构概述2、MVC架构的实现 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Web开发领域&#xff0c;MVC&#xff08;Model-View-Controller&#xff09;架构模式是一种广泛使用的软件设计模式&#xff0c…

【学习笔记】虚幻SkeletalMesh学习(一)基础介绍

文章目录 零、前言一、资源介绍1.1 骨架资源1.2 骨架网格体资源 二、UE4中的定义2.1 骨骼数据2.2 模型网格数据 三、渲染3.1 RenderData的初始化3.2 渲染对象的创建3.3 渲染对象的更新3.3.1 游戏线程的更新&#xff08;*FSkeletalMeshObjectGPUSkin::Update*&#xff09;3.3.2 …

Android11 framework 禁止三方应用开机自启动

Android11应用自启动限制 大纲 Android11应用自启动限制分析验证猜想&#xff1a;Android11 AOSP是否自带禁止三方应用监听BOOT_COMPLETED​方案禁止执行非系统应用监听到BOOT_COMPLETED​后的代码逻辑在执行启动时判断其启动的广播接收器一棍子打死方案&#xff08;慎用&#…

矩阵形式的bezier曲线

本文分享一段矩阵形式的bezier代码&#xff1a; clc clear% 控制点 P [25;10;5;13]; %% 获得M矩阵 n length(P) - 1; M zeros(n1,n1); for i 1:n1for j 1:n1if(ij<n3)M(i,j) (-1)^(n -i-j2)*nchoosek(n,n-i1)*nchoosek(n-i1,j-1);elseM(i,j) 0;endend end t_temp l…

buu做题(5)

目录 [GXYCTF2019]禁止套娃 方法一: 方法二: [NCTF2019]Fake XML cookbook [GXYCTF2019]禁止套娃 页面里啥也没有 使用dirsearch 扫一下目录 发现有 git 使用工具githack拉取源码 <?php include "flag.php"; echo "flag在哪里呢&#xff1f;<br&g…

PostgreSQL使用(三)

说明&#xff1a;本文介绍PostgreSQL的数据类型和运算符&#xff1b; 数据类型 常用的数据类型如下&#xff1a; 运算符 如下&#xff1a; 运算符的优先级如下&#xff1a; 不需要强记硬背&#xff0c;只需要记住括号可以提高运算符的优先级即可&#xff1b; 总结 本文介绍…

【JavaEE进阶】——Spring AOP

目录 &#x1f6a9;Spring AOP概述 &#x1f6a9;Spring AOP快速⼊⻔ &#x1f393;引入AOP依赖 &#x1f393;编写AOP程序 &#x1f6a9;Spring AOP 详解 &#x1f393;Spring AOP核⼼概念 &#x1f393;通知类型 &#x1f393;PointCut &#x1f393;切⾯优先级 Ord…

【JavaScript 算法】拓扑排序:有向无环图的应用

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、算法原理二、算法实现方法一&#xff1a;Kahn算法方法二&#xff1a;深度优先搜索&#xff08;DFS&#xff09;注释说明&#xff1a; 三、应用场景四、总结 拓扑排序&#xff08;Topological Sorting&#xff09;是一种…

核函数支持向量机(Kernel SVM)

核函数支持向量机&#xff08;Kernel SVM&#xff09;是一种非常强大的分类器&#xff0c;能够在非线性数据集上实现良好的分类效果。以下是关于核函数支持向量机的详细数学模型理论知识推导、实施步骤与参数解读&#xff0c;以及两个多维数据实例&#xff08;一个未优化模型&a…

笔记 3 : 继续彭老师课本第 3 章的 arm 的汇编指令

&#xff08;26&#xff09; 指令 LDR &#xff1a; &#xff08;27&#xff09; STR &#xff1a; 可见&#xff0c;从语法上将&#xff0c; &#xff01; 提示编译器进行更复杂的编译&#xff0c;对应内涵更复杂的指令。 &#xff08;28&#xff09; LDR 与 STR 指令还可…

Android C++系列:Linux信号(三)

可重入函数 不含全局变量和静态变量是可重入函数的一个要素可重入函数见man 7 signal在信号捕捉函数里应使用可重入函数在信号捕捉函数里禁止调用不可重入函数例如:strtok就是一个不可重入函数,因为strtok内部维护了一个内部静态指针,保存上一 次切割到的位置,如果信号的捕捉…

echarts实现3d柱状效果

代码如下&#xff0c;单个的调第一个方法&#xff0c;多个柱状的调第二个方法&#xff0c;具体情况修改参数或者二次开发即可 //3d柱状图 export function getEcharts3DBar (xAxisData:string[][name1,name2,name3], data:number[][1,2,3], colorObj:IBaseObject{topStartColo…

通过albumentation对目标检测进行数据增强(简单直接)

albumentation官方文档看不懂&#xff1f;xml文件不知道如何操作&#xff1f;下面只需要修改部分代码即可上手使用 要使用这个方法之前需要按照albumentation这个库还有一些辅助库,自己看着来安装就行 pip install albumentation pip install opencv-python pip install json…

MKS流量计软件MFC通讯驱动使用于C和P系列MFC控制USB接口W10系统

MKS流量计软件MFC通讯驱动使用于C和P系列MFC控制USB接口W10系统

使用VuePress-Reco快速搭建博客(保姆级)

简介&#xff1a;VuePress-Reco 一款简洁的 vuepress 博客 & 文档 主题&#xff0c;可以自由搭建自己的风格&#xff0c;比较方便简洁。 链接&#xff1a;vuepress-reco 准备环境&#xff1a; Node.Js >20.5.0&#xff0c;Npm > 10.8.2 OR Yarn > 1.22.19 注&am…

Kafka介绍及Go操作kafka详解

文章目录 Kafka介绍及Go操作kafka详解项目背景解决方案面临的问题业界方案ELKELK方案的问题日志收集系统架构设计架构设计组件介绍将学到的技能消息队列的通信模型点对点模式 queue发布/订阅 topicKafka介绍Kafka的架构图工作流程选择partition的原则ACK应答机制Topic和数据日志…

0718,TCP协议,三次握手,四次挥手

目录 上课喵&#xff1a; TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;的状态迁移图 TCP连接的状态迁移图 状态迁移说明&#xff1a; 注意&#xff1a; big_htonl.c 字节序转换 addr.c IP地址的转换 作业喵&#xff1a; …