Crow search algorithm(乌鸦搜索算法)

今天我准备和你们分享一下我读Crow search algorithm(乌鸦搜索算法 )这篇文章的心得:
原文连接
这篇文章经过对乌鸦的智能行为进行分析,提出了一种新的元启发式优化器,称为乌鸦搜索算法(CSA)。CSA是一种基于人口的技术,它大概的思路就是乌鸦将多余的食物储存在藏身之处,并在须要食物时将其取回。本文还将CSA用于优化六个约束工程设计问题,分别是三杆桁架设计问题、压力容器设计问题、张力/压缩弹簧设计问题、焊接梁设计问题、齿轮系设计问题、贝尔维尔弹簧设计问题。这些问题具备不一样的目标函数,约束和决策变量性质。将CSA得到的结果与各类算法(例如BA、GA、PSO、CDE、MBA等)的结果进行比较。结果代表,与其余算法相比,CSA获得的更好。web

一 介绍
介绍部分主要阐述了什么是工程设计、什么是优化技术、什么是元启发式、元启发式可以解决的问题以及好处
工程设计被定义为构建知足特定需求的产品的决策过程。大多数状况下,工程设计问题包括具备大量决策变量的复杂目标函数。可行解决方案是全部设计的集合,其特征在于设计参数(决策变量)的全部可能值。优化技术试图从全部可用的可行解决方案中找到最佳解决方案。
根据格洛弗的惯例,全部现代天然灵感的方法都被称为元启发式,元启发式算法能够解决大多数非线性和多模态的现实优化问题且都使用随机化和局部搜索的某种权衡。
一些著名的元启发式算法以下:基于天然选择的遗传算法(GA),基于鸟类植绒和鱼类学校教育的社会行为的粒子群优化算法,和声搜索(HS)基于音乐即兴创做过程,布谷鸟搜索算法基于一些杜鹃物种的寄生寄生,基于微生物回声定位行为的蝙蝠算法(BA),基于动物搜索的群搜索优化器(GSO)行为,萤火虫算法(FA)基于热带萤火虫的闪光模式等。算法

二 乌鸦搜索算法
介绍乌鸦的习性:乌鸦会观察其余鸟类隐藏食物的地方,并在它们离开后偷走它。若是一只乌鸦犯了偷窃行为,它将须要采起额外的预防措施,例如移动藏身之处以免成为将来的受害者。事实上,他们利用本身的小偷经验来预测盗窃者的行为,而且能够肯定最安全的方法来保护他们的藏物处不被盗。
在本文中,基于上述智能行为,开发了基于人口的元启发式算法CSA。CSA的原则以下:
1.乌鸦以群居的形式生活。
2.乌鸦记住了它们藏食物的位置。
3.乌鸦跟着领导者作偷取食物。
4.乌鸦保护他们的藏物处必定几率下不被偷窃。
假设一个d维环境中包括许多乌鸦。乌鸦的数量(群容量)是N,而且在搜索空间中乌鸦i在时间(迭代)的位置由向量这里写图片描述这里写图片描述决定,当且仅当这里写图片描述而且这里写图片描述是最大迭代次数时成立。每只乌鸦都有一个记忆,那就是隐藏位置的记忆。
假设在迭代时,乌鸦j想要访问它的隐藏位置这里写图片描述。在此次迭代中,乌鸦i决定跟随乌鸦j接近乌鸦j的藏身之处。在这种状况下,可能会发生两种状态:
状态1:乌鸦j不知道乌鸦i正在追它。结果,乌鸦i将接近乌鸦j的藏身之处。 在这种状况下,乌鸦i的新位置得到以下:
这里写图片描述
其中ri是在0和1之间均匀分布的随机数,这里写图片描述表示在迭代时的乌鸦i的飞行长度。
图1显示了该状态的示意图以及fl对搜索能力的影响。 fl的小值致使局部搜索(在这里写图片描述附近; ),大值致使全局搜索(远离这里写图片描述)。如图1(a)所示,若是选择fl的值小于1,则乌鸦 i的下一个位置位于这里写图片描述这里写图片描述之间的虚线上。如图1(b)所示,若是选择fl的值大于1,则乌鸦i的下一个位置可能在超过这里写图片描述的虚线上。
状态2:乌鸦j知道乌鸦i正在追它。结果,为了保护其隐藏处不被发现,乌鸦j将经过前往搜索空间的另外一个位置来欺骗乌鸦。
总的来讲,状态1和2能够表示以下:
这里写图片描述
其中rj是在0和1之间具备均匀分布的随机数,这里写图片描述表示在迭代时的乌鸦j的感知几率。
fl<1
fl>1
图1. CSA中状态1在(a)fl <1和(b)fl> 1两种状况下的流程图。乌鸦i能够到达虚线上的每一个位置。安全

