智能优化算法:食肉植物算法

1.金豺优化算法简介

食肉植物算法(Carnivorous plant algorithm,CPA)是2022年由Ong Kok Meng等人提出的,该算法模拟了食肉植物在恶劣环境中如何适应和生存的行为能力,如猎食昆虫作为食物和授粉以进行繁殖。

2.金豺优化算法基本原理

2.1 初始化

在食肉植物算法中, 食肉植物种群可以用以下种群矩阵表示:
Pop=[Individual 1,1Individual 1,2⋯⋯Individual 1,dIndividual 2,1Individual ⋯⋯Individual 2,d⋮⋮⋮⋮⋮⋮⋮⋮⋮⋮Individual 1,dIndividual 2,d⋯⋯Individual n,d](1)P_{o p}=\left[\begin{array}{ccccc} \text { Individual }_{1,1} & \text { Individual }{ }_{1,2} & \cdots & \cdots & \text { Individual }_{1, d} \\ \text { Individual }_{2,1} & \text { Individual } & \cdots & \cdots & \text { Individual }_{2, d} \\ \vdots & \vdots & \vdots & \vdots & \vdots \\ \vdots & \vdots & \vdots & \vdots & \vdots \\ \text { Individual }_{1, d} & \text { Individual }_{2, d} & \cdots & \cdots & \text { Individual }_{n, d} \end{array}\right] \tag{1} Pop​=⎣⎡​ Individual 1,1​ Individual 2,1​⋮⋮ Individual 1,d​​ Individual 1,2​ Individual ⋮⋮ Individual 2,d​​⋯⋯⋮⋮⋯​⋯⋯⋮⋮⋯​ Individual 1,d​ Individual 2,d​⋮⋮ Individual n,d​​⎦⎤​(1)
式中: POPP O PPOP 为食肉植物的种群矩阵; NNN 为食肉植物的种群数量; ddd 为求解问题的维度。
食肉植物种群初始化数学描述如下:
Individual i,j=Lbj+(Ubj−Lbj)×rand (2)\text { Individual }_{i, j}=L b_{j}+\left(U b_{j}-L b_{j}\right) \times \text { rand } \tag{2}  Individual i,j​=Lbj​+(Ubj​−Lbj​)× rand (2)
式中: Individual i,j{ }_{i, j}i,j​ 为第 iii 个食肉植物的第 jjj 维的位置; rand 是 [0,1][0,1][0,1] 范围内的随机数; UbjU b_{j}Ubj​ 和 LbjL b_{j}Lbj​ 分别是求解问题的第 jjj 维的上下边界。

在食肉植物算法中,求解问题的目标函数可以用来计算食肉植物的适应度值;食肉植物种群的适应度值可以用适应度值向量表示:
Fit=[f(Individual 1,1Individual 1,2⋯⋯Individual 1,d)fIndividual 2,1Individual …⋯Individual 2,d)⋮⋯⋮f(Individual 1,dIndividual 2,d⋯⋯Individual n,d)](3)F i t=\left[\begin{array}{ccccc} f\left(\text { Individual }_{1,1}\right. & \text { Individual }{ }_{1,2} & \cdots & \cdots & \text { Individual } \left._{1, d}\right) \\ f \text { Individual }_{2,1} & \text { Individual } & \ldots & \cdots & \text { Individual } \left._{2, d}\right) \\ \vdots & \cdots & & & \\ & \vdots & & & \\ f\left(\text { Individual }{ }_{1, d}\right. & \text { Individual }{ }_{2, d} & \cdots & \cdots & \text { Individual } \left._{n, d}\right) \end{array}\right] \tag{3} Fit=⎣⎡​f( Individual 1,1​f Individual 2,1​⋮f( Individual 1,d​​ Individual 1,2​ Individual ⋯⋮ Individual 2,d​​⋯…⋯​⋯⋯⋯​ Individual 1,d​) Individual 2,d​) Individual n,d​)​⎦⎤​(3)
式中: Fit 为食肉植物种群的适应度值向量; f(Individual )if(\text { Individual })_{i}f( Individual )i​ 为第 iii 个食肉植物的适应度值。

2.2 分类与分组

