Cuckoo Search

来源:互联网 发布:淘宝网怎么解绑手机号 编辑:程序博客网 时间:2024/05/16 11:00

       杜鹃鸟搜索(Cuckoo Search)是2009年发表在nature(见参考文献1)上的又一种仿生物智能优化算法。该算法主要根据杜鹃鸟的孵育寄生(obligate brood parasitism)的特征,杜鹃的这种孵育行为表现在:


Cuckoo breeding behavior

        杜鹃鸟通过寄生在其他鸟类(或同类不同种的)巢穴孵化得以繁殖的。例如 Tapera,就具有很好的外形、颜色模仿能力,可以安全的藏身在其他鸟类巢穴中。除了模仿能力以外,杜鹃鸟的蛋会比原来巢穴中的蛋孵化的早,这样待哺的机会更多。

CS伪代码

         根据杜鹃的特点,CS算法设计伪代码如下: 


大意是可以理解为:

begin//目标函数为f(x),xi表示解,n个巢,Pa为host发现cuckoo eggs新建巢的概率随机初始化xi(1,2,....n)赋给host_nests,且符合取值范围;while(未超出设定的最大迭代次数or未达到可容忍的目标值)     通过Levy flight产生n个新杜鹃占用巢new_nests;     计算host_nests和new_nests的fitness;     For 对每一个nest j         if(F(new_nests_j)>F(host_nests_j))                 在j上用new_nests替换相应的host_nests;         end     end     if(随机数>Pa)         随机选取host_nests里面的几个nests,用偏差随机游走生成新巢new_nests1;     end     For 对每一个nest j         if(F(new_nests1_j)>F(host_nests_j))                 在j上用new_nests1替换相应的host_nests;         end     end     找出best nest;     end while输出最优解;end

 这里有两个类比,

(1)杜鹃鸟蛋孵化之后可以赶走原本鸟巢中的蛋,这对应于启发式优化算法中的local search,使用Levy walk可以加快这个搜索过程(产生的新解既可以继承当前最优解,又可以不局限于局部最优);

(2)杜鹃鸟蛋藏身处被巢穴的主人发现,摧毁巢穴并建立新巢,这对应于优化算法中的类似于选择变异的效果(个人认为),这里运用biased random walk。

random walk

        随机游走是包含一连串随机步长的随机过程。

           Sn = Sn-1 + Xn

                      Sn为n个随机步态的和

                      Xn为第n个步长,服从某一随机概率分布

        即下一个状态Sn只与前一个状态Sn-1以及移动步长Xn有关,符合马尔科夫链的主要特性。

Levy flight

        如果一个random walk的步长服从Levy distribution,那么这个random walk就叫做Levy flight or Levy walk。Levy flight实际上是步长服从均值为0,方差为delta(t)^2的正态分布,其中方差delta(t)^2是可变的。在CS算法中用到的Levy flight是参考自Mantegna:Fast, accurate algorithm for numerical simulation of Levy stable stochastic processes在1994年提出的算法。

        设随机变量s表示步长,令


u,v分布为两个服从正态分布的独立随机变量


其中


   

       1、在Local search过程中,(1) step_size = 0.01 * P(s) *(当前解与最好解之差);

                 s表示Levy flight的步长随机变量,P(s)为服从Levy fdistribution每次对应的概率,该分布即由上述公式2.21求得,

                 当前解与最好解之差作为步长取值范围,

                 0.01是根据解的取值范围而定的,以免发生过随机。

       CS的demo中对于新巢计算(2) s = s + step_size * randn(size(s));

                 step_size * randn(size(s))表示方差为step_size^2,均值为0的服从正态分布的随机数。

       2、在选择变异nest值时,(1)step_size = rand * (任意选取两个解之差)

                                               (2)new_nests = nests + step_size

                 step_size表示服从[0,任意选取两个解之差]的均匀分布的随机数。



参考文献:

1 Cuckoo Search via L´evy Flights

2 Engineering Optimisation by Cuckoo Search

3 Nature-Inspired Metaheuristic Algorithms



继续坚持写博客,最近得抓紧啦,加油哇!!!

原创粉丝点击