三 CSA实现优化
接下来咱们介绍CSA的实现步骤:
第1步:初始化问题和可调参数
定义了优化问题,决策变量和约束。而后,估计CSA的可调参数(群体大小(N),最大迭代次数(这里写图片描述),飞行长度(fl)和感知几率(AP))。svg

第2步:初始化乌鸦的位置和记忆
N个乌鸦随机定位在d维搜索空间中做为群的一员。每一个乌鸦表示一个问题的可行解决方案,d是决策变量的数量。
这里写图片描述
每一个乌鸦的记忆被初始化。由于在最初的迭代中,乌鸦没有经验,因此假设它们将食物隐藏在它们的初始位置。
这里写图片描述
CSA算法的伪代码以下:
CSA伪代码函数

第3步:评估适应度(目标)功能
对于每一个乌鸦,经过将决策变量值插入目标函数来计算其位置的质量。性能

第4步:生成新位置
乌鸦在搜索空间中产生以下的新位置:假设乌鸦i想要生成一个新位置。为了这个目的,这只乌鸦随机选择其中一只乌鸦(例如乌鸦j)并跟随它以发现被这只乌鸦隐藏的食物的位置(这里写图片描述)。 乌鸦i的新位置由等式(2)得到。对全部乌鸦重复这个过程。测试

第5步:检查新位置的可行性
检查每一个乌鸦新位置的可行性。若是乌鸦的新位置是可行的,乌鸦会更新它的位置。不然,乌鸦停留在当前位置而且不会移动到生成的新位置。优化

第6步:评估新位置的适应度函数
计算每一个乌鸦的新位置的适应度函数值。ui

第7步:更新记忆
乌鸦更新他们的记忆以下:
这里写图片描述
其中f(.)表示目标函数值。
能够看出,若是乌鸦的新位置的适应度函数值优于记忆位置的适应度函数值,则乌鸦经过新位置更新其记忆。spa

第8步:检查终止标准
重复步骤4到步骤7直到达到这里写图片描述。当知足终止标准时,将目标函数值方面的记忆的最佳位置看成优化问题的解决方案。

四 CSA与GA、PSO、HS的比较
相比其余三个算法,CSA只须要调整飞行长度和意识几率两个参数,相对省时一些。
CSA不是一种贪婪算法,由于若是一个乌鸦产生一个不比当前位置好的新位置,它将移动到新位置。非贪婪算法能够增长生成的解决方案的多样性。
CSA包含记忆良好解决方案的存储器,在CSA的每次迭代中,每只乌鸦随机选择一只乌鸦(也多是它本身)并向其隐藏位置移动(该乌鸦找到的最佳解决方案)。这意味着在CSA的每次迭代中,到目前为止找到的最佳位置直接用于找到更好的位置。

五 数值例子
将CSA的优化能力运用并解决六个工程设计问题,包括三杆桁架,压力容器,拉伸/压缩弹簧,焊接梁,齿轮系和贝氏弹簧。
下面是CSA算法的流程图:
这里写图片描述
这里写图片描述
表1显示了用于解决这些问题的CSA的参数设置
表1
后面文章分别对这六个工程设计问题进行了介绍,并将CSA运用在这些问题上,在和其余经典算法比较以后,发现CSA在很大程度上可以产生更有但愿的结果。

