当前位置:文档之家› 粒子群算法论文

粒子群算法论文

粒子群算法论文SANY标准化小组 #QS8QHH-HHGX8Q8-GNHHJ8-HHMHGN#粒子群算法的寻优算法摘要:粒子群算法是在仿真生物群体社会活动的基础上,通过模拟群体生物相互协同寻优能力,从而构造出一种新的智能优化算法。

这篇文章简要回顾了粒子群算法的发展历史;引入了一个粒子群算法的实例,对其用MATLAB进行编程求解,得出结论。

之后还对其中的惯性权重进行了延伸研究,对惯性权重的选择和变化的算法性能进行分析。

关键词:粒子群、寻优、MATLAB、惯性权重目录:1.粒子群算法的简介粒子群算法(Particle Swarm Optimization)是一种新的智能优化算法。

谈到它的发展历史,就不得不先介绍下传统的优化算法,正因为传统优化算法自身的一些不足,才有新智能优化算法的兴起,而粒子群算法(PSO)就是在这种情况下发展起来的。

粒子群算法的研究背景最优化是人们在科学研究、工程技术和经济管理等领域中经常遇到的问题。

优化问题研究的主要内容是在解决某个问题时,如何从众多的解决方案中选出最优方案。

它可以定义为:在一定的约束条件下,求得一组参数值,使得系统的某项性能指标达到最优(最大或最小)。

传统的优化方法是借助于优化问题的不同性质,通常将问题分为线性规划问题、非线性规划问题、整数规划问题和多目标规划问题等。

相应的有一些成熟的常规算法,如应用于线性规划问题的单纯形法,应用于非线性规划的牛顿法、共扼梯度法,应用于整数规则的分枝界定法、动态规划等。

列举的这些传统的优化算法能够解决现实生活和工程上的很多问题,但工业和科学领域大量实际问题的困难程度正在日益增长,它们大多是根本无法在可接受的时间内找到解的问题。

这类优化问题的困难性不仅体现在具有极大的规模,更为重要的是,它们多数是非线性的、动态的、多峰的、具有欺骗性的或者不具有任何导数信息。

因此,发展通用性更强、效率更高的优化算法总是需要的。

起源在自然界中,鸟群运动的主体是离散的,其排列看起来是随机的,但在整体的运动中它们却保持着惊人的同步性,其整体运动形态非常流畅且极富美感。

这些呈分布状态的群体所表现出的似乎是有意识的集中控制,一直是许多研究者感兴趣的问题。

有研究者对鸟群的运动进行了计算机仿真,他们通过对个体设定简单的运动规则,来模拟鸟群整体的复杂行为。

1986 年 Craig ReynolS 提出了 Boid 模型,用以模拟鸟类聚集飞行的行为,通过对现实世界中这些群体运动的观察,在计算机中复制和重建这些运动轨迹,并对这些运动进行抽象建模,以发现新的运动模式。

之后,生物学家Frank Heppner 在此基础上增加了栖息地对鸟吸引的仿真条件,提出了新的鸟群模型。

这个新的鸟群模型的关键在于以个体之间的运算操作为基础,这个操作也就是群体行为的同步必须在于个体努力维持自身与邻居之间的距离为最优,为此每个个体必须知道自身位置和邻居的位置信息。

这些都表明群体中个体之间信息的社会共享有助于群体的进化。

在 1995年,受到 Frank Heppner 鸟群模型的影响,社会心理学博士 James Kennedy 和电子工程学博士 Russell Eherhart 提出了粒子群算法。

粒子群算法其实也是一种演化计算技术,该算法将鸟群运动模型中的栖息地类比于所求问题空间中可能解的位置,通过个体间的信息传递,导引整个群体向可能解的方向移动, 在求解过程中逐步增加发现较好解的可能性。

群体中的鸟被抽象为没有质量和体积的“粒子”,通过这些“粒子”间的相互协作和信息共享,使其运动速度受到自身和群体的历史运动状态信息的影响。

以自身和群体的历史最优位置对粒子当前的运动方向和运动速度加以影响,较好地协调粒子本身和群体之间的关系,以利于群体在复杂的解空间中进行寻优操作。

粒子群理论求解优化问题的,算法中每个粒子都代表问题的一个潜在解,每个粒子对应一个由适应度函数决定的适应度值。

粒子的速度决定了粒子移动的方向和距离,速度随自身及其他粒子的移动经验进行动态调整,从而实现个体在可解空间中的寻优。

PSO 算法首先在可行解空间中初始化一群粒子,每个粒子都代表极值优化问题的一个潜在最优解,用位置、速度和适应度值三项指标表示该粒子特征,适应度值由适应度函数计算得到,其值的好坏表示粒子的优劣。

粒子在解空间中运动,通过跟踪个体极值 Pbest 和群体极值Gbest 更新个体位置。

个体极值 Pbest 是指个体所经历位置中计算得到的适应度值最优位置,群体极值 Gbest 是指种群中的所有粒子搜索到的适应度最优位置。

粒子每更新一次位置,就计算一次适应度值,并且通过比较新粒子的适应度值和个体极值、群体极值的适应度值更新个体极值 Pbest 和群体极值 Gbest 位置。

