1、本质
寻找最值的算法
2、算法的基本思想
此算法结合莱维飞行寻找函数最小值。其中莱维飞行简单来说就是产生一种随机步长的算法,以短步长为主,偶尔产生长步长,避免函数新解取到被求解方程式的局部最小值。
求解最小值的过程中出现最优解的迭代过程主要有两种迭代思路(结合自然界布谷鸟的借巢育子的行为):(1)采用莱维飞行的路径来寻找较优解(布谷鸟首先采用莱维飞行找窝下蛋);(2)找到的较优解有一定的概率Pa被替换,替换后的解最为新的较优解(宿主鸟发现假蛋,将假蛋移除损坏或者重新建立新的巢穴)。两种迭代公式如下:
3、运用CS算法求解函数最优解的操作步骤:
- 目标函数
- 产生n个解的初始集合-------(产生n个寄主的初始群落)
- While(t<最大步长)
- 随机通过莱维飞行产生一个解
- 评估解的质量或者目标函数的值
- 从n个解中随机选取一个
- 比较两个解,找出一个较优解,作为新解。
- 一部分的解会存在一定的概率(Pa)被抛弃,由(2)式产生新解
保留最优解
4、Matlab仿真程序的设计
(1)莱维飞行程序func_levy.m
normrnd函数:生成服从正态分布的随机数;R=normrnd(MU,SIGMA):生成服从正态分布(MU参数代表均值,SIGMA参数代表标准差)的随机数。R=normrnd(MU,SIGMA,m,n):生成m×n形式的正态分布的随机数矩阵。
Mantegna方法,生成服从萊维分布的随机步长的方法如下:
(2)主函数Csmain.m
参数设置;
初始化寄主的鸟巢,随机产生一个解;
通过levy飞行产生一个解;
与上一代比较,更新适应度较优的鸟巢;
根据发现概率舍弃一个鸟巢并建立一个新鸟巢;
列出当前最佳的鸟巢;
更新当代最优鸟巢的位置;
输出这个鸟巢里的每个鸟蛋,即是每个解。