表17显示了CSA与PSO和GA在30次独立运行中发现的结果的比较结果。能够看出,在全部功能上,CSA在最佳索引方面优于其余算法。在此表中,显示了运行的平均时间。能够看出,与相同数量的适应度评估相比,CSA比PSO和GA消耗更少的计算时间。
表17
做为另外一项研究,研究了CSA不一样参数设置对其性能的影响。表18和19表示不一样AP和fl值对f1,f2和f3的得到结果的影响。从表18能够看出,AP = 0致使CSA的性能较弱,由于已经消除了算法的多样化能力。考虑到最佳指数,从研究参数设置接近f1,f2和f3的最佳指标分别是(AP = 0.05和fl = 1.5),(AP = 0.05和fl = 2.5)和(AP = 0.2和fl = 2)。考虑平均指数,从研究参数设置接近f1,f2和f3的最佳值分别是(AP = 0.05和fl = 2),(AP = 0.05和fl = 2.5)和(AP = 0.3和fl = 2)。在测试函数中,f1和f2是单峰的,而f3是多峰的。彷佛对于单峰函数,小的AP值致使更好的结果,而对于多模函数,最好使用较大的值来避免局部最优。若是使用AP的固定值(AP = 0.05)而且fl的值从1.5增长到2.5,则平均来讲,CSA对f1,f2和f3的性能提升。若是AP的值设置为0.2而且f1的值从1.5增长到2.5,则平均而言,f1上的CSA性能没有提升,而在f3上,CSA的性能提升。所以,与其余优化技术同样,CSA的微调是一个依赖于问题的问题,应该经过试验来完成。
表18
表19

六 结论
基于乌鸦的智能行为,本文提出了一种新的元启发式算法CSA。CSA是基于人口的优化算法,它至关简单,只有两个可调参数(飞行长度和感知几率),这反过来使其对不一样工程领域的应用很是有吸引力。在CSA中,感知几率的参数直接用于控制算法的多样性。与GA,PSO和HS相比,CSA具备更少的参数来调整,所以更容易实现。经过解决具备不一样的目标函数,约束和决策变量性质的工程设计问题来评估CSA的有用性。仿真结果代表,所提出的新算法的性能是有前途的,由于它与其余研究的算法相比产生了竞争结果。在一组基准函数中,观察到虽然PSO被称为基于群体的算法中的快速技术,但它并不优于CSA。从结果能够看出,CSA的收敛速度很好,该算法在1s内找到了所研究问题的解。

算法的源代码以下:
用matlab语言

format long; close all; clear all; clc

pd=2; %问题维度(决策变量的数量)
N=100; % 群 (人口) 规模
AP=0.1; % 意识几率
fl=2; % 飞行长度 (fl)

[x l u]=init(N,pd); % 函数初始化

xn=x;
ft=fitness(xn,N,pd); % 函数适应度评估

mem=x; % 记忆初始化
fit_mem=ft; % 记忆位置的适应度


tmax=50; % 最大迭代次数 (itermax)
for t=1:tmax

    num=ceil(N*rand(1,N)); % 生成随机候选乌鸦以追随(追逐)
    for i=1:N
        if rand>AP
            xnew(i,:)= x(i,:)+fl*rand*(mem(num(i),:)-x(i,:)); % 为乌鸦i生成一个新位置 (状态 1)
        else
            for j=1:pd
                xnew(i,j)=l-(l-u)*rand; % 为乌鸦i生成一个新位置 (状态 2)
            end
        end
    end

    xn=xnew;
    ft=fitness(xn,N,pd); % 新解决方案的适应性评估函数

    for i=1:N % 更新位置和记忆
        if xnew(i,:)>=l & xnew(i,:)<=u
            x(i,:)=xnew(i,:); % 更新位置
            if ft(i)<fit_mem(i)
                mem(i,:)=xnew(i,:); % 更新记忆
                fit_mem(i)=ft(i);
            end
        end
    end    

    ffit(t)=min(fit_mem); % 在迭代t以前找到的最佳值
    min(fit_mem)
end

ngbest=find(fit_mem== min(fit_mem));
g_best=mem(ngbest(1),:); % 解决问题

运行截图以下:
这里写图片描述这里写图片描述这里写图片描述这里写图片描述 最终收敛到一个很小的值