假设在一个D 维的搜索空间中,由n 个粒子组成的种群X=(X1,X2,…,Xn ),其中第i 个粒子表示为一个D 维的向量T 21...X ),,(iD i i i x x x =代表第 i 个粒 子在D 维搜索空间中的位置,亦代表问题的一个潜在解。

根据目标函数即可计算出每个粒子位置Xi 对应的适应度值。

第i 个粒子的速度为T 21...V ),,(iD i i i V V V =,其个体极值为T 21...P ),,(iD i i i P P P =,种群的群体极值为T 21...P P ),,(gD g g g P P =。

在每次迭代过程中粒子通过个体极值和群体极值更新自身的速度和位置,即)()(V 22111k id k id k gd k id k id k id X P r c X P r c V -+-+=+ωid k k id V X 11k id X +++=其中ω为惯性权重,d = l ,2,…,D ;i = l ,2 ,…,n ;k 为当前迭代次数为粒子的速度;c1和c2是非负的常数,称为加速度因子;r1和r2是分布于[0,1]区间的随机数。

为防止粒子的盲目搜索,一般建议将其位置和速度限制在一定的区间]X [max max X ,—、]X [max max X ,—。

2.案例背景问题描述本案例寻优的非线性函数为:71289.2x sin f(x )22cos 2cos 2222-+++=+y x e y x y ππ函数图形如下图所示。

图1 函数图像从函数图像可以看出,该函数有很多局部最优点,而极限位置为(0,0),在(0,0)附近取得极大值。

解题思路及步骤基于PSO 算法的函数极值寻优算法流程图如图2所示。

图2 算法流程其中,粒子和速度初始化随机初始化粒子速度和粒子位置;由第一章中的公式计算粒子适应度值;根据初始粒子适应度值确定个体极值和群体极值;根据公式更新粒子速度和位置;根据新种群中粒子适应度值更新个体极值和群体极值。

本题中,适应度函数为函数表达式,适应度值为函数值。

种群粒子数设置为20,每个粒子的维数为2,算法迭代次数定为300次。

编程实现根据PSO算法原理,在MATLAB里编程实现基于PSO算法的函数极值寻优算法。

设置PSO算法的运行参数程序代码如下:%% 清空环境clcclear%% 参数初始化%粒子群算法中的两个参数c1 = ; c2 = ;maxgen=300; % 进化次数 sizepop=20; %种群规模Vmax=; Vmin=;popmax=2;popmin=-2; %速度和个体最大最小值种群初始化随机初始化粒子位置和粒子速度,并根据适应函数计算粒子适应度值。

%% 产生初始粒子和速度for i=1:sizepop%随机产生一个种群pop(i,:)=2*rands(1,2); %初始种群V(i,:)=*rands(1,2); %初始化速度%计算适应度fitness(i)=fun(pop(i,:)); %计算粒子的适应度值end适应度函数代码如下:function y = fun(x)%函数用于计算粒子适应度值 %x input 输入粒子 %y output 粒子适应度值y=sin( sqrt(x(1).^2+x(2).^2) )./sqrt(x(1).^2+x(2).^2)+exp((cos(2*pi*x (1))+cos(2*pi*x(2)))/2);寻找初始极值%% 个体极值和群体极值[bestfitness bestindex]=max(fitness);zbest=pop(bestindex,:); %全局最佳gbest=pop; %个体最佳fitnessgbest=fitness; %个体最佳适应度值fitnesszbest=bestfitness; %全局最佳适应度值迭代寻优根据上文中的公式更新粒子位置和速度,并且根据新粒子的适应度值更新个体极值和群体极值。

程序代码如下:%% 迭代寻优for i=1:maxgenfor j=1:sizepop%速度更新V(j,:) = V(j,:) + c1*rand*(gbest(j,:) - pop(j,:)) +c2*rand*(zbest - pop(j,:));V(j,find(V(j,:)>Vmax))=Vmax;V(j,find(V(j,:)<Vmin))=Vmin;%种群更新pop(j,:)=pop(j,:)+V(j,:);pop(j,find(pop(j,:)>popmax))=popmax;pop(j,find(pop(j,:)<popmin))=popmin;%适应度值fitness(j)=fun(pop(j,:));endfor j=1:sizepop%个体最优更新if fitness(j) > fitnessgbest(j)gbest(j,:) = pop(j,:);fitnessgbest(j) = fitness(j);end%群体最优更新if fitness(j) > fitnesszbestzbest = pop(j,:);fitnesszbest = fitness(j);endendyy(i)=fitnesszbest; %每代最优值记录在yy数组中end结果分析PSO算法反复迭代300次,画出每代个体适应度值变化图形,程序代码如下:plot(yy)title('最优个体适应度','fontsize',12);xlabel('进化代数','fontsize',12);ylabel('适应度','fontsize',12);最优个体适应度值变化如图三所示。

图3 最优个体适应度值最终得到的最优个体适应度值为,对应的粒子位置为(,),PSO算法寻优得到的最优值接近函数实际最优值。

相关主题