Cuckoo Search

2023-10-20 23:20
文章标签 search cuckoo

本文主要是介绍Cuckoo Search,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

       杜鹃鸟搜索(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 jif(F(new_nests_j)>F(host_nests_j))在j上用new_nests替换相应的host_nests;endendif(随机数>Pa)随机选取host_nests里面的几个nests,用偏差随机游走生成新巢new_nests1;endFor 对每一个nest jif(F(new_nests1_j)>F(host_nests_j))在j上用new_nests1替换相应的host_nests;endend找出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



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

这篇关于Cuckoo Search的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/250363

相关文章

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

JavaScript正则表达式六大利器:`test`、`exec`、`match`、`matchAll`、`search`与`replace`详解及对比

在JavaScript中,正则表达式(Regular Expression)是一种用于文本搜索、替换、匹配和验证的强大工具。本文将深入解析与正则表达式相关的几个主要执行方法:test、exec、match、matchAll、search和replace,并对它们进行对比,帮助开发者更好地理解这些方法的使用场景和差异。 正则表达式基础 在深入解析方法之前,先简要回顾一下正则表达式的基础知识。正则

插件maven-search:Maven导入依赖时,使用插件maven-search拷贝需要的依赖的GAV

然后粘贴: <dependency>    <groupId>mysql</groupId>    <artifactId>mysql-connector-java</artifactId>    <version>8.0.26</version> </dependency>

广度优先搜索Breadth-First-Search

目录  1.问题 2.算法 3.代码 4.参考文献  1.问题         广度优先搜索,稍微学过算法的人都知道,网上也一大堆资料,这里就不做过多介绍了。直接看问题,还是从下图招到一条从城市Arad到Bucharest的路径。  该图是连通图,所以必然存在一条路径,只是如何找到最短路径。 2.算法 还是贴一个算法的伪代码吧: 1 procedu

【0323】Postgres内核之 hash table sequentially search(seq_scan_tables、num_seq_scans)

0. seq scan tracking 我们在这里跟踪活跃的 hash_seq_search() 扫描。 需要这种机制是因为如果扫描正在进行时发生桶分裂(bucket split),它可能会访问两次相同的条目,甚至完全错过某些条目(如果它正在访问同一个分裂的桶中的条目)。因此,如果正在向表中插入数据,我们希望抑制桶分裂。 在当前的使用中,这种情况非常罕见,因此只需将分裂推迟到下一次插入即可。

Android Settings搜索Search方案分析

Android开发会遇到一些自写界面需要允许被搜索,或者三方应用挂靠在Settings,用户也希望能被搜索。 在知道怎么添加之前,得先了解下整个框架,才能更好地加入我们自己的代码。   这里稍微整理了下整个search database数据如何索引加载流程。 Settings搜索界面是由SearchFragment展现,当用户在Settings主页中点击搜索图标,会启动到SearchAc

SIM(Search-based user interest modeling)

导读 我们对电商场景兴趣建模的理解愈发清晰:1. 通过预估目标item的信息对用户过去的行为做search提取和item相关的信息是一个很核心有效的技术。2. 更长的用户行为序列信息对CTR建模是非常有效且珍贵的。从用户的角度思考,我们也希望能关注用户长期的兴趣。但是当前的search方法无论是DIN和DIEN都不允许我们在线对一个超长的行为序列比如1000以上做有效搜索。所以我们的目标就比较明

[LeetCode] 240. Search a 2D Matrix II

题:https://leetcode.com/problems/search-a-2d-matrix-ii/description/ 题目 Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties: Integers i

最佳优先搜索best-find search

目录 1. 问题 2. 算法 3.代码 1. 问题 考虑下面这个问题:  我们要找到从Arad到Bucharest的路,最好是最短的路: 2. 算法 这是一个无向有环图, 可以采用最佳优先搜索: 最佳优先搜索的算法可以参考维基百科: 伪代码如下: // Pseudocode for Best First SearchBest-First-Search(Gr

LeetCode - 34. Search for a Range

34. Search for a Range  Problem's Link  ---------------------------------------------------------------------------- Mean:  给定一个有序数组和一个数k,求k在这个数组中的起始下标和结束下标. analyse: 二分查找. Time comple