接下来,将公式(1)中每个食肉植物个体,根据其适应度值的大小,按照升序排序(考 虑最小化问题)。选择种群中前 nCPlant 个候选解作为食肉植物(CP),种群中余下的 nnn Prey 侯选解作为猎物(Prey)。适应度排序矩阵和种群总体排序矩阵可以公式(4)和(5)来描 术。
Sorted_Fit=[fCP(1)fCP(2)⋮fCP(nCPlant )fPrey (nCPlant +1)fPrey (nCPlant +2)⋮fPrey (nCPlant +nprey)](4){Sorted\_Fit }=\left[\begin{array}{c} f_{C P(1)} \\ f_{C P(2)} \\ \vdots \\ f_{C P(n \text { CPlant })} \\ f_{\text {Prey }(n \text { CPlant }+1)} \\ f_{\text {Prey }(n \text { CPlant }+2)} \\ \vdots \\ f_{\text {Prey (nCPlant }+n p r e y)} \end{array}\right] \tag{4} Sorted_Fit=⎣⎡​fCP(1)​fCP(2)​⋮fCP(n CPlant )​fPrey (n CPlant +1)​fPrey (n CPlant +2)​⋮fPrey (nCPlant +nprey)​​⎦⎤​(4)
Sorted_Pop
=[CP1,1CP1,2⋯⋯CP1,dCP2,1CP2,2⋯⋯CP2,d⋮⋮⋮⋮⋮CPnCPlant,1CPnCPlant,2⋯⋯CPnCPlant,dPrey nCPlant +1,1Prey nCPlant +1,2⋯⋯Prey nCPlant+1,dPrey nCPlant +2,1Prey nCPlant +2,2⋯⋯Prey nCClant +2,d⋮⋮⋮⋮⋮Prey nCClant +nPrey ,1Prey nCPlant +nPrey ,2⋯⋯Prey nCPlant+nPrey ,d](5)=\left[\begin{array}{ccccc} C P_{1,1} & C P_{1,2} & \cdots & \cdots & C P_{1, d} \\ C P_{2,1} & C P_{2,2} & \cdots & \cdots & C P_{2, d} \\ \vdots & \vdots & \vdots & \vdots & \vdots \\ C P_{n C P l a n t, 1} & C P_{n C P l a n t, 2} & \cdots & \cdots & C P_{n C P l a n t, d} \\ \text { Prey }_{n \text { CPlant }+1,1} & \text { Prey }_{n C \text { Plant }+1,2} & \cdots & \cdots & \text { Prey }_{n C P l a n t+1, d} \\ \text { Prey }_{n \text { CPlant }+2,1} & \text { Prey }_{n \text { CPlant }+2,2} & \cdots & \cdots & \text { Prey }_{n C \text { Clant }+2, d} \\ \vdots & \vdots & \vdots & \vdots & \vdots \\ \text { Prey }_{n C \text { Clant }+n \text { Prey }, 1} & \text { Prey }_{n C \text { Plant }+n \text { Prey }, 2} & \cdots & \cdots & \text { Prey }_{n C P l a n t+n \text { Prey }, d} \end{array}\right]\tag{5} =⎣⎡​CP1,1​CP2,1​⋮CPnCPlant,1​ Prey n CPlant +1,1​ Prey n CPlant +2,1​⋮ Prey nC Clant +n Prey ,1​​CP1,2​CP2,2​⋮CPnCPlant,2​ Prey nC Plant +1,2​ Prey n CPlant +2,2​⋮ Prey nC Plant +n Prey ,2​​⋯⋯⋮⋯⋯⋯⋮⋯​⋯⋯⋮⋯⋯⋯⋮⋯​CP1,d​CP2,d​⋮CPnCPlant,d​ Prey nCPlant+1,d​ Prey nC Clant +2,d​⋮ Prey nCPlant+n Prey ,d​​⎦⎤​(5)
分组的过程需要模拟每一个食肉植物及其猎物的环境。在分组过程中,将最优适应度值的猎物分配给排名第一的食肉植物。同样地,排名第二和第三的猎物分别分配到排名第二和第三的食肉植物。这个过程不断重复,直到排名第nCPlant的猎物分配到排名第nCPlant的食肉植物。然后,将排名第nCPlant+1的猎物分配为排名第一的食肉植物,以此类推。这种分组是至关重要的,可以减少捕食许多劣质猎物的可能性,这将有助于食肉植物的生长。

2.3 生长(勘探阶段)

由于土壤营养不良,食肉植物会吸引、诱捕和消化猎物以供它们生长。猎物会被食肉植物的甜味引诱到,但它们可能会间歇性地成功地逃脱食肉性植物的控制。在这里,引入一个吸引率的概念。

对于每一分组,我们都会随机选择一个个体作为猎物。如果吸引率大于一个随机产生的数,猎物就会被食肉植物捕获并消化以促进生长。这种新的食肉植物的生长模型如下:
New CPi,j=growth ×CPi,j+(1−growth )×Prey v,j(6)\text { New } C P_{i, j}=\text { growth } \times C P_{i, j}+(1-\text { growth }) \times \text { Prey }_{v, j} \tag{6}  New CPi,j​= growth ×CPi,j​+(1− growth )× Prey v,j​(6)

growth growth rate ×rand i,j(7)\begin{aligned} &\text { growth }^{\text {growth }} \text { rate } \times \text { rand }_{i, j} \end{aligned}\tag{7} ​ growth growth  rate × rand i,j​​(7)

