(完整word版)基本粒子群算法的原理和matlab程序.doc
粒子群_Matlab程序代码

粒子群优化算法(panicle swarm optimization ,PSO)是kennedy 和Eberhart 在研究鸟类和鱼类的群体行为基础上于1995年提出的一种群智能算法,其思想米源予人工生命和演化计算理论,模仿鸟群飞行觅食行为,通过鸟集体协作使群体达到最优。
1.粒子群算法的原理PSO 中,每个优化问题的解看作搜索空间中的一只鸟(即粒子),所有的粒子都有一个被优化的函数决定的适应值,并且有一个速度决定它们飞翔的方向和速率,粒子们追随当前的最优粒子在解空间中搜索。
算法首先初始化一群随机粒子,然后通过迭代找到最优解。
在每一次迭代中,粒子通过跟踪两个“极值”即个体极值和全局极值来更新自己的速度与位置。
在D 维目标搜索空间中,由种群数为m 的粒子组成粒子群,其中第f 个粒子在第d 维的位置为Xid ,其飞行速度为Vid ,该粒子当前搜索到的最优位置为Pid(goodvalue)和整个粒子群当前的最优位置Pgd(bestvalue)。
每维的速度与位置更新公式如下112(1)()(1)()(1)id id id id id id v v c rand p x c rand g x ω+=⨯+⨯⨯-+⨯⨯-L 11(2)id id id x x v ++=+LW 为惯性权重,C1和C2为学习因子,rand ()——[0,1]范围内变化的随机数。
2.参数介绍与设置(1)ww 是保持粒子运动惯性的参数,能使种群扩展搜索空间,获得较好的求解效果。
较大的w 有利于群体在更大的范围内进行搜索。
而较小的w 能够保证群体收敛到最优位置,所以w 的选择及在迭代中的变化对搜索能力和跳出局优能力具有重要影响。
一般将w 设定为0.8左右。
(1)加速因子c1和c2c1和c2用于调整粒子自身经验和社会经验在其运动中的作用,表示将每个粒子拉向pbest 和gbest 位置的随机加速项的权重,低的值允许粒子在被拉回前可以在目标区域外徘徊, 而高的值则导致粒子突然冲向或越过目标区域。
基本粒子群算法MATLAB编程

v(i,:)=w*v(i,:)+c1*rand*(p(i,:)-x(i,:))+c2*rand*(pg-x(i,:));
x(i,:)=x(i,:)+v(i,:);
if fitness(x(i,:),D)<fitness(p(i,:),D)
p(i,:)=x(i,:);
end
if fitness(p(i,:),D)<fitness(pg,D)
pg=p(i,:);
end
end பைடு நூலகம்
Pbest(t)=fitness(pg,D);
end
%最后给出计算结果
disp('*************************************')
disp('函数的全局最优位置为:')
Solution=pg'
disp('最后得到的优化极值为:')
Result=Pbest(t)
disp('*************************************')
clear all;
%clc;
format long;
%给定初始条件
c1=1.4962;%学习因子1
c2=1.4962;%学习因子2
w=0.7298; %惯性权重
MaxDT=1000;%最大迭代数
D=10;%搜索空间维数
N=40;%初始化群体个体数目
%初始化种群的个体(可以在这里限定位置和速度的范围)
pg=x(1,:);%Pg为全局最优
for i=2:N
粒子群算法 系统辨识理论及Matlab仿真课件

