1、实验报告题目:多尺度协同变异的粒子群优化算法的实现学院:信息科学与技术学院专业:计算机技术年级:2016 级研究生课程:计算智能_作业 4姓名:学号:备注:一、 实验内容1.问题描述粒子群算法(Particle Swarm Optimizer,PSO)是由 Kennedy 和 Eberhart 博士提出的一种基于群体智能的优化算法,其基本思想是受到他们早期对许多鸟类的群体行为进行建模与仿真研究的启发.粒子群算法的优势在于其简单容易实现,没有很多参数需要调整,是非线性连续优化问题、组合优化问题和混合整数非线性优化问题的有效优化工具.由于 PSO 算法概念简单、实现容易,在函数优化和神经网络权值训
2、练等方面都有很好的表现.由于其又具有深刻的智能背景,既适合科学研究,又特别适于工程应用,因此在近年来得到了飞速的发展.其应用涉及系统控制、人工智能、模式识别、计算机、通信工程等各个领域.粒子群优化算法问世以来受到了广泛的重视,经过十几年的研究,其不论在应用方面还是在优化性能方面都得到了很大的发展.然而,研究人员仍然无法解决一直困扰该算法的两个难题:早熟和收敛速度慢.在避免早熟收敛的研究中,一些学者提出了控制种群多样性来提高性能的办法.其思想主要分为两个方面:(1)从 PSO 参数以及其拓扑结构研究的角度.(2)从与遗传算法相结合的角度.对于第一个角度,一些学者提出解决微粒间的冲突和聚集,分析微
3、粒和种群最优位置的距离,种群随机多代初始化的思想.而对于第二个角度,主要是通过引入遗传算法中的变异操作实现的,其中文献通过对微粒引入一个小概率随机变异操作来增加种群多样性(dissipative PSO 简称 DPSO),这样做虽然可以更好的搜索粒子群的解空间,但如变异率控制不当则极容易导致原始种群的混乱,致使在算法的后期达不到精确的局部搜索目的;在此基础上,进一步提高搜索性能,文献给出了一种令变异操作随时间变化的自适应层次 PSO 算法(self-organizinghierarchical PSO,简称 HPSO),为了使其能够适应变异操作,还确定了自适应参数的选择方式.但由于该算法没有考
4、虑速度公式中惯性因素的影响,因此将发生变异的条件设置为微粒的速度为 0,从而使得该算法仍然未能迅速有效的逃离局部极小值.文献为了提高种群多样性和搜索速度间的平衡,对阈值设定进行了改进并结合群体自动分家机制,提出一种自适应逃逸的微粒群算法(Self-Adaptive Escape PSO,简称 AEPSO).然而上述算法在实现变异的时候,均采用单一的均匀变异机制,其逃逸能力大大减弱,进而使改进的PSO 算法在有限的迭代次数内无法实现最优解的探索,因此如何提高算法的逃逸能力,使其在快速定位到最优解区域同时提高最优解的精度值得我们进一步研究.鉴于此,本文提出一种多尺度协同变异的微粒群算法(MAEPS
5、O).该算法利用不同大小方差的高斯变异机制实现解空间的探索,这种多个或大或小的变异机制,能促使整个种群以尽量分散的变异尺度来对解空间进行更加详尽的探索.同时高斯变异的范围随着适应值的变小也逐渐降低,在算法后期有利于提高最优解的精度;在利用不同大小变异算子提高局部精确搜索能力的同时,该算法同样利用均匀算子维护种群多样性.利用试验对不同评测函数进行测试均验证新算法优良的优化性能.2.解决思路提出一种多尺度协同变异的微粒群优化算法,其中算法的逃逸能力取决于不同尺度方差的高斯变异算子,不同尺度的变异有助于算法在搜索空间中进行分散式的搜索,同时变异尺度随着适应度的提升而逐渐减少,这样可以在保证逃逸能力的
6、同时, 在算法后期提高了最优解的精度保证了算法的收敛性能.3. 实验平台本实验采用的是 windows10 + Visual Studio 2013运用的 win32的运行平台。二、 算法分析1. 基本理论和方法我们把一个优化问题看作是在空中觅食的鸟群,那么在空中飞行的一只觅食的“鸟”就是 PSO 算法在解空间中进行搜索的一个“粒子”(Particle),也是优化问题的一个解.“食物“就是优化问题的最优解.粒子在搜索空间中以一定的速度飞行,这个速度根据它本身的飞行经验和同伴的飞行经验来动态调整.所有的粒子都知道自己到目前为止发现的最好位置 T,这个可以看作是粒子自己的飞行经验.此外,每个粒子还
7、知道到目前为止整个群体中所有粒子发现的最好位置即 g P (也称为 gbest,gbest 是在 pbest 中的最好值),这个可以看作是粒子的同伴的经验.在由这样一群随机初始化形成的粒子而组成的一个种群中,以迭代的方式进行的速度与位置的更新公式为:作为问题近似最优解。其中, 1 r 和 2 r 为两个在0,1范围内服从均匀分布的随机变量,用来保持群体的多样性. 1 c 和 2 c 为学习因子,也称加速因子,其使粒子具有自我总结和向群体中优秀个体学习的能力,从而向自己的历史最优点以及群体的历史最优点靠近. w 为惯性权重,它起着权衡局部最优能力和全局最优能力的作用.公式中右项中的三个部分分别称
8、为:惯性部分、认知部分(代表粒子对自身的学习) 、社会部分(代表着粒子间的协作).这三个部分之间的相互平衡决定了算法的主要性能.2. 具体算法通过多尺度高斯变异算子就可以保证无论最优解存在何处,算法进化到何处,都能够准确定位到最优解区域.算法具体描述如下:设尺度个数为 M ,首先初始化多尺度高斯变异算子的初始方差。初始时,方差一般设定为优化变量的取值范围,随着迭代次数的增加,多尺度高斯变异算子的方差会随之进行调整,具体调整方式如下所示,首先根据适应值的大小对种群中的微粒进行由小到大排序,然后对其进行组合,生成 M 个子群,每一个子群的微粒个数为 P = N /M , K 是当前迭代次数,计算每
9、一个子群的适应度:其中 f 是微粒的适应值计算函数,不同变异尺度之间相互竞争,根据适应能力的不同而设置不同的变异能力,因此第 m 个变异算子的标准差为:由于变异算子的进化是一个递归过程,排在后面的变异算子可能很大,因此对变异算子的标准差做如下规范:如果 W / 4,则()iW 为待优化变量空间的宽度,重复使用上式,直到满足 k 1 ?T i = T i / k 2更新所有粒子位置 p o s i C a l d i s ( p o s i ) #include #include #include #include using namespace std;const int groupSize
10、= 20; /种群数量const int dimNum = 30; /变量维度const int M = 5; /子群数量const int N = 6000; /迭代次数const int P = groupSize / M;const double W = 50;const int c1 = 1.4;const int c2 = 1.4;double groupgroupSizedimNum;/ 粒子群double pidgroupSizedimNum;/存放最适宜的值double pgddimNum;double vgroupSizedimNum; /粒子速度double TdimNum
11、; / 每个维度上的阈值double sigmaM; /方差int TCdimNum; /论文中的Gdouble w; /惯性double Tablet(double adimNum) int i = 1;double sum;sum = pow(10, 6)*a0 * a0;while (i dimNum) sum += ai * ai;i+;return sum;double Quadric(double adimNum) /Tablet函数double sum, value = 0;for (int i = 0; i dimNum; i+) sum = 0;for (int j = 0; j i; j+) sum += aj;value += sum*sum;return value;