智能优化算法:食肉植物算法-附代码

食肉植物算法(Carnivorous Plant Algorithm, CPA)由OngKokMeng等人于2022年提出,模拟食肉植物在恶劣环境中的生存策略。算法包括初始化、分类与分组、生长(勘探阶段)和开发阶段。在生长阶段,食肉植物捕获猎物促进自身生长;开发阶段,最优解繁殖以保持优秀解决方案。此算法在解决全球优化问题中展现出潜力。
摘要由CSDN通过智能技术生成

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

1.金豺优化算法简介

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

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

2.1 初始化

在食肉植物算法中, 食肉植物种群可以用以下种群矩阵表示:
P o p = [  Individual  1 , 1  Individual  1 , 2 ⋯ ⋯  Individual  1 , d  Individual  2 , 1  Individual  ⋯ ⋯  Individual  2 , d ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮  Individual  1 , d  Individual  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)
式中: P O P P O P POP 为食肉植物的种群矩阵; N N N 为食肉植物的种群数量; d d d 为求解问题的维度。
食肉植物种群初始化数学描述如下:
 Individual  i , j = L b j + ( U b j − L b j ) ×  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+(UbjLbj)× rand (2)
式中: Individual i , j { }_{i, j} i,j 为第 i i i 个食肉植物的第 j j j 维的位置; rand 是 [ 0 , 1 ] [0,1] [0,1] 范围内的随机数; U b j U b_{j} Ubj L b j L b_{j} Lbj 分别是求解问题的第 j j j 维的上下边界。

在食肉植物算法中,求解问题的目标函数可以用来计算食肉植物的适应度值;食肉植物种群的适应度值可以用适应度值向量表示:
F i t = [ f (  Individual  1 , 1  Individual  1 , 2 ⋯ ⋯  Individual  1 , d ) f  Individual  2 , 1  Individual  … ⋯  Individual  2 , d ) ⋮ ⋯ ⋮ f (  Individual  1 , d  Individual  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,1f Individual 2,1f( Individual 1,d Individual 1,2 Individual  Individual 2,d Individual 1,d) Individual 2,d) Individual n,d) (3)
式中: Fit 为食肉植物种群的适应度值向量; f (  Individual  ) i f(\text { Individual })_{i} f( Individual )i 为第 i i i 个食肉植物的适应度值。

2.2 分类与分组

接下来,将公式(1)中每个食肉植物个体,根据其适应度值的大小,按照升序排序(考 虑最小化问题)。选择种群中前 nCPlant 个候选解作为食肉植物(CP),种群中余下的 n n n Prey 侯选解作为猎物(Prey)。适应度排序矩阵和种群总体排序矩阵可以公式(4)和(5)来描 术。
S o r t e d _ F i t = [ f C P ( 1 ) f C P ( 2 ) ⋮ f C P ( n  CPlant  ) f Prey  ( n  CPlant  + 1 ) f Prey  ( n  CPlant  + 2 ) ⋮ f Prey (nCPlant  + n p r e y ) ] (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
= [ C P 1 , 1 C P 1 , 2 ⋯ ⋯ C P 1 , d C P 2 , 1 C P 2 , 2 ⋯ ⋯ C P 2 , d ⋮ ⋮ ⋮ ⋮ ⋮ C P n C P l a n t , 1 C P n C P l a n t , 2 ⋯ ⋯ C P n C P l a n t , d  Prey  n  CPlant  + 1 , 1  Prey  n C  Plant  + 1 , 2 ⋯ ⋯  Prey  n C P l a n t + 1 , d  Prey  n  CPlant  + 2 , 1  Prey  n  CPlant  + 2 , 2 ⋯ ⋯  Prey  n C  Clant  + 2 , d ⋮ ⋮ ⋮ ⋮ ⋮  Prey  n C  Clant  + n  Prey  , 1  Prey  n C  Plant  + n  Prey  , 2 ⋯ ⋯  Prey  n C P l a n t + n  Prey  , 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,1CP2,1CPnCPlant,1 Prey n CPlant +1,1 Prey n CPlant +2,1 Prey nC Clant +n Prey ,1CP1,2CP2,2CPnCPlant,2 Prey nC Plant +1,2 Prey n CPlant +2,2 Prey nC Plant +n Prey ,2CP1,dCP2,dCPnCPlant,d Prey nCPlant+1,d Prey nC Clant +2,d Prey nCPlant+n Prey ,d (5)
分组的过程需要模拟每一个食肉植物及其猎物的环境。在分组过程中,将最优适应度值的猎物分配给排名第一的食肉植物。同样地,排名第二和第三的猎物分别分配到排名第二和第三的食肉植物。这个过程不断重复,直到排名第nCPlant的猎物分配到排名第nCPlant的食肉植物。然后,将排名第nCPlant+1的猎物分配为排名第一的食肉植物,以此类推。这种分组是至关重要的,可以减少捕食许多劣质猎物的可能性,这将有助于食肉植物的生长。

2.3 生长(勘探阶段)

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

对于每一分组,我们都会随机选择一个个体作为猎物。如果吸引率大于一个随机产生的数,猎物就会被食肉植物捕获并消化以促进生长。这种新的食肉植物的生长模型如下:
 New  C P i , j =  growth  × C P i , 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)

式中: C P i , j C P_{i, j} CPi,j 为排名第 r ˙ \dot{r} r˙ 个食肉植物的位置; P r e y v , j P r e y_{v, j} Preyv,j 为随机选择猎物的位置; growth_rate 为预先定义的值; rand 是 [ 0 , 1 ] [0,1] [0,1] 范围内的随机数; 在 CPA 算法中, 在每一分组中只有一个食 肉植物, 而猎物的数量必须超过 2 个。在大多数情况下, CPA 算法的吸引率设为 0.8 0.8 0.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)

g r o w t h = { g r o w t h _ r a t e × r a n d i , j , f ( P r e y v ) < f ( P r e y u ) 1 − g r o w t h _ r a t e × r a n d i , j , f ( P r e y v ) > f ( P r e y u ) (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)1growth_rate×randi,j,f(Preyv)>f(Preyu)(9)

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

2.4 开发阶段

食肉植物吸收猎物体内的营养物质, 并利用这些营养物质进行生长和繁殖。对于繁殖, 只有排名第一的食肉植物, 即种群中最好的解决方案, 才被允许繁殖。这是为了确保在 CPA 算法的开发阶段, 只关注最优的解决方案。可以避免对其他解决方案的非必要的利用, 从而 节省了计算成本。排名第一的食肉植物的繁殖过程建模为:
 New  C P i , j =  growth  × C P i , 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  = g r o w t h _ r a t e ×  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)

式中: C P 1 , j C P_{1, j} CP1,j 为排名第 1 的食肉植物的位置, 即最优解; C P v , j C 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
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智能算法研学社(Jack旭)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值