8.9.3 算法流程
(1)初始化:设定参数运动范围,设定学习因子 c1、c2 ,最 大进化代数G ,kg 表示当前的进化代数。在一个D 维参数 的搜索解空间中,粒子组成的种群规模大小为Size,每个粒 子代表解空间的一个候选解,其中第 i个粒子在整个解空间 的位置表示为Xi ,速度表示为Vi 。第 个粒子从初始到当前 迭代次数搜索产生的最优解,个体极值Pi ,整个种群目前 的最优解为BestS 。随机产生Size个粒子,随机产生初始种 群的位置矩阵和速度矩阵。
其中后者为全局最大点。
全局粒子群算法中,粒子i 的邻域随着迭代次数 的增加而逐渐增加,开始第一次迭代,它的邻域 粒子的个数为0,随着迭代次数邻域线性变大,最 后邻域扩展到整个粒子群。全局粒子群算法收敛 速度快,但容易陷入局部最优。而局部粒子群算 法收敛速度慢,但可有效避免局部最优。
全局粒子群算法中,每个粒子的速度的更新是 根据粒子自己历史最优值Pi 和粒子群体全局最优 值Pg 。为了避免陷入局部极小,可采用局部粒子 群算法,每个粒子速度更新根据粒子自己历史最
PSO算法首先初始化为一群随机粒子(随机解), 然后通过迭代找到最优解。在每一次迭代中,粒子 通过跟踪两个"极值"来更新自己的位置。第一个极 值是粒子本身所找到的最优解,这个解叫做个体极 值。另一个极值是整个种群目前找到的最优解,这 个极值称为全局极值。另外也可以不用整个种群而 只是用其中一部分作为粒子的邻居,那么在所有邻 居中的极值就是全局极值。
(2) 个体评价(适应度评价):将各个粒子初始 位置作为个体极值,计算群体中各个粒子的 初始适应值f(Xi) ,并求出种群最优位置。
(3) 更新粒子的速度和位置,产生新种群,并对粒子的速度和 位置进行越界检查,为避免算法陷入局部最优解,加入一 个局部自适应变异算子进行调整。
粒子群算法matlab程序

粒子群算法matlab程序粒子群算法(PSO)是一种基于群体智能的求解优化问题的算法。
其通过模拟鸟群等大规模群体行为,实现全局搜索和基于群体协作的局部搜索。
在PSO中,通过一组粒子(每个粒子代表一个解)来搜索问题的解空间,在搜索过程中,粒子的位置表示该解在解空间中的位置,速度表示该解在该方向(即属性)上的变化速率,最终达到全局最优解或局部最优解。
PSO算法有着简单易懂、实现简便、计算速度快以及易于与其他算法结合等优点。
下面我将介绍一下如何使用matlab编写简单的粒子群算法程序。
程序主要分为以下步骤:1.初始化在程序开始之前需要对粒子进行初始化操作,其中需要确定粒子群的大小、每个粒子的位置、速度等初始参数。
2.计算适应值计算每个粒子的适应值,即根据当前位置计算该解的适应值。
适应值可以根据实际问题进行定义,如最小化目标函数或最大化收益等。
3.更新粒子速度和位置这一步是PSO算法的核心步骤,通过改变粒子的速度和位置来找到更优的解。
其核心公式为:v(t+1) = w * v(t) + c1 * rand() * (pbest - x(t)) + c2 * rand() * (gbest - x(t)) x(t+1) = x(t) + v(t+1)其中w是惯性权重,c1、c2是学习因子,pbest是该粒子的历史最优解,gbest 是当前全局最优解。
4.更新pbest和gbest在每次更新位置之后需要更新每个粒子自己的历史最优解以及全局最优解。
5.停止条件判断设定停止条件,如最小适应值误差、迭代次数、最大迭代次数等,如果达到了停止条件,则程序结束,输出全局最优解。
下面是一份简单的PSO算法的matlab代码:function [best_fit, best_x] = pso(func, dim, lb, ub, max_iter, swarm_size, w, c1, c2)%初始化粒子v = zeros(swarm_size, dim);x = repmat(lb, swarm_size, 1) + repmat(ub - lb, swarm_size, 1) .* rand(swarm_size, dim);pbest = x;[best_fit, best_idx] = min(func(x));gbest = x(best_idx,:);%开始迭代for iter = 1 : max_iter%更新速度和位置v = w * v + c1 * rand(swarm_size, dim) .* (pbest - x) + c2 * rand(swarm_size, dim) .* repmat(gbest, swarm_size, 1) - x;x = x + v;%边界处理x = max(x, repmat(lb, swarm_size, 1));x = min(x, repmat(ub, swarm_size, 1));%更新pbest和gbestidx = func(x) < func(pbest);pbest(idx,:) = x(idx,:);[min_fit, min_idx] = min(func(pbest));if min_fit < best_fitbest_fit = min_fit;best_x = pbest(min_idx,:);endendend在使用上述代码时,需要定义适应值函数(func)、解空间维度(dim)、每个维度的上界(ub)与下界(lb)、最大迭代次数(max_iter)、粒子群大小(swarm_size)、惯性权重(w)、学习因子(c1、c2)等参数。
粒子群算法matlab

