用MATLAB编写PSO算法及实例

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

用MATLAB编写PSO算法及实例

用MATLAB 编写PSO 算法及实例

1.1 粒子群算法

PSO 从这种模型中得到启示并用于解决优化问题。PSO 中,每个优化问题的潜在解都是搜索空间中的一只鸟,称之为粒子。所有的粒子都有一个由被优化的函数决定的适值( fitness value) ,每个粒子还有一个速度决定它们飞翔的方向和距离。然后粒子们就追随当前的最优粒子在解空间中搜索。

PSO 初始化为一群随机粒子(随机解),然后通过迭代找到最优解。在每一次迭代中,粒子通过跟踪两个极值来更新自己;第一个就是粒子本身所找到的最优解,这个解称为个体极值;另一个极值是整个种群目前找到的最优解,这个极值是全局极值。另外也可以不用整个种群而只是用其中一部分作为粒子的邻居,那么在所有邻居中的极值就是局部极值。

假设在一个维的目标搜索空间中,有个粒子组成一个群落,其中第个粒子表示为一个维的向量

,。

第个粒子的“飞行 ”速度也是一个维的向量,记为

,。

第个粒子迄今为止搜索到的最优位置称为个体极值,记为

,。

整个粒子群迄今为止搜索到的最优位置为全局极值,记为

在找到这两个最优值时,粒子根据如下的公式(1.1)和( 1.2)来更新自己的速度

D N i D ),,,(21iD i i i x x x X =N i ,,2,1 =i D ),,21i iD i i v v v V ,(=3,2,1 =i i ),,,(21iD i i best p p p p =N i ,,2,1 =),,,(21gD g g best p p p g =

和位置:

(1.1) (1. 2)

其中:和为学习因子,也称加速常数(acceleration constant),和为

[0,1]范围内的均匀随机数。式(1.1)右边由三部分组成,第一部分为“惯性(inertia)”或“动量(momentum)”部分,反映了粒子的运动“习惯(habit)”,代表粒子有维持自己先前速度的趋势;第二部分为“认知(cognition)”部分,反映了粒子对自身历史经验的记忆(memory)或回忆(remembrance),代表粒子有向自身历史最佳位置逼近的趋势;第三部分为“社会(social)”部分,反映了粒子间协同合作与知识共享的群体历史经验。

二、算法设计

2.1 算法流程图

2.2 算法实现

算法的流程如下:

())

(2211id gd id id id id x p r c x p r c v w v -+-+*=id id id v x x +=1c 2c 1r 2

r

① 初始化粒子群,包括群体规模N ,每个粒子的位置i x 和速度i V

② 计算每个粒子的适应度值][i F it ;%它的适应度就是指目标函数的值。一般来说,目标函数的选择由具体问题来决定,假如是背包问题,适应度即放入包中物体的总价格。 初始粒子位置和速度的位置一般随机产生。但是在某些领域,如果已有其他的算法可以产生可行解的话,可以用这个可行解来初始化,这样更容易得到最优的解

③ 对每个粒子,用它的适应度值][i F it 和个体极值)(i p best 比较,如果

)(][i p i F best it > ,则用][i Fit 替换掉)(i best p ;

④ 对每个粒子,用它的适应度值][i Fit 和全局极值best g 比较,如果)(][i p i F best it >则用][i F it 替best g ;

⑤ 根据公式(1.1),(1.2)更新粒子的速度i v 和位置i x ;

⑥ 如果满足结束条件(误差足够好或到达最大循环次数)退出,否则返回②。

2.3 参数选择

本算法中主要的参数变量为w (惯性权值),1c ,2c (加速因子),N (种群数),

M (迭代次数),D (粒子维数)。

(1)种群规模

通常,种群太小则不能提供足够的采样点,以致算法性能很差;种群太大尽管可以增加优化信息,阻止早熟收敛的发生,但无疑会增加计算量,造成收敛时间太长,表现为收敛速度缓慢。种群规模一般设为100~1000。本文选择种群规模为100。

(2)最大迭代次数

迭代次数越多能保证解的收敛性,但是影响运算速度,本文选1000次。

(3)惯性权值

惯性权重表示在多大程度上保留原来的速度。较大,全局收敛能力强,局部收敛能力弱;较小,局部收敛能力强,全局收敛能力弱。本文选0.6。

(4)加速因子

加速常数

和分别用于控制粒子指向自身或邻域最佳位置的运动。文献[20]建议,并通常取。本文也取。

(5)粒子维数

本文中粒子维数取决于待优化函数的维数。

需要说明的是,本文的程序允许改变这些参数,因为本文编写的程序参照matlab 工具箱,留给用户解决这类问题一个接口函数,上述的各个参数正是接口函数的参数,因此允许改变。另外对于和c 也可采用变参数法,即随迭代次数增加,利用经验公式使它们动态调整,本文采用固定值。

3.1求三维函数f=x(1).^2+x(2).^2+x(3).^2 的最小值

步骤:1.初始化x,v; 2.求出每个粒子的适应值;3.初始化pb,pg 个体最优和全局最优;4.根据式子更新x,v; 5.是否满足条件,满足跳出

w w w 2c 2c 0.421≤+=c c φ221==c c 221==c c w

循环,否则重复2-4步

尝试编码:

(1)pso.m 文件

%此算法是PSO算法,汪汪的20161024号版本

function[xm,fv]=PSO(fitness,N,c1,c2,w,M,D)

%{

xm,fv算法最后得到的最优解时的x及最优解,fitness为适应度,即要优化的目标函数,N为种群数量,c1,c2为学习因子,w为惯性权重,M为迭代次数,D为粒子的维数

%}

format long;

%初始化种群

for i=1:N

for j=1:D

x(i,j)=randn; %随机初始化位置

v(i,j)=randn; %随机初始化速度

end

end

%先计算各个粒子的适应度pi,并初始化y-粒子个体极值,pg-全局极值

for i=1:N

p(i)=fitness(x(i,:)); %适应度问题:将x(i,:)改成x(i,j)是否可以,答不能 y(i,:)=x(i,:); %个体极值

end

相关文档
最新文档