600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > MPA海洋捕食者算法学习笔记

MPA海洋捕食者算法学习笔记

时间:2020-02-12 07:17:29

相关推荐

MPA海洋捕食者算法学习笔记

mpa算法是提出来的新型群体智能算法,原文Marine Predators Algorithm: A nature-inspired metaheuristic的doi:/10.1016/j.eswa..113377,直接搜索sci hub输入DOI编号即可下载阅读阅文。

MPA算法流程如图

图1 MPA算法流程图

通过阅读文献和代码,对整体流程用自己的话解读一遍,初学若有错误,请及时提出,万分感谢!

首先所有的优化算法,都有共同的第一步,那就是种群初始化。

其中Xmin和Xmax是上边界与下边界,rand生成(0,1)范围内的随机数。

种群初始化matlab代码

function Positions=initialization(SearchAgents_no,dim,ub,lb)Boundary_no= size(ub,2); % numnber of boundaries size(a,2)返回矩阵a的列数% If the boundaries of all variables are equal and user enter a signle% number for both ub and lbif Boundary_no==1Positions=rand(SearchAgents_no,dim).*(ub-lb)+lb;end% If each variable has a different lb and ubif Boundary_no>1for i=1:dimub_i=ub(i);lb_i=lb(i);Positions(:,i)=rand(SearchAgents_no,1).*(ub_i-lb_i)+lb_i;endend

上面展示的代码为种群初始化代码,问题1,size函数返回数组A的行数和列数,但是我在分步运行的时候,遇到以下问题。

那么,初始种群的结果是生成(SearchAgents_no,dim)矩阵,结果如下:

图2初始种群

图2显示的结构与原文中的结构一样,但是出现问题2:根据猎物的位置在二维坐标系的分布来看,其位置是有x和y同时决定的,那么比如第一行第一列的这个数据怎么能表示其位置呢?根据Xi,j的物理意义来看,其代表第i只捕食者在j维问题中数值。如若能解答一下,非常感谢。

构建完初始种群,根据物竞天择规律,将适应度较好的捕食者构建一个新的集合,名为Elite。其矩阵如图3所示。

其中代表精英捕食者向量,复制N次构建精英矩阵。在每次迭代时,若出现适应度高于精英捕食者时,原精英捕食者会被捕食者代替,构建形成新的精英矩阵。

while Iter<Max_iter %------------------- Detecting top predator ----------------- for i=1:size(Prey,1) Flag4ub=Prey(i,:)>ub;Flag4lb=Prey(i,:)<lb; Prey(i,:)=(Prey(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;fitness(i,1)=fobj(Prey(i,:));if fitness(i,1)<Top_predator_fit Top_predator_fit=fitness(i,1); Top_predator_pos=Prey(i,:);endend

上面的那段代码是精英矩阵的构建过程,首先在迭代次数内,对每个捕食者进行循环,以第一只捕食者为例子,Prey(1,:)代表第一个捕食者在所有维度的位置,判断其是否超过设定的边界值,若没有则输出0,然后对位置进行更新,一般情况下,每个捕食者不会超过设定的边界范围,则Flag4ub以及Flag4lb均为0,~为逻辑值判断,~(0)则输出1,~(1)输出为0,所以Prey(i,:)不会变,依然为图2所示的结构,然后将所有维度的值带入目标方程,计算适应度值,初始的Top_predator_fit为无穷大量,若计算的适应度值小于Top_predator_fit,则进行替换,并将捕食者的位置存储到精英捕食者的位置。

精英矩阵构建完后,根据matlab代码的顺序,我们要回到海洋捕食者最优觅食、互动、和记忆的控制策略,主要分为七点,概括的来讲捕食者和猎物的运动规律。

①捕食者在食物丰富的地区采用布朗运动,反之采用莱维飞行。

②在捕食者穿越不同栖息地的过程中,布朗运动和莱维飞行所占比例相同。

③由于周围环境的影响捕食者改变搜索策略以期望找到猎物分布不同的地区。

④速度比(捕食者对猎物的速度比)很小时,即捕食者速度很慢,猎物速度很快时,对于捕食者最好的搜索策略是莱维飞行,反之为布朗运动。

⑤速度比越等1时,如果猎物以莱维运动方式行进,则对于捕食者最好的布朗运动。

⑥速度比较高时,捕食者最好不动。

⑦他们能很好的利用记忆提醒自己和同伴成功觅食的地点。

从第七点我们还需要一段种群记忆的代码,即适应度进行比较,较小的保存位置,不断更替直到迭代满足最终要求。

个人理解:如果iter==0,并且第一次循环i=0,那么if语句就是保存初始值,随着迭代次数的增加,保存最优的适应度值以及最优个体的适应度值。

随后开始海洋捕食者算法的主体部分,MPA优化过程分为三个主要过程,考虑不同的速度比,同时模拟捕食者与猎物的整个生命周期。第一阶段:速度比较大,即猎物比捕食者移动速度快的情况下;第二阶段:速度比相同;第三阶段:速度比较小的情况,捕食者比猎物运动得较快。每个阶段占整个迭代的⅓。

第一阶段:

捕食者代表搜索的意思,因此速度比较大的情况一般发生在迭代初期,这时对于捕食者最好的运动策略即不动,符合之前运动规律第六点的描述。上图中的蓝线代表布朗运动轨迹。因此该阶段的数学模型应用如下。

for i=1:size(Prey,1)for j=1:size(Prey,2) R=rand();%------------------ Phase 1 (Eq.12) ------------------- if Iter<Max_iter/3 stepsize(i,j)=RB(i,j)*(Elite(i,j)-RB(i,j)*Prey(i,j));Prey(i,j)=Prey(i,j)+P*R*stepsize(i,j);

首先是步长的计算,RB代表布朗运动方程,随后将步长运用到猎物的位置更新中。

第二阶段:

第二阶段为速度比约等为1,捕食者和猎物速度一样,这一阶段由勘探向开采阶段转变,因此,开发和勘探都尤为重要,种群的一半负责开采,另外一半负责勘探,由原文可以看到作者将猎物用来开发,捕食者用来勘探。基于这一准则,如果猎物以莱维飞行运动,则捕食者以布朗运动进行移动。如上图所示,绿色代表莱维飞行的轨迹。

%--------------- Phase 2 (Eqs. 13 & 14)----------------elseif Iter>Max_iter/3 && Iter<2*Max_iter/3 if i>size(Prey,1)/2stepsize(i,j)=RB(i,j)*(RB(i,j)*Elite(i,j)-Prey(i,j));Prey(i,j)=Elite(i,j)+P*CF*stepsize(i,j); elsestepsize(i,j)=RL(i,j)*(Elite(i,j)-RL(i,j)*Prey(i,j)); Prey(i,j)=Prey(i,j)+P*R*stepsize(i,j); end

第三阶段:

第三阶段:捕食者移动速度更快,主要是因为迭代后期作用于开发阶段,捕食者的移动建模如下。

%----------------- Phase 3 (Eq. 15)-------------------else stepsize(i,j)=RL(i,j)*(RL(i,j)*Elite(i,j)-Prey(i,j)); Prey(i,j)=Elite(i,j)+P*CF*stepsize(i,j); end end end

运行整段代码可以得到原文中关于测试方程的复现,但是对于搜索历史图、平均适应度历史

一维轨迹图和种群多样性分布图在matlab官网上没有源代码,只有三维图像和收敛曲线。对于方程F1,其结果如下:

对于莱维飞行和布朗运动的运动方程以及机理,在本篇就不再详细介绍!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。