粒子群算法matlab本文旨在介绍粒子群算法Matlab。
粒子群算法是一种全局搜索和优化技术,它的目的是通过可重复的迭代搜索来找到搜索空间中的最优解。
本文详细阐述了粒子群算法的基本原理,讨论了它的设计思想和参数设置,以及如何将粒子群算法应用于Matlab中。
最后,本文介绍了若干数值实例,来验证粒子群算法的可行性。
关键词:子群算法;Matlab;全局优化;迭代搜索1.论粒子群算法(Particle Swarm Optimization,PSO)是一种动态优化算法,它能自动识别全局最优解。
它结合了群众智慧和机器学习,是一种运用群体智能手段实现全局优化的有效方法。
由于其计算代价低廉,计算时间短,解决问题效果良好,因此得到了广泛的应用。
Matlab是屡获殊荣的数值计算软件,它能够对各类数据进行可视化分析和仿真模拟。
由于Matlab具有丰富的工具箱,可以快速准确地解决复杂的科学问题,因此它已经成为科学计算的标准软件。
本文将主要介绍如何将粒子群算法应用于Matlab中。
2.法原理粒子群算法是由Kennedy和Eberhart在1995年提出的,它也被称为Zebra算法,是建立在群体智能概念上的,由群体中全局优化算法之一。
粒子群算法以群体中的每个个体的最优位置和最优速度为基础,通过可重复的迭代搜索来找到搜索空间中的最优解。
算法的设计基本思想是:建立一组虚拟粒子,每个粒子代表一个可能的解决方案,每个粒子有一个位置和一个速度。
算法通过不断迭代,让这些粒子像鱼群一样游动,从而找到最优解。
3.法设计粒子群算法由三个参数组成:全局最优系数(cg)、社会系数(cs)和惯性权重(w)。
cg和cs是粒子群算法的两个基本系数,它们分别代表了粒子群对全局最优和社会最优的响应程度。
w是惯性权重,它代表了粒子群对历史最优位置的惯性搜索能力。
通常情况下,系数cg和w会在一定范围内不断变化,使得算法能够更快地找到最优解。
4. Matlab实现为了在Matlab中实现粒子群算法,需要对Matlab的调用进行必要的设置。
matlab 粒子群优化算法

