鹦鹉优化算法原理及代码实现

2024-05-11 08:52

本文主要是介绍鹦鹉优化算法原理及代码实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

鹦鹉(Pyrrhura Molinae)表现出四种不同的行为特征:觅食、停留、交流和对陌生人的恐惧。这些行为(如图1所示)在现实环境中构成了我们设计PO动机的基础。

640?wx_fmt=png&from=appmsg&tp=wxpic&wxfrom=5&wx_lazy=1&wx_co=1

觅食:驯化的鹦鹉(Pyrrhura Molinae)的觅食行为令人着迷,因为个体选择在食物丰富的小群体中觅食。它们可以利用主人的位置和群体的存在,朝着食物走去。它们利用嗅觉和视觉提示来加强搜索。

停留:停留的行为包括皮茹拉在主人身体的不同部位随机栖息。

交流:这些群居鸟类发出独特的叫声,在群体中进行交流,既用于社会互动,也用于信息传播。

对陌生人的恐惧:对陌生人的天然恐惧是鸟类的共同特征,这促使鹦鹉离开不熟悉的个体,向它们的主人寻求保护。

重要的是,鹦鹉行为的不可预测性强调了我们设计的动机,因为这四种行为在驯化群的每次迭代中随机发生在每个个体身上。

一、种群初始化

考虑种群规模为N,最大迭代次数为Max_iter,搜索空间限制为lb(下界)和ub(上界),所提PO的初始化公式如下:

640?wx_fmt=png&from=appmsg&tp=wxpic&wxfrom=5&wx_lazy=1&wx_co=1

式中,rand(0,1)表示[0,1]范围内的随机数,X_i^0表示第i个鹦鹉在初始阶段的位置。

二、觅食行为

在觅食行为中,它们主要通过观察食物的位置或考虑主人的位置来估计食物的大致位置,然后向各自的位置飞去。因此,位置运动遵循如下公式:

640?wx_fmt=png&from=appmsg&tp=wxpic&wxfrom=5&wx_lazy=1&wx_co=1

在式(2)中,X_i^t表示当前位置,X_i^(t+1)表示后续更新的位置。X_mean^t表示当前种群内的平均位置,Levy(D)表示Levy分布,用于描述鹦鹉的飞行情况。X_best表示从初始化到当前搜索到的最佳位置,它也表示主人的当前位置。T表示当前迭代次数。(X_i^t- x_best)⋅Levy(dim)表示根据自己相对于主人的位置进行移动,rand(0,1)⋅(1-t/(Max_iter)) ^(2t/(Max_iter))⋅X_mean^t表示观察整个种群的位置,以进一步确定食物的方向。该过程如下图所示。

640?wx_fmt=png&from=appmsg&tp=wxpic&wxfrom=5&wx_lazy=1&wx_co=1

当前种群的平均位置用X_mean^t表示,使用下列公式表示:

表示:

640?wx_fmt=png&from=appmsg&tp=wxpic&wxfrom=5&wx_lazy=1&wx_co=1

根据下列公式中的规则可以得到Levy分布,其中γ赋值为1.5:

640?wx_fmt=png&from=appmsg&tp=wxpic&wxfrom=5&wx_lazy=1&wx_co=1

 

三、停留行为

鹦鹉(Pyrrhura Molinae)是一种高度社会化的生物,它的停留行为主要包括突然飞到主人身体的任何部位,在那里静止一段时间。该过程如图3所示。这个过程可以表示为:

640?wx_fmt=png&from=appmsg&tp=wxpic&wxfrom=5&wx_lazy=1&wx_co=1

式中ones(1,dim)表示维度dim的全1向量,X_best⋅Levy(dim)表示飞往宿主的过程,rand(0,1)⋅ones(1,dim)表示随机停在宿主身体某个部位的过程。

640?wx_fmt=png&from=appmsg&tp=wxpic&wxfrom=5&wx_lazy=1&wx_co=1

四、交流行为

鹦鹉是天生的社会性动物,其特点是群体内的密切交流。这种沟通行为包括飞向鸟群和不飞向鸟群的沟通。在PO中,假设这两种行为发生的概率相等,并使用当前种群的平均位置来象征群体的中心。该过程如下图所示。这个过程可以表示为:

640?wx_fmt=png&from=appmsg&tp=wxpic&wxfrom=5&wx_lazy=1&wx_co=1640?wx_fmt=png&from=appmsg&tp=wxpic&wxfrom=5&wx_lazy=1&wx_co=1

式中,0.2⋅rand(0,1)⋅(1-t/(Max_iter))⋅(X_i^t- x_mean ^t)表示个体加入鹦鹉群体进行交流的过程,0.2⋅rand(0,1)⋅exp (-t/(rand(0,1)⋅Max_iter))表示个体在交流后立即飞出的过程。这两种行为都是可行的,因此,使用在[0,1]范围内随机生成的P来实现。

五、对陌生人的恐惧行为

