随机蛙跳算法和NSGA2算法精品文档完整版.docx
《随机蛙跳算法和NSGA2算法精品文档完整版.docx》由会员分享,可在线阅读,更多相关《随机蛙跳算法和NSGA2算法精品文档完整版.docx(29页珍藏版)》请在冰豆网上搜索。
随机蛙跳算法和NSGA2算法精品文档完整版
《智能算法及应用技术》
结课综述
Name:
Moonlightran
Email:
randolphingwp@
目录
1.随机蛙跳(SFLA)算法1
1.1SFLA理论基础1
1.2SFLA的基本原理4
1.3SFLA的基本概念4
1.4SFLA的参数设置5
1.5SFLA的运算流程5
1.6SFLA函数优化中实例10
1.7粒子群算法(PSO)函数优化14
2.多目标优化算法(NSGA—II)19
2.1多目标优化问题描述19
2.2基本概念19
2.3非支配排序算法(NSGA)20
2.4带精英策略的非支配排序遗传算法(NSGA—II)22
2.5NSGA-II函数优化实例27
单目标和多目标优化算法介绍
——随机蛙跳算法和带精英策略的非支配排序算法
通常的优化问题可以分为单目标优化问题和多目标优化问题。
针对这两类问题,分别介绍随机蛙跳算法(SFLA)和带精英策略的非支配排序算法(NSGA—II),并且给出这两类算法在函数优化中的应用实例。
1.随机蛙跳(SFLA)算法
随机蛙跳算法是由KevinLanes和MustafaEusuff于2003年共同提出,该算法结合了基于遗传特性的模因算法和基于行为的粒子群算法的优点,适合解决各类组合优化问题。
混合蛙跳算法具有设置参数少、简单易于理解、鲁棒性强等特点,已在语音情感识别、作业车间调度、复杂函数优化问题求解等领域得到成功应用。
1.1SFLA理论基础
SFLA是一种群体仿生类启发式进化计算方法,该算法将模因算法和粒子群优化算法的思想相结合,并经过适度扩展,因而兼具二者的优点。
作为SFLA的理论基础,模因算法和粒子群优化算法有必要进行简要介绍。
1.1.1模因算法
Moscato受Dawkin提出的meme概念的启示,于1989年首次提出了模因算法。
该算法源于文化进化理论中的隐喻思想,结合了全体成员参与搜索的思想和有选择性的特定个体搜索的机制,可以通过启发式搜索解决优化问题。
模因算法在原理上与遗传算法很相似,不同的是该算法在原始遗传算法步骤中的交叉和变异步骤之后增加了一个小范围的局部进化过程,故模因算法也曾被叫做增加了局部搜索功能的遗传算法。
给出模因算法的运算流程如图1.1所示。
图1.1模因算法流程
1.1.2粒子群算法
Kennedy和Eberhart受鸟群的群体飞行特性启发于1995年提出粒子群优化算法,该算法是一种基于群体智能的自适应优化计算方法。
假设有一群鸟,其中的所有个体均被称作一个“粒子”,这样的“粒子”被赋予速度和位置两种属性,在可行域中按照一定的规则飞行,目标是经过一定的进化次数找出待解问题的最佳参考方案。
进化过程中,所有个体不断追随两个关键的极值以调整自己的位置和速度。
其中一个极值是该粒子本身搜索到的最佳位置,即粒子自身的最优值;另外一个是粒子群中的所有成员中当前最优个体所在的位置,即全局最优解。
粒子群优化算法中个体的速度、位置更新公式如下:
(1.1)
(1.2)
其中,为第k次迭代中第i个粒子的速度。
为第k次迭代中第i个粒子的位置。
为第k次迭代中第i个粒子的自身最优位置。
为第k轮进化中的全局最优位置。
Rand()为位于范围[0,1]之间的随机数。
为粒子的惯性因子,为粒子的认知因子,控制移动的幅度。
为粒子的社会因子,控制移动的幅度。
粒子群优化算法的运算流程为:
Step1:
初始化粒子的速度和位置。
Step2:
计算所有粒子的适应值。
Step3:
比较各个粒子的当前适应值与其历史最优位置的适应值,如果前者优,则置此粒子当前最佳位置为。
Step4:
比较各个粒子的当前适应值与其全局最优位置的适应值,若前者优,则置此粒子当前全局最佳位置为。
Step5:
采用式(1.1)和式(2.1)更新种群中个体的速度和位置。
Step6:
判断:
若满足停止准则,则算法终止,否则转Step2。
上述两种算法核心思想的有机结合,即形成了所研究的混合蛙跳算法。
1.2SFLA的基本原理
SFLA是基于群体智能的仿生类优化算法,种群(解集)由一些具有相同结构的青蛙(解)组成。
SFLA模仿了青蛙群体的集体觅食活动。
为了寻找当前有限的食物源,在空间受限的一块区域内,一群青蛙首先按一定规则找准各自的初始位置。
位置确定后,每只青蛙开始利用各自携带的个性化信息在自己所在位置附近寻找食物更丰富的位置,并通过跳跃更新自己的位置。
寻找的规则是,蛙群通过充分发挥自身的自组织性,分别由个数基本相同的青蛙组团搜索,形成局部范围内的小团体,即为子种群。
子种群内部,由局部精英个体带领其它个体进行搜索。
每个子群搜索结束之后,所有个体重新组织起来,混合后重新按照规则分组,再执行组内搜索。
组团搜索和群体混合迭代执行,直至找到最丰富的食物源。
对于SFLA,每只青蛙被看作一个候选解,确定初始位置即为青蛙种群的初始化过程。
组团搜索对应于种群的划分并执行局部搜索,此过程是SFLA最核心的步骤,本质上青蛙个体的位置更新发生于此阶段。
子群的混合形成算法的混合运算,即全局信息交换。
全局信息交换与局部深度搜索相互作用,为SFLA跳出局部极值提供了保证。
1.3SFLA的基本概念
1.青蛙:
承载思想与信息的个体,构成种群的元素。
2.种群:
由一定数量的青蛙组成的集合。
3.子种群:
种群的子集。
由所有青蛙构成的群体根据相应规则被划分为多个并行、独立的子集,这些子集被称为子种群,即局部小团体。
4.适应度:
用来评价青蛙个体好坏的度量标准。
5.局部搜索:
子种群内部个体的更新操作。
按照一定的更新机制,子群内部的青蛙个体执行跳跃操作,从而消息得以在小团体内部传播和扩散。
6.混合运算:
将各个子种群合并为一个种群的操作。
将各个局部小团体进行合并,形成一个统一的群体,便于个体间的信息交流,为下一轮进化提供条件。
7.控制参数:
SFLA执行需要的控制参数,主要有:
所有青蛙个体总数(种群规模),最大混合迭代次数,局部小团体(子种群)的个数,子种群内部进化代数,各局部团体中青蛙的个数,青蛙个体的维数,青蛙最大跳动步长等。
8.执行终止条件:
(1)在若干连续进化代数内,全局最优解没有得到刷新;
(2)算法执行到初始设定的最大混合迭代次数。
满足二者之一,算法即被强制终止。
1.4SFLA的参数设置
SFLA的参数设置对算法的搜索性能具有非常重要的影响。
SFLA主要包括五个关键的参数,具体为:
群体中青蛙个体数量F,算法的最大混合迭代次数G,子种群数量m,各子种群的局部进化代数N,青蛙的最大允许跳跃距离。
SFLA的参数设置具体解释如下:
(1)群体中青蛙个体数量F:
又称种群规模,指所有青蛙个体总数。
一般而言是算法最重要的参数。
青蛙个体数量越多,算法搜索到全局最优值的可能性也相应越大,但太大的种群规模会对搜索速度造成不利影响。
(2)算法的最大混合迭代次数G:
此参数需要合理设置,如果G过大,则导致算法复杂度增加;相反,如果G太小,将造成青蛙种群之间缺乏交流,影响青蛙向最优个体靠近。
该参数的选取一般与问题的规模相关,规模越大,G的取值也相应越大。
(3)子种群数量m:
此参数也需要合理地选择,m如果过小,导致每个子种群内部青蛙个数过多,参与局部搜索的个体相应过少,因此信息难以在子种群间充分交换,失去局部搜索的优势;但当m太大时,会造成每个子种群规模太小,因此会削弱局部模因搜索的优势,造成算法易于早熟收敛。
(4)各子种群的局部进化代数N:
此参数也需要合理设置,过小的N会造成子种群内部青蛙个体频繁跳跃,减少了局部个体信息交流的机会;反之,若N过大,将会增加局部区域内算法早熟的可能性。
(5)青蛙的最大允许跳跃距离:
此参数可在一定程度上控制算法的全局寻优能力。
若太小,青蛙将在局部小范围跳动,容易陷入局部最优,削弱算法的全局搜索能力;而如果过大,青蛙将在可行域内大步跳跃,又容易造成错过最佳寻优位置。
SFLA的研究起步相对较晚,就算法的参数设置而言,学术界尚未形成可遵循的指导性原则,多数情况下通过仿真实验测试得到一组设置。
这也给不同学者针对经典SFLA的改进效果对比造成了一定困难。
1.5SFLA的运算流程
SFLA首先从可行域中随机地产生一组初始解构成初始种群,每个解对应于一只青蛙;接着计算各个青蛙的适应度值,按照适应度降序排列;然后以某种规则把整个青蛙种群划分为一定数量的子种群,在每个子种群内执行局部搜索,即根据指定的策略更新子种群内的最差青蛙,促使被更新个体向局部最优位置靠近。
子种群进化结束后,各子种群之间进行信息交换实现混合运算。
交替执行局部搜索和混合运算直至满足停止条件。
为说明SFLA的算法机理,以函数优化问题为例进行研究,问题如下:
(1.3)
其中。
利用混合蛙跳算法求解该问题时,分为四个步骤:
1.初始化
2.子种群划分
3.局部搜索
4.其种群混合
1.5.1初始化
从可行域中随机产生F个解作为初始种群,问题的纬数为S,为S纬空间的一个解。
经典的SLFA初始化过程是随机初始化的,种群分布不均匀,不利于算法在整个可行域空间上进行均匀搜索,进而有影响了算法的全局寻优的缺点,算法的初始化过程如图2中的伪代码所示:
图1.2经典SFLA的初始化过程
1.5.2子种群划分
计算每个解的目标函数值,将目标函数值按照降序排列,并且将目标函数的最优值记为作为整个种群的最优解。
将整个种群划分为m个子种群,每个子种群包含n个解,即满足。
其中,第一个解进入,第二个解进入,直到第m个解进入,然后将第个解进入,以此类推,直至所有的解分配完毕。
每个子种群中,目标函数最好和最差的解分别记为和。
经典混合蛙跳算法中子种群的划分如图1.3中伪代码所示:
图1.3经典SFLA的子种群划分过程
1.5.3局部搜索
在迭代过程中,各子种群只更新目标函数值最差的解,其更新公式为:
(1.4)
(1.5)
其中,rand()为0到1之间的随机数,为青蛙的移动步长,表示允许青蛙移动的最大距离。
式(5)对目标函数值最差的青蛙执行更新,即修改解的位置。
如果更新后得到比更好的解,则用更新后的解替代最差解;否则用代替式(4)中的,重新利用公式(4)、(5)计算新解;若仍得不到比更优的解,则随机产生一个新解去替换最差解,子种群中最差青蛙的位置就得到了更新。
在指定迭代次数内重复执行以上操作,就完成了一轮子种群的局部搜索。
经典混合蛙跳算法的局部搜索过程见图1.4所示。
图1.4经典混合蛙跳算法的局部搜索过程
1.5.4子种群混合
将各子种群重新合并为X,即,然后将X重新按目标函数值降序排列,并用整个种群中最好的青蛙(即目标函数值最小)及时更新,重新划分子种群,进行下一轮的局部搜索。
经过上述四步即种群初始化、子种群划分、局部搜索、子种群混合,完成了SFLA的一次迭代,解的位置也得到了更新。
混合蛙跳算法的算法流程如图1.5所示。
图1.5混合蛙跳算法流程
1.6SFLA函数优化中实例
利用SFLA算法寻优实例函数如下:
(1.6)
用matlab绘制出函数图像如图1.6所示,绘制图形代码如图1.7中所示。
图1.6SFLA寻优函数图形
closeall;clear;clc;
x1=[-2:
0.05:
2]
x2=[-1.5:
0.05:
1.5]
[x1,x2]=meshgrid(x1,x2);
y=sin(sqrt(x1.^2+x2.^2))./sqrt(x1.^2+x2.^2)+exp((cos(2*pi*x1)+cos(2*pi*x2))/2)-2.71289;
h=mesh(x1,x2,y);
set(h