matlab 粒子群优化算法(最新版)目录一、引言二、粒子群优化算法的原理与实现1.粒子群优化算法的概念2.粒子群优化算法的基本思想3.粒子群优化算法的实现a.MATLAB 程序实现b.Python 程序实现三、粒子群优化算法的应用案例1.目标函数极小值问题2.飞行控制器优化问题四、粒子群优化算法的优缺点1.优点2.缺点五、结论正文一、引言粒子群优化算法(Particle Swarm Optimization,简称 PSO)是一种基于群体智能的优化算法,起源于对鸟群捕食行为的研究。
该算法通过模拟粒子在空间中的运动,利用粒子之间的协作和信息共享来寻找最优解。
在工程领域中,粒子群优化算法被广泛应用于解决各种优化问题。
本文将介绍粒子群优化算法的原理与实现,以及在 MATLAB 和 Python 中的程序实现。
二、粒子群优化算法的原理与实现1.粒子群优化算法的概念粒子群优化算法是一种基于群体智能的优化算法,它模拟了鸟群在寻找食物过程中的搜索行为。
在算法中,粒子被抽象为没有质量和体积的微粒,在 N 维空间中表示为矢量。
每个粒子都有一个由目标函数决定的适应值,并且知道自己到目前为止发现的最好位置和现在的位置。
2.粒子群优化算法的基本思想粒子群优化算法的基本思想是通过群体中个体之间的协作和信息共享来寻找最优解。
每个粒子在每一代都会根据自身当前位置的适应值、全局最优位置的适应值和其他粒子位置的适应值来更新自己的位置和速度。
3.粒子群优化算法的实现a.MATLAB 程序实现在 MATLAB 中,可以利用内置的优化工具箱实现粒子群优化算法。
以下是一个简单的例子:```matlabfunction opt = pso(func, lb, ub, num_particles,num_iterations)% 初始化粒子群particles = rand(num_particles, 1);velocities = rand(num_particles, 1);personal_best_positions = zeros(num_particles, 1);global_best_position = particles(1);% 迭代更新粒子群for gen = 1:num_iterations% 计算每个粒子的适应值fitness_values = func(particles);% 更新每个粒子的速度和位置for i = 1:num_particles% 更新速度r1 = rand(1, 1);r2 = rand(1, 1);velocities(i) = w * velocities(i) + c1 * r1 * (personal_best_position(i) - particles(i)) + c2 * r2 *(global_best_position - particles(i));% 更新位置particles(i) = particles(i) + velocities(i);end% 更新个体最佳位置和全局最佳位置for i = 1:num_particlesif fitness_values(i) <personal_best_positions(i)personal_best_positions(i) = particles(i);endendif fitness_values(global_best_position) <fitness_values(personal_best_positions(1))global_best_position =personal_best_positions(1);endend% 返回最优解opt = personal_best_positions(global_best_position);end```b.Python 程序实现在 Python 中,可以使用 scipy.optimize 库中的 minimize 函数实现粒子群优化算法。
matlab自带粒子群算法

matlab自带粒子群算法中括号在MATLAB中具有重要的功能和应用,其中之一就是在自带的粒子群算法中。
粒子群算法(Particle Swarm Optimization,PSO)是一种基于群体智能的优化算法,广泛应用于解决优化问题。
而MATLAB则提供了丰富的工具箱,包括自带的粒子群算法函数,方便用户直接使用这一高效优化算法来解决复杂的问题。
本文将详细介绍MATLAB中自带的粒子群算法的基本概念、工作原理、使用方法,以及一些注意事项和优化技巧。
一、粒子群算法的基本概念和原理粒子群算法是一种启发式算法,模拟了鸟群或鱼群等群体的行为进行问题求解。
算法的基本思想是将可能的解空间看作是粒子的搜寻范围,每个粒子代表一种解,通过迭代的方式不断更新粒子的位置和速度,以找到最优解。
1.1 粒子的位置和速度粒子的位置是解的表示,而速度则是解的搜索方向和速率。
在粒子群算法中,可以将解空间看作是一个多维空间,每个粒子都有一个位置向量,表示该粒子对应的解。
而速度向量则表示了该粒子在搜索过程中的移动方向和速率。
1.2 适应度函数适应度函数用于评价每个粒子的解的质量,也称为目标函数。
在优化问题中,我们希望通过粒子群算法求解的是目标函数的最小(或最大)值。
因此,适应度函数的选择在粒子群算法中尤为重要,它直接影响到算法的性能和效果。
1.3 群体的协作群体的协作是粒子群算法的核心思想之一。
每个粒子通过与其他粒子之间的信息交流来调整自己的搜索方向和速率,从而达到更好的解。
这种信息交流一般通过粒子之间的位置和速度更新公式来实现。
二、MATLAB中自带的粒子群算法函数MATLAB提供了自带的粒子群算法函数,可以直接调用并应用于问题求解。
下面将介绍一些常用的粒子群算法函数及其使用方法。
2.1 PSO函数在MATLAB中,可以使用pso函数来进行粒子群算法的优化。
该函数的基本形式如下:[x,fval,exitFlag,output] = pso(problem)其中,problem是一个结构体,用于存储问题的相关信息,包括目标函数、约束条件等。
粒子群算法文档【精品文档】(完整版)