一般来说,鸟类对陌生人表现出天然的恐惧,鹦鹉也不例外。它们与不熟悉的个体保持距离,与主人一起寻找安全环境的行为可以用以下公式和图表示:

640?wx_fmt=png&from=appmsg&tp=wxpic&wxfrom=5&wx_lazy=1&wx_co=1

其中rand(0,1)⋅cos (0.5π·t/(Max_iter))⋅(X_best-X_i^t)表示重新定向飞向所有者的过程,cos (rand(0,1)⋅π)⋅(t/(Max_iter)) ^(2/(Max_iter))⋅(X_i^t- x_best)表示远离陌生人的过程。

 

640?wx_fmt=png&from=appmsg&tp=wxpic&wxfrom=5&wx_lazy=1&wx_co=1

算法流程图和伪代码

Algorithm1:Pseudo-codeofthePOalgorithm

1:InitializethePOparameters

2: Initialize the solutions'positions randomly

3:Fori  =1:Max_iterdo

4:       Calculatethefitnessfunction

5:       Find  thebestpositionandworstposition

6:       Forj  =1:Ndo

7:       St = randi([1, 4])

8:             Behavior 1: The foraging behavior

9:             IfSt==1Then

10:                  UpdatepositionbyEq.(2)

11:           Behavior 2: The staying behavior

12:           ElseifSt==2Then

13:                  UpdatepositionbyEq.(5)

14:           Behavior 3: The communicating  behavior

15:           ElseifSt==3Then

16:                  UpdatepositionbyEq.(6)

16:        Behavior 4: The fear of strangers’  behavior

17:         ElseifSt==4Then

18:                  UpdatepositionbyEq.(7)

19:           End

20:      End

21:      Return  thebestsolution

22:End

 

228c555b2c014189b4358ec3f8dcbf85.png

 

这篇关于鹦鹉优化算法原理及代码实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/979069

相关文章

使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

《使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)》在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析... 目录1. 背景介绍1.1 jsON简介1.2 实际案例2. 准备工作2.1 环境搭建2.1.1 添加

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五

java如何分布式锁实现和选型

《java如何分布式锁实现和选型》文章介绍了分布式锁的重要性以及在分布式系统中常见的问题和需求,它详细阐述了如何使用分布式锁来确保数据的一致性和系统的高可用性,文章还提供了基于数据库、Redis和Zo... 目录引言:分布式锁的重要性与分布式系统中的常见问题和需求分布式锁的重要性分布式系统中常见的问题和需求

SpringBoot基于MyBatis-Plus实现Lambda Query查询的示例代码

《SpringBoot基于MyBatis-Plus实现LambdaQuery查询的示例代码》MyBatis-Plus是MyBatis的增强工具,简化了数据库操作,并提高了开发效率,它提供了多种查询方... 目录引言基础环境配置依赖配置(Maven)application.yml 配置表结构设计demo_st

python使用watchdog实现文件资源监控

《python使用watchdog实现文件资源监控》watchdog支持跨平台文件资源监控,可以检测指定文件夹下文件及文件夹变动,下面我们来看看Python如何使用watchdog实现文件资源监控吧... python文件监控库watchdogs简介随着Python在各种应用领域中的广泛使用,其生态环境也

el-select下拉选择缓存的实现

《el-select下拉选择缓存的实现》本文主要介绍了在使用el-select实现下拉选择缓存时遇到的问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录项目场景:问题描述解决方案:项目场景:从左侧列表中选取字段填入右侧下拉多选框,用户可以对右侧

SpringCloud集成AlloyDB的示例代码

《SpringCloud集成AlloyDB的示例代码》AlloyDB是GoogleCloud提供的一种高度可扩展、强性能的关系型数据库服务,它兼容PostgreSQL,并提供了更快的查询性能... 目录1.AlloyDBjavascript是什么?AlloyDB 的工作原理2.搭建测试环境3.代码工程1.

Java调用Python代码的几种方法小结

《Java调用Python代码的几种方法小结》Python语言有丰富的系统管理、数据处理、统计类软件包,因此从java应用中调用Python代码的需求很常见、实用,本文介绍几种方法从java调用Pyt... 目录引言Java core使用ProcessBuilder使用Java脚本引擎总结引言python

Java中ArrayList的8种浅拷贝方式示例代码

《Java中ArrayList的8种浅拷贝方式示例代码》:本文主要介绍Java中ArrayList的8种浅拷贝方式的相关资料,讲解了Java中ArrayList的浅拷贝概念,并详细分享了八种实现浅... 目录引言什么是浅拷贝?ArrayList 浅拷贝的重要性方法一:使用构造函数方法二:使用 addAll(

Python pyinstaller实现图形化打包工具

《Pythonpyinstaller实现图形化打包工具》:本文主要介绍一个使用PythonPYQT5制作的关于pyinstaller打包工具,代替传统的cmd黑窗口模式打包页面,实现更快捷方便的... 目录1.简介2.运行效果3.相关源码1.简介一个使用python PYQT5制作的关于pyinstall