布谷鸟算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

今天我要讲的内容是布谷鸟算法,英文叫做Cuckoo search (CS algorithm)。首先还是同样,介绍一下这个算法的英文含义,Cuckoo是布谷鸟的意思,啥是布谷鸟呢,是一种叫做布谷的鸟,o(∩_∩)o ,这种鸟她妈很懒,自己生蛋自己不养,一般把它的宝宝扔到别的种类鸟的鸟巢去。但是呢,当孵化后,遇到聪明的鸟妈妈,一看就知道不是亲生的,直接就被鸟妈妈给杀了。于是这群布谷鸟宝宝为了保命,它们就模仿别的种类的鸟叫,让智商或者情商极低的鸟妈妈误认为是自己的亲宝宝,这样它就活下来了。Search指的是搜索,这搜索可不是谷歌一下,你就知道。而是搜索最优值,举个简单的例子,y=(x-0.5)^2+1,它的最小值是1,位置是(0.5,1),我们要搜索的就是这个位置。

现在我们应该清楚它是干嘛的了吧,它就是为了寻找最小值而产生的一种算法,有些好装X的人会说,你傻X啊,最小值不是-2a/b吗,用你找啊? 说的不错,确实是,但是要是我们的函数变成y=sin(x^3+x^2)+e^cos(x^3)+log(tan(x) +10,你怎么办吶?你解不了,就算你求导数,但是你知道怎么解导数等于0吗?所以我们就得引入先进的东西来求最小值。

为了使大家容易理解,我还是用y=(x-0.5)^2+1来举例子,例如我们有4个布谷鸟蛋(也就是4个x坐标),鸟妈妈发现不是自己的宝宝的概率是0.25,我们x的取值范围是[0,1]之间,于是我们就可以开始计算了。

目标:求x在[0,1]之内的函数y=(x-0.5)^2+1最小值

(1)初始化x的位置,随机生成4个x坐标,x1=0.4,x2=0.6,x3=0.8,x4 =0.3 ——> X=[0.4, 0.6 ,0.8, 0.3]

(2)求出y1~y4,把x1~x4带入函数,求得Y=[1,31, 1.46, 1.69, 1.265],并选取当前最小值ymin= y4=1.265

(3)开始定出一个y的最大值为Y_global=INF(无穷大),然后与ymin比较,把Y中最小的位置和值保留,例如Y_global=INF>ymin=1.265,所以令Y _global=1.265

(4)记录Y_global的位置,(0.3,1.265)。

(5)按概率0.25,随机地把X中的值过塞子,选出被发现的蛋。例如第二个蛋被发现x2=0.6,那么他就要随机地变换位子,生成一个随机数,例如0.02,然后把x2=x2+0.02=0.62,之后求出y2=1.4794。那么X就变为了X=[0.4, 0.6 2 ,0.8, 0.3],Y=[1,31, 1.4794, 1.69, 1.265]。

(6)进行莱维飞行,这名字听起来挺高大上,说白了,就是把X的位置给随机地改变了。怎么变?有一个公式x=x+alpha*L。

L=S*(X-Y_global)*rand3

S=[rand1*sigma/|rand2|]^(1/beta)

sigma=0.6966

beta=1.5

alpha=0.01

rand1~rand3为正态分布的随机数

然后我们把X=[0.4, 0.6 ,0.8, 0.3]中的x1带入公式,首先随机生成rand1=-1. 2371,rand2=-2.1935,rand3=-0.3209,接下来带入公式中,获得x1=0.39 85

之后同理计算:

x2=0.6172

x3=0.7889

x4=0.3030

(7)更新矩阵X,X=[0.3985, 0.6172, 0.7889, 0.3030]

(8)计算Y=[1.3092, 1.4766, 1.6751, 1.2661],并选取当前最小值ymin= y4=1.2661,然后与ymin比较,把Y中最小的位置和值保留,例如Y_global =1.265

(9)返回步骤(5)用更新的X去循环执行,经过多次计算即可获得y的最优值和的最值位置(x,y)

1.% -----------------------------------------------------------------

2.% Cuckoo Search (CS) algorithm by Xin-She Yang and Suash Deb %

3.% Programmed by Xin-She Yang at Cambridge University %

4.% Programming dates: Nov 2008 to June 2009 %

5.% Last revised: Dec 2009 (simplified version for demo only) %

6.% -----------------------------------------------------------------

7.% Papers -- Citation Details:

8.% 1) X.-S. Yang, S. Deb, Cuckoo search via Levy flights,

9.% in: Proc. of World Congress on Nature & Biologically Inspired

10.% Computing (NaBIC 2009), December 2009, India,

11.% IEEE Publications, USA, pp. 210-214 (2009).

12.% /PS_cache/arxiv/pdf/1003/1003.1594v1.pdf

13.% 2) X.-S. Yang, S. Deb, Engineering optimization by cuckoo search,

14.% Int. J. Mathematical Modelling and Numerical Optimisation,

15.% Vol. 1, No. 4, 330-343 (2010).

16.% /PS_cache/arxiv/pdf/1005/1005.2908v2.pdf

17.% ----------------------------------------------------------------%

18.% This demo program only implements a standard version of %

19.% Cuckoo Search (CS), as the Levy flights and generation of %

20.% new solutions may use slightly different methods. %

21.% The pseudo code was given sequentially (select a cuckoo etc), %

22.% but the implementation here uses Matlab's vector capability, %

23.% which results in neater/better codes and shorter running time. %

24.% This implementation is different and more efficient than the %

25.% the demo code provided in the book by

26.% "Yang X. S., Nature-Inspired Metaheuristic Algoirthms, %

27.% 2nd Edition, Luniver Press, (2010). " %

28.% --------------------------------------------------------------- %

29.

30.% =============================================================== %

31.% Notes: %

32.% Different implementations may lead to slightly different %

33.% behavour and/or results, but there is nothing wrong with it, %

34.% as this is the nature of random walks and all metaheuristics. %

35.% -----------------------------------------------------------------

36.

37.% Additional Note: This version uses a fixed number of generation %

38.% (not a given tolerance) because many readers asked me to add %

39.% or implement this option. Thank

s.%

40.function [bestnest,fmin]=cuckoo_search_new(n)

41.if nargin<1,

42.% Number of nests (or different solutions)

43.n=25;

44.end

相关文档
最新文档