§6.4 粒子群优化算法人们提出了群搜索概念,利用它们来解决现实中所遇到的优化问题,并取得了良好的效果.粒子群优化算法就是群体智能中的一种算法.粒子群算法是一种演化计算技术,是一种基于迭代的优化工具,系统初始化为一组随机解,通过迭代搜寻最优值,将鸟群运动模型中栖息地类比为所求问题空间中可能解的位置,利用个体间的传递,导致整个群体向可能解的方向移动,逐步发现较好解.6.4.1 基本粒子群算法粒子群算法,其核心思想是对生物社会性行为的模拟.最初粒子群算法是用来模拟鸟群捕食的过程,假设一群鸟在捕食,其中的一只发现了食物,则其他一些鸟会跟随这只鸟飞向食物处,而另一些会去寻找更好的食物源.在捕食的整个过程中,鸟会利用自身的经验和群体的信息来寻找食物.粒子群算法从鸟群的这种行为得到启示,并将其用于优化问题的求解.若把在某个区域范围内寻找某个函数最优值的问题看作鸟群觅食行为,区域中的每个点看作一只鸟,现把它叫粒子(particle).每个粒子都有自己的位置和速度,还有一个由目标函数决定的适应度值.但每次迭代也并不是完全随机的,如果找到了新的更好的解,将会以此为依据来寻找下一个解.图6.21给出了粒子运动的思路图.图6.21粒子运动的路线图下面给出粒子群算法的数学描述.假设搜索空间是D维的,群中的第i个粒子能用如下D维矢量所表示:12(,,,)i i i iD X x x x '=(6.43)每个粒子代表一个潜在的解,这个解有D 个维度.每个粒子对应着D 维搜索空间上的一个点.粒子群优化算法的目的是按照预定目标函数找到使得目标函数达到极值的最优点.第i 个粒子的速度或位置的变化能用如下的D 维向量表示:12(,,,)i i i iD V v v v '= (6.44)为了更准确地模拟鸟群,在粒子群优化中引入了两个重要的参量.一个是第i 个粒子曾经发现过的自身历史最优点(Personal best ,pbest),可以表示为:12(,,,)i i i iD P p p p '= (6.45)另一个是整个种群所找到的最优点(Global best ,gbest),可以表示为:12(,,,)g g g gD P p p p '= (6.46)PSO 初始化为一群随机粒子(随机解),然后通过迭代找到最优解.在每一次的迭代中,粒子通过跟踪两个“极值”(i P 和g P )来更新自己.在找到这两个最优值后,粒子通过下面的公式来更新自己的速度和位置:1122(1)()()(()())()(()())id id id id gd id v t wv t c r t p t x t c r t p t x t +=+-+-,(速度更新公式)(6.46)(1)()(1)id id id x t x t v t +=++(位置更新公式) (6.47)其中w 称之为惯性因子,在一般情况下,取1w =,1,2,,t G = 代表迭代序号,G 是预先给出的最大迭代数;1,2,,d D = , 1,2,,i N = ,N 是群的大小;1c 和2c 是正的常数,分别称为自身认知因子和社会认知因子,用来调整i P 和g P 的影响强度.1r 和2r 是区间[0,1]内的随机数.由(6.46)和(6.47)构成的粒子群优化称为原始型粒子群优化.从社会学的角度来看,公式(6.47)的第一部分称为记忆项,表示上次优化中的速度的影响;公式第二部分称为自身认知项,可以认为是当前位置与粒子自身最优位置之间的偏差,表示粒子的下一次运动中来源于自己经验的部分;公式的第三部分称为社会认知项,是一个从当前位置指向种群最佳位置的矢量,反映了群内粒子的协作和知识共享.可见,粒子就是通过自己的经验和同伴中最好的经验来决定下一步的运动.随着迭代进化的不断进行,粒子群逐渐聚集到最优点处,图6.22 给出了某个优化过程中粒子逐渐聚集的示意图.图6.22 粒子群在优化过程聚集示意图 综上所述,我们得到如下基本粒子群算法流程:(1) 设定参数,初始化粒子群,包括随机位置和速度;(2) 评价每个粒子的适应度;(3) 对每个粒子,将其当前适应值与其曾经访问过的最好位置pbest 作比较,如果当前值更好,则用当前位置更新pbest ;(4) 对每个粒子,将其当前适应值与种群最佳位置gbest 作比较,如果当前值更好,则用当前位置更新gbest ;(5) 根据速度和位置更新公式更新粒子;(6)若未满足结束条件则转第二步;否则停止迭代.迭代终止条件根据具体问题一般选为迭代至最大迭代次数或粒子群搜索到的最优位置满足预定的精度阈值.6.4.2 粒子群算法的轨迹分析1998年,Ozcan 在文献[13]中首先对粒子在一维空间的轨迹进行了讨论,并在1999年将粒子运动的轨迹分析推广到多维空间的情形,2002年,文献[14]从矩阵代数的观点讨论了粒子的轨迹问题,本节采用[15]中的差分方程思想分别讨论单个粒子在一维以及二维空间的轨迹问题。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基本粒子群算法的原理和matlab 程序作者—— niewei120 (nuaa)一、粒子群算法的基本原理粒子群优化算法源自对鸟群捕食行为的研究,最初由Kennedy 和 Eberhart 提出,是一种通用的启发式搜索技术。
一群鸟在区域中随机搜索食物,所有鸟知道自己当前位置离食物多远,那么搜索的最简单有效的策略就是搜寻目前离食物最近的鸟的周围区域。
PSO 算法利用这种模型得到启示并应用于解决优化问题。
PSO 算法中,每个优化问题的解都是粒子在搜索空间中的位置,所有的粒子都有一个被优化的目标函数所决定的适应值,粒子还有一个速度值决定它们飞翔的方向和距离,然后粒子群就追随当前的最优粒子在解空间中搜索。
PSO 算法首先在给定的解空间中随机初始化粒子群,待优化问题的变量数决定了解空间的维数。
每个粒子有了初始位置与初始速度。
然后通过迭代寻优。
在每一次迭代中,每个粒子通过跟踪两个“极值”来更新自己在解空间中的空间位置与飞翔速度。
第一个极值就是单个粒子本身在迭代过程中找到的最优解粒子,这个粒子叫做个体极值。
另一个极值是种群所有粒子在迭代过程中所找到的最优解粒子,这个粒子是全局极值。
上述的方法叫全局粒子群算法。
如果不用种群所有粒子而只用其中一部分作为该粒子的邻居粒子,那么在所有邻居粒子中的极值就是局部极值,该方法称为局部PSO 算法。
速度、位置的更新方程表示为:每个粒子自身搜索到的历史最优值p i,p i=(p i1 ,p i2 ,....,p iQ ), i=1,2,3,....,n 。
所有粒子搜索到的最优值p g, p g=(p g1 ,p g2,....,p gQ ),注意这里的p g只有一个。
是保持原来速度的系数,所以叫做惯性权重。
是粒子跟踪自己历史最优值的权重系数,它表示粒子自身的认识,所以叫“认知”。
通常设置为 2 。
是粒子跟踪群体最优值的权重系数,它表示粒子对整个群体知识的认识,所以叫做“社会知识”,经常叫做“社会”。
通常设置为2。
是[0,1] 区间内均匀分布的随机数。
是对位置更新的时候,在速度前面加的一个系数,这个系数我们叫做约束因子。
通常设置为 1。
粒子群优化算法的流程:二、粒子群算法的matlab实现主函数:function[Result,OnLine,OffLine,MinMaxMeanAdapt]=PSO_Stand(SwarmSize,ParticleSize,ParticleScope,IsS tep,IsDraw,LoopCount,IsPlot)%输入参数: SwarmSize:种群大小的个数%输入参数: ParticleSize:一个粒子的维数%输入参数: ParticleScope:一个粒子在运算中各维的范围;% ParticleScope 格式 :% 3 维粒子的ParticleScope 格式 :% [x1Min,x1Max% x2Min,x2Max% x3Min,x3Max]%输入参数%输入参数:InitFunc: 初始化粒子群函数:StepFindFunc:单步更新速度,位置函数%输入参数: AdaptFunc:适应度函数%输入参数: IsStep:是否每次迭代暂停;IsStep= 0,不暂停,否则暂停。
缺省不暂停%输入参数: IsDraw:是否图形化迭代过程; IsDraw=0,不图形化迭代过程,否则,图形化表示。
缺省不图形化表示%输入参数: LoopCount :迭代的次数;缺省迭代100 次%输入参数:% IsPlot:控制是否绘制在线性能与离线性能的图形表示;IsPlot=0,不显示;IsPlot=1;显示图形结果。
缺省IsPlot=1%返回值: Result 为经过迭代后得到的最优解%返回值: OnLine 为在线性能的数据%返回值: OffLine 为离线性能的数据%返回值: MinMaxMeanAdapt为本次完整迭代得到的最小与最大的平均适应度[ParSwarm,OptSwarm]=InitSwarm(SwarmSize,ParticleSize,ParticleScope);%初始化粒子群if IsStep~=0disp(' 开始迭代,按任意键:')pauseend%开始更新算法的调用%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%for k=1:LoopCount%显示迭代的次数:disp('----------------------------------------------------------')TempStr=sprintf(' 第%g 次迭代',k);disp(TempStr);disp('----------------------------------------------------------')%调用一步迭代的算法[ParSwarm,OptSwarm]=BaseStepPso(ParSwarm,OptSwarm,ParticleScope,0.95,0.4,LoopCoun t,k);figure(1);plot(ParSwarm(:,1),ParSwarm(:,2),'g*','markersize',8);grid on;XResult=OptSwarm(SwarmSize+1,1:ParticleSize);%存取本次迭代得到的全局最优值YResult=AdaptFunc(XResult);%计算全局最优值对应的粒子的适应度值if IsStep~=0%XResult=OptSwarm(SwarmSize+1,1:ParticleSize);%YResult=AdaptFunc(XResult);str=sprintf('%g步迭代的最优目标函数值%g',k,YResult);disp(str);disp(' 下次迭代,按任意键继续');pauseend%记录每一步的平均适应度MeanAdapt(1,k)=mean(ParSwarm(:,2*ParticleSize+1));%mean 函数为取有效值函数End初始化函数:function[ParSwarm,OptSwarm]=InitSwarm(SwarmSize,ParticleSize,ParticleScope) %初始化粒子群矩阵,全部设为 [0-1] 随机数 %rand('state',0);ParSwarm=rand(SwarmSize,2*ParticleSize+1);%初始化位置速度历史优化值%对粒子群中位置 ,速度的范围进行调节 for k=1:ParticleSizeParSwarm(:,k)=ParSwarm(:,k)*(ParticleScope(k,2)-ParticleScope(k,1))+ParticleScope(k,1);% 调节速度,使速度与位置的范围一致ParSwarm(:,ParticleSize+k)=ParSwarm(:,ParticleSize+k)*(ParticleScope(k,2)-ParticleScope(k,1))+Pa rticleScope(k,1);end%对每一个粒子计算其适应度函数的值for k=1:SwarmSizeParSwarm(k,2*ParticleSize+1)=AdaptFunc(ParSwarm(k,1:ParticleSize));%计算每个粒子的适应度值end%初始化粒子群最优解矩阵OptSwarm=zeros(SwarmSize+1,ParticleSize);%粒子群最优解矩阵全部设为零[maxValue,row]=max(ParSwarm(:,2*ParticleSize+1));%寻找适应度函数值最大的解在矩阵中的位置(行数 )OptSwarm=ParSwarm(1:SwarmSize,1:ParticleSize);OptSwarm(SwarmSize+1,:)=ParSwarm(row,1:ParticleSize);%将适应度值最大的粒子的位置最为全局粒子的最优值每步更新函数:function[ParSwarm,OptSwarm]=BaseStepPso(ParSwarm,OptSwarm,ParticleScope,MaxW,MinW,LoopCoun t,CurCount)%输入参数: ParSwarm:粒子群矩阵,包含粒子的位置,速度与当前的目标函数值%输入参数: OptSwarm :包含粒子群个体最优解与全局最优解的矩阵%输入参数: ParticleScope:一个粒子在运算中各维的范围;%输入参数: AdaptFunc:适应度函数%输入参数: AdaptFunc:适应度函数%输入参数: MaxW MinW :惯性权重 (系数 )的最大值与最小值%输入参数: CurCount :当前迭代的次数%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%线形递减策略(惯性权值的变化)w=MaxW-CurCount*((MaxW-MinW)/LoopCount);%得到粒子群群体大小以及一个粒子维数的信息[ParRow,ParCol]=size(ParSwarm);%得到粒子的维数ParCol=(ParCol-1)/2;SubTract1=OptSwarm(1:ParRow,:)-ParSwarm(:,1:ParCol);%求解出历史最优值与当前位置的差值%*****更改下面的代码,可以更改c1,c2 的变化 *****c1=2;c2=2;%完成一次粒子位置速度最优值的更新迭代for row=1:ParRowSubTract2=OptSwarm(ParRow+1,:)-ParSwarm(row,1:ParCol);%计算出全局最优值与当前该粒子位置的差值%速度更新公式TempV=w.*ParSwarm(row,ParCol+1:2*ParCol)+c1*unifrnd(0,1).*SubTract1(row,:)+c2*unifrn d(0,1).*SubTract2;%限制速度的代码for h=1:ParColif TempV(:,h)>ParticleScope(h,2)TempV(:,h)=ParticleScope(h,2);endif TempV(:,h)<-ParticleScope(h,2)TempV(:,h)=-ParticleScope(h,2)+1e-10;%加 1e-10 防止适应度函数被零除endend%更新该粒子速度值ParSwarm(row,ParCol+1:2*ParCol)=TempV;%*****更改下面的代码,可以更改约束因子的变化*****a=0.729;%约束因子%位置更新公式TempPos=ParSwarm(row,1:ParCol)+a*TempV;%限制位置范围的代码for h=1:ParColif TempPos(:,h)>ParticleScope(h,2)TempPos(:,h)=ParticleScope(h,2);endif TempPos(:,h)<=ParticleScope(h,1)TempPos(:,h)=ParticleScope(h,1)+1e-10;%加 1e-10 防止适应度函数被零除endend%更新该粒子位置值ParSwarm(row,1:ParCol)=TempPos;%计算每个粒子的新的适应度值ParSwarm(row,2*ParCol+1)=AdaptFunc(ParSwarm(row,1:ParCol));if ParSwarm(row,2*ParCol+1)>AdaptFunc(OptSwarm(row,1:ParCol))OptSwarm(row,1:ParCol)=ParSwarm(row,1:ParCol);endend%寻找适应度函数值最大的解在矩阵中的位置(行数 ),进行全局最优值的改变[maxValue,row]=max(ParSwarm(:,2*ParCol+1));if AdaptFunc(ParSwarm(row,1:ParCol))>AdaptFunc(OptSwarm(ParRow+1,:))OptSwarm(ParRow+1,:)=ParSwarm(row,1:ParCol);End适应度函数:function y=AdaptFunc(x)这个需要针对不同的问题,自己编写;End只要将上面的函数保存到matlab 可搜索路径中,即可调用该函数,使用函数的数据格式即可,例如:PSO_Stand(50,2,[0,1;0,1],1),粒子群数目,目标函数的变量数目,变量的范围值,之后的是显示和应用的函数,参考着程序进行精简即可。