Cuckoo Search
2013-10-10 22:37
399 查看
杜鹃鸟搜索(Cuckoo Search)是2009年发表在nature(见参考文献1)上的又一种仿生物智能优化算法。该算法主要根据杜鹃鸟的孵育寄生(obligate
brood parasitism)的特征,杜鹃的这种孵育行为表现在:
大意是可以理解为:
这里有两个类比,
(1)杜鹃鸟蛋孵化之后可以赶走原本鸟巢中的蛋,这对应于启发式优化算法中的local search,使用Levy walk可以加快这个搜索过程(产生的新解既可以继承当前最优解,又可以不局限于局部最优);
(2)杜鹃鸟蛋藏身处被巢穴的主人发现,摧毁巢穴并建立新巢,这对应于优化算法中的类似于选择变异的效果(个人认为),这里运用biased random walk。
Sn = Sn-1 + Xn
Sn为n个随机步态的和
Xn为第n个步长,服从某一随机概率分布
即下一个状态Sn只与前一个状态Sn-1以及移动步长Xn有关,符合马尔科夫链的主要特性。
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
继续坚持写博客,最近得抓紧啦,加油哇!!!
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。Levyflight实际上是步长服从均值为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
继续坚持写博客,最近得抓紧啦,加油哇!!!
相关文章推荐
- 布谷鸟算法(cuckoo_search)可能会遇到的问题
- 【算法学习】布谷鸟搜索算法【CuckooSearch(CS)】
- [leetcode]Search in Rotated Sorted Array
- ealsticsearch多条件查询
- 108. Convert Sorted Array to Binary Search Tree c++
- spark写数据到装有searchgard的ES集群
- 终于将windows search 彻底卸载
- EnCase v7 search hits in compound files?
- leetcode---Validate Binary Search Tree
- 669. Trim a Binary Search Tree
- [LeetCode]33.Search in Rotated Sorted Array
- [leedcode 34] Search for a Range
- leetcode 题解 98. Validate Binary Search Tree
- 501. Find Mode in Binary Search Tree
- [Leetcode] Unique Binary Search Trees II (Java)
- LintCode Binary Search 二分查找
- cuckoo安装指南(四)
- 【笔记】Elasticsearch vs Solr
- [Leetcode] Convert Sorted List to Binary Search Tree (Java)
- LeetCode 108. Convert Sorted Array to Binary Search Tree