式中: CPi,jC P_{i, j}CPi,j​ 为排名第 r˙\dot{r}r˙ 个食肉植物的位置; Preyv,jP r e y_{v, j}Preyv,j​ 为随机选择猎物的位置; growth_rate 为预先定义的值; rand 是 [0,1][0,1][0,1] 范围内的随机数; 在 CPA 算法中, 在每一分组中只有一个食 肉植物, 而猎物的数量必须超过 2 个。在大多数情况下, CPA 算法的吸引率设为 0.80.80.8 。
NewPrey  Pi,j =growth ×Prey u,j+(1−growth )×Prey v,j,u≠v(8)\text { NewPrey } \text { Pi,j }=\text { growth } \times \text { Prey }_{u, j}+\left(1-\text { growth } )\times \text { Prey }_{v, j}, \quad u \neq v\right. \tag{8}  NewPrey  Pi,j = growth × Prey u,j​+(1− growth )× Prey v,j​,u=v(8)

growth={growth_rate×randi,j,f(Preyv)<f(Preyu)1−growth_rate×randi,j,f(Preyv)>f(Preyu)(9)growth=\begin{cases} growth\_rate\times rand_{i,j},f(Prey_v)<f(Prey_u)\\ 1-growth\_rate\times rand_{i,j},f(Prey_v)>f(Prey_u) \end{cases}\tag{9} growth={growth_rate×randi,j​,f(Preyv​)<f(Preyu​)1−growth_rate×randi,j​,f(Preyv​)>f(Preyu​)​(9)

式中: Prey yu,jy_{u, j}yu,j​ 为另一个在第 im个分组中随机选择猎物的位置; 食肉植物和猎物的生长过程不断重复, 直到达到一个预定义的迭代次数, group_itep。

2.4 开发阶段

食肉植物吸收猎物体内的营养物质, 并利用这些营养物质进行生长和繁殖。对于繁殖, 只有排名第一的食肉植物, 即种群中最好的解决方案, 才被允许繁殖。这是为了确保在 CPA 算法的开发阶段, 只关注最优的解决方案。可以避免对其他解决方案的非必要的利用, 从而 节省了计算成本。排名第一的食肉植物的繁殖过程建模为:
New CPi,j=growth ×CPi,j+(1−growth )×Prey v,j(10)\text { New } C P_{i, j}=\text { growth } \times C P_{i, j}+(1-\text { growth }) \times \text { Prey }_{v, j}\tag{10}  New CPi,j​= growth ×CPi,j​+(1− growth )× Prey v,j​(10)

growth =growth_rate×rand i,j(11)\begin{aligned} \text { growth }={ growth\_rate } \times \text { rand }_{i, j} \end{aligned}\tag{11}  growth =growth_rate× rand i,j​​(11)

式中: CP1,jC P_{1, j}CP1,j​ 为排名第 1 的食肉植物的位置, 即最优解; CPv,jC P_{v, j}CPv,j​ 为随机选择猎物的食肉植物的位置; Reproduction_rate 为开发阶段预先定义的值。该过程重复 ncPrant次。在繁殖过程中, 根据第 j\mathrm{j}j 个个维度随机重新选择 v\mathrm{v}v 食肉植物。在生长过程中, 猎物是随机重新选择的, 而不管第 j\mathrm{j}j 个维度。

2.5 适应度值更新与整合

新产生的食肉植物和猎物与之前的种群结合,形成了一个具有[n+nCPlant(group_iter)+nCPlant]×d维度的新种群。更具体地说,n个个体、nCPlant(group_iter)个个体和nCPlant个个体分别是来自原始种群、生长过程和繁殖过程的个体。随后,根据新一组个体的适应度值按升序排序。然后从这一组中选择排名前n名的个体作为新的候选解。因此,这种精英选择策略确保了适合的方案被选择,并在下一代繁殖。

3.实验结果

4.参考文献

[1] Ong K M , Ong P , Sia C K . A carnivorous plant algorithm for solving global optimization problems[J]. Applied Soft Computing, 2020, 98(April):106833.

5.Matlab代码

智能优化算法:食肉植物算法-附代码相关推荐

  1. 遗传算法_粒子群算法优化支持向量机分类预测-附代码

    遗传算法/粒子群算法优化支持向量机分类预测-附代码 文章目录 遗传算法/粒子群算法优化支持向量机分类预测-附代码 1. 支持向量机简介与参数优化的原理 1.1 支持向量机SVM简介 1.2 优化参数的 ...

  2. 基于灰狼算法优化的lssvm回归预测-附代码

    基于灰狼算法优化的lssvm回归预测 - 附代码 文章目录 基于灰狼算法优化的lssvm回归预测 - 附代码 1.数据集 2.lssvm模型 3.基于灰狼算法优化的LSSVM 4.测试结果 5.Mat ...

  3. 2021最新优化算法——食肉植物算法(CPA)

    今天给大家介绍一种很有意思的新算法--食肉植物算法(CPA). 研究中提出了一种新的基于种群的元启发式算法,即肉食植物算法(CPA).CPA模拟了食肉植物如何适应恶劣环境的生存,如捕食昆虫和传粉繁殖. ...

  4. 基于麻雀搜索算法优化的支持向量机回归预测-附代码

    基于麻雀搜索算法优化的支持向量机预测及其MATLAB代码实现 文章目录 基于麻雀搜索算法优化的支持向量机预测及其MATLAB代码实现 1. 基于麻雀搜索算法优化的支持向量机预测简介 1.1 支持向量机 ...

  5. 基于强化学习的智能机器人路径规划算法研究(附代码)

    目录 一.摘要 二.路径规划技术的研究进展 1.研究现状 2.算法分类 2.1 全局路径规划算法 2.2 局部路径规划算法 三.本文采用的路径规划算法--强化学习 1. 概念 2. 与其他机器学习方式 ...

  6. python排序算法——归并排序(附代码)

    python排序算法 --归并排序 文章目录 python排序算法 --归并排序 一.前言 二.算法描述 三.代码实现 总结 一.前言 相关知识来自<python算法设计与分析>.初级排序 ...

  7. python排序算法 ——冒泡排序(附代码)

    python排序算法 --冒泡排序 文章目录 python排序算法 --冒泡排序 一.前言 二.算法描述 三.代码实现 总结 一.前言 相关知识来自<python算法设计与分析>.初级排序 ...

  8. python有效边界_Markowitz有效边界和投资组合优化基于Python(附代码)

    原标题:Markowitz有效边界和投资组合优化基于Python(附代码) 本期作者:Bernard Brenyah 本期翻译:Barry 未经授权,严禁转载 哈里马科维茨对金融和经济学的世界的贡献是 ...

  9. 智能优化算法——粒子群算法原理(附代码)

    目录 基本概念 算法实现 粒子群算法的构成要素分析 C++程序测试Sphere函数 总结 visual studio2017c++源代码 源文件下载地址 基本概念 粒子群优化算法(particle s ...

  10. 群智能优化之果蝇算法

    是的,今天要说的就是果蝇算法,"果蝇"就是你理解的那个果蝇,这是在2011年由Wen-Tsao Pan提出的有一种新型的群体智能优化算法. 1,引言: 演化式计算是一种共享名词,系 ...

最新文章

  1. [NOIP2001]Car的旅行路线
  2. BZOJ 4388 [JOI2012春季合宿]Invitation (线段树、二叉堆、最小生成树)
  3. 多边形之间相交求交点的算法_路径规划算法总结
  4. spring源码分析2本最高清带书目PDF百度网盘分享
  5. php轻博客社区视频教程,轻博客主题 - SEO极致优化的ZBLOG轻博客主题
  6. grep匹配上下几行的方法
  7. 工信部:1-2月我国出口手机1.6亿台 同比增加32.6%
  8. 前端 鼠标一次移动半个像素_小猿圈分享2019年前端JavaScript面试题(三)
  9. Jenkins创建新任务
  10. android菜单对话框文字,Android 对话框、信息提示和菜单
  11. Ti的C28x系列的DSP(28069)使用经验,SCI与RS485(ADM2587EBRWZ)
  12. CO-PA: 获利能力分析数据的传送(月末业务)
  13. unity+vuforia无法识别图片的解决方法
  14. 软件企业研发人员激励机制研究
  15. 读书心得:一个程序员的自我反思
  16. RecyclerView报错:Scrapped or attached views may not be recycled
  17. 推荐几款主流好用的远程终端连接管理软件
  18. abp更改为mysql_ABPZero系列教程之拼多多卖家工具 更改数据库为MySQL数据库
  19. 【引语练习题】Ask questions politely
  20. 盐城北大青鸟十二月十日小报

热门文章

  1. 【报告分享】 嘀嗒出行:2014-2020中国顺风车行业发展蓝皮书(附下载)
  2. word中做电子签名
  3. Python 读写文件时报错 ValueError: must have exactly one of create/read/write/append mode
  4. 微信平台开发学习笔记二(翻译功能的实现)
  5. 启航!2023 Amazon DeepRacer 自动驾驶赛车中国联赛战燃擎开启!
  6. 2022年蓝队初级护网总结
  7. 【计算机视觉处理4】色彩空间转换
  8. CAD的格式转换和批量打印技巧
  9. SQL系列五——子查询(SELECT)和组合查询(UNION)
  10. 玩机搞机----root面具的安装 更新 隐藏root 德尔塔面具等等综合解析