粒子群算法(1)----粒子群算法简介

合集下载

基本粒子群算法

基本粒子群算法

基本粒子群算法粒子群算法(Particle Swarm Optimization,PSO)是一种群体智能算法。

粒子群算法的灵感来源于模拟一群鸟的行为,这些鸟往往会通过互相沟通,得到更好的食物来源。

类比到优化问题中,粒子群算法的每个个体被称为粒子,它们互相传递信息,从而实现全局最优解的搜索。

在粒子群算法中,每个粒子代表了一个解空间内的可行解。

每个粒子的位置被编码成一组向量,这个向量就是这个粒子的位置,每个粒子还有一个速度向量,决定了它在解空间内的运动方向和速度大小。

在每一次迭代中,每个粒子会对自己的位置和速度进行更新,这依赖于当前的个体最优解,和全局最优解。

个体最优解是这个粒子对解空间的局部搜索结果,全局最优解是所有粒子对解空间的全局搜索结果。

粒子群算法通过不断迭代,更新每个粒子的位置和速度,直到达到收敛条件。

收敛条件可以通过迭代次数,目标函数的阈值等来定义。

在应用上,粒子群算法已被广泛应用于优化问题中,包括函数优化,组合优化,路径规划等等。

它的应用在电力系统,通信网络,机器人,图像处理和数据挖掘等领域也被证明是有效的。

在实际应用中,粒子群算法需要注意一些问题。

一是在选择惯性权重时需要遵守准则,即越接近最优解惯性权重应该越小,越远离最优解惯性权重应该越大。

二是需要确定好种群大小,如果种群太小,可能会导致粒子局限于局部最优解,而丢失全局优解的机会。

三是需要合适的约束条件,保证解空间的可行性,尤其是在优化问题中。

综上所述,粒子群算法是一种十分有用的优化算法,它通过模拟鸟群的行为,实现有效的搜索全局最优解。

但是在实际应用中需要注意一些问题,特别是在惯性权重,种群大小和约束条件的确定上,这样才能达到最好的优化效果。

粒子群算法原理

粒子群算法原理

粒子群算法原理粒子群算法(ParticleSwarmOptimization,简称PSO)是一种基于群体智能的启发式算法,它由Ken Kennedy和James Kennedy在1995年发明,其目的是模拟物种在搜寻食物路线的过程。

PSO的思路同于生物群体中存在的社会行为,它根据所有参与计算的粒子(即搜索者)以及它们的历史经验进行搜索,以寻找最优解。

在这里,最优解是指可以满足我们的要求的最佳结果(给定的目标函数的最小值)。

PSO把一个群体看成一组搜索者,每个搜索者搜索有一个动态位置,每一步采用一个较优位置取代先前的位置,称之为粒子。

每个粒子都具有一个当前位置,一个速度,一个粒子最佳位置(全局最佳位置)和一个全局最佳位置(群体最佳位置)。

粒子群算法是一种迭代优化算法,它由以下4个步骤组成:1.始化粒子群:在此步骤中,使用随机算法给每个粒子分配初始位置和速度,通常使用均匀分布。

2.解目标函数:计算每个粒子的位置对应的目标函数值,并记录每个粒子的最佳位置以及群体最佳位置。

3.新粒子位置:根据群体最佳位置和每个粒子的最佳位置,更新每个粒子的位置以及速度,它们的新的位置和速度可以使用如下公式来计算:V(t+1)=V(t)+C1*rand(1)*(Pbest(t)-X(t))+C2*rand(2)*(Gbest(t) -X(t))X(t+1)=X(t)+V(t+1)其中,C1和C2是可调的引力系数,rand(1)和rand(2)是随机数,Pbest(t)和Gbest(t)分别表示每个粒子和群体中最佳位置。

4.复步骤2和3,直到收敛或者达到最大迭代次数。

由于粒子群算法有效而且简单,它已经在许多领域应用,比如多目标优化、复杂系统建模、神经网络训练等。

尽管PSO有许多优点,但它也有一些不足,比如,它可能不能收敛到全局最优解,可能会被局部最优解所困扰。

另外,由于其简单的搜索过程,它的计算速度很快,但是它的搜索效率可能不太高。

粒子群算法解决实际问题

粒子群算法解决实际问题

粒子群算法解决实际问题
粒子群算法(Particle Swarm Optimization, PSO)是一种基于群
体智能的优化算法,该算法模拟了鸟群或鱼群等群体在搜索目标
时的行为。

粒子群算法可以用于解决各种实际问题,包括优化问题、机器学习、图像处理等方面。

在优化问题中,粒子群算法能够帮助寻找最优解。

该算法通过
模拟粒子在搜索空间中的移动来寻找最优解。

每个粒子表示搜索
空间中的一个解,并根据其自身的当前位置和速度进行更新。


子利用个体经验和群体经验进行搜索,以逐渐靠近最优解。

通过
多次迭代,粒子群算法能够逐渐收敛到最优解,从而解决实际问题。

在机器学习领域,粒子群算法可以应用于特征选择、参数优化
等问题。

例如,在特征选择中,粒子群算法可以从原始特征集中
选择出最优的特征子集,以提高机器学习模型的性能和效果。


参数优化中,粒子群算法可以搜索参数空间,以找到最优参数组合,从而优化机器学习模型的表现。

在图像处理中,粒子群算法可以用于图像分割、图像去噪等任务。

例如,在图像分割中,粒子群算法可以对图像进行聚类,将
不同区域的像素归类到不同的群体中,从而实现图像分割的目标。

在图像去噪中,粒子群算法可以通过参数调整和优化,使得模型
能够更好地去除图像中的噪声,提高图像的质量和清晰度。

粒子群算法是一种有效的解决实际问题的算法。

其在优化问题、机器学习和图像处理等领域都有广泛的应用。

通过模拟群体智能
行为,粒子群算法能够通过多次迭代逐渐搜索到最优解,从而实
现问题的优化和解决。

粒子群算法

粒子群算法

粒子群算法原理及简单案例[ python ]介绍粒子群算法(Particle swarm optimization,PSO)是模拟群体智能所建立起来的一种优化算法,主要用于解决最优化问题(optimization problems)。

1995年由 Eberhart和Kennedy 提出,是基于对鸟群觅食行为的研究和模拟而来的。

假设一群鸟在觅食,在觅食范围内,只在一个地方有食物,所有鸟儿都看不到食物(即不知道食物的具体位置。

当然不知道了,知道了就不用觅食了),但是能闻到食物的味道(即能知道食物距离自己是远是近。

鸟的嗅觉是很灵敏的)。

假设鸟与鸟之间能共享信息(即互相知道每个鸟离食物多远。

这个是人工假定,实际上鸟们肯定不会也不愿意),那么最好的策略就是结合自己离食物最近的位置和鸟群中其他鸟距离食物最近的位置这2个因素综合考虑找到最好的搜索位置。

粒子群算法与《遗传算法》等进化算法有很多相似之处。

也需要初始化种群,计算适应度值,通过进化进行迭代等。

但是与遗传算法不同,它没有交叉,变异等进化操作。

与遗传算法比较,PSO的优势在于很容易编码,需要调整的参数也很少。

一、基本概念与遗传算法类似,PSO也有几个核心概念。

粒子(particle):一只鸟。

类似于遗传算法中的个体。

1.种群(population):一群鸟。

类似于遗传算法中的种群。

2.位置(position):一个粒子(鸟)当前所在的位置。

3.经验(best):一个粒子(鸟)自身曾经离食物最近的位置。

4.速度(velocity ):一个粒子(鸟)飞行的速度。

5.适应度(fitness):一个粒子(鸟)距离食物的远近。

与遗传算法中的适应度类似。

二、粒子群算法的过程可以看出,粒子群算法的过程比遗传算法还要简单。

1)根据问题需要,随机生成粒子,粒子的数量可自行控制。

2)将粒子组成一个种群。

这前2个过程一般合并在一起。

3)计算粒子适应度值。

4)更新种群中每个粒子的位置和速度。

粒子群算法matlab代码(PDF)

粒子群算法matlab代码(PDF)

粒子群算法(1)----粒子群算法简介一、粒子群算法的历史粒子群算法源于复杂适应系统(Complex Adaptive System,CAS)。

CAS理论于1994年正式提出,CAS中的成员称为主体。

比如研究鸟群系统,每个鸟在这个系统中就称为主体。

主体有适应性,它能够与环境及其他的主体进行交流,并且根据交流的过程“学习”或“积累经验”改变自身结构与行为。

整个系统的演变或进化包括:新层次的产生(小鸟的出生);分化和多样性的出现(鸟群中的鸟分成许多小的群);新的主题的出现(鸟寻找食物过程中,不断发现新的食物)。

所以CAS系统中的主体具有4个基本特点(这些特点是粒子群算法发展变化的依据):首先,主体是主动的、活动的。

主体与环境及其他主体是相互影响、相互作用的,这种影响是系统发展变化的主要动力。

环境的影响是宏观的,主体之间的影响是微观的,宏观与微观要有机结合。

最后,整个系统可能还要受一些随机因素的影响。

粒子群算法就是对一个CAS系统---鸟群社会系统的研究得出的。

粒子群算法(Particle Swarm Optimization,PSO)最早是由Eberhart和Kennedy于1995年提出,它的基本概念源于对鸟群觅食行为的研究。

设想这样一个场景:一群鸟在随机搜寻食物,在这个区域里只有一块食物,所有的鸟都不知道食物在哪里,但是它们知道当前的位置离食物还有多远。

那么找到食物的最优策略是什么呢?最简单有效的就是搜寻目前离食物最近的鸟的周围区域。

PSO算法就从这种生物种群行为特性中得到启发并用于求解优化问题。

在PSO中,每个优化问题的潜在解都可以想象成d维搜索空间上的一个点,我们称之为“粒子”(Particle),所有的粒子都有一个被目标函数决定的适应值(Fitness Value),每个粒子还有一个速度决定他们飞翔的方向和距离,然后粒子们就追随当前的最优粒子在解空间中搜索。

Reynolds对鸟群飞行的研究发现。

粒子群算法简介

粒子群算法简介

粒子群算法简介粒子群算法是一种常见的优化算法,它以鸟群捕食的过程为模型,通过模拟每个个体在搜索空间中的位置和速度变化,来寻找最优解。

本文将从算法流程、算法优势、应用领域等方面给出详细介绍。

一、算法流程1. 随机初始化群体中每个粒子的位置和速度;2. 评估每个粒子的适应度;3. 根据粒子历史最优位置和全局最优位置,更新粒子速度和位置;4. 重复步骤2、3直到满足停止条件。

粒子群算法的核心在于更新粒子速度和位置,其中位置表示搜索空间中的一个解,速度表示搜索方向和距离。

每个粒子具有自己的历史最优位置,同时全局最优位置则是所有粒子中适应度最优的解。

通过粒子之间的信息共享,使得整个群体能够从多个方向进行搜索,并最终收敛于全局最优解。

二、算法优势粒子群算法具有以下几个优势:1. 算法简单易于实现。

算法设计简单,无需求导和约束,易于编程实现。

2. 全局搜索能力强。

由于粒子之间的信息共享,整个群体具有多种搜索方向,可以有效避免局部最优解问题。

3. 收敛速度较快。

粒子搜索过程中,速度会受历史最优位置和全局最优位置的引导,使得整个群体能够较快向最优解方向靠近。

三、应用领域粒子群算法是一种通用的优化算法,广泛应用于各个领域,包括机器学习、智能控制、模式识别等。

具体应用场景如下:1. 遗传算法的优化问题,例如TSP问题等。

2. 数据挖掘中的聚类分析、神经网络训练等问题。

3. 工业控制、无人机路径规划等实际应用问题。

总之,粒子群算法是一种搜索优化方法,可以为我们解决各种实际应用问题提供帮助。

粒子群算法详解

粒子群算法详解

粒子群算法详解粒子群算法(Particle Swarm Optimization,PSO)是一种模拟鸟群觅食行为的优化算法,通过模拟个体之间的协作和信息共享来寻找最优解。

它是一种全局优化算法,可以应用于各种问题的求解。

粒子群算法的基本思想是通过模拟鸟群的行为来寻找最优解。

在算法中,将待优化问题看作一个多维空间中的搜索问题,将问题的解看作空间中的一个点。

每个解被称为一个粒子,粒子的位置代表当前解的状态,速度代表解的更新方向和速度。

粒子之间通过互相交流信息,以共同寻找最优解。

在粒子群算法中,每个粒子都有自己的位置和速度。

每个粒子根据自身的经验和邻域中最优解的经验来更新自己的速度和位置。

速度的更新由三个因素决定:当前速度、个体最优解和全局最优解。

粒子根据这些因素调整速度和位置,以期望找到更优的解。

通过不断迭代更新,粒子群逐渐收敛于最优解。

粒子群算法的核心是更新速度和位置。

速度的更新公式如下:v(t+1) = w * v(t) + c1 * rand() * (pbest - x(t)) + c2 * rand() * (gbest - x(t))其中,v(t+1)为下一时刻的速度,v(t)为当前速度,w为惯性权重,c1和c2为学习因子,rand()为[0,1]之间的随机数,pbest为个体最优解,gbest为全局最优解,x(t)为当前位置。

位置的更新公式如下:x(t+1) = x(t) + v(t+1)通过调整学习因子和惯性权重,可以影响粒子的搜索能力和收敛速度。

较大的学习因子和较小的惯性权重可以增强粒子的探索能力,但可能导致算法陷入局部最优解;较小的学习因子和较大的惯性权重可以加快算法的收敛速度,但可能导致算法过早收敛。

粒子群算法的优点是简单易实现,收敛速度较快,对于大多数问题都能得到较好的结果。

然而,粒子群算法也存在一些缺点。

首先,算法对于问题的初始解和参数设置较为敏感,不同的初始解和参数可能导致不同的结果。

粒子群算法

粒子群算法

智能优化计算
1 粒子群算法的基本原理
1.1 粒子群算法的提出 ➢ 五年后,在国际上逐步被接受,并有大批不同 领域的学者投入该算法相关研究,目前已经成 为智能优化领域研究的热门
➢ 2003年,《控制与决策》第二期刊登国内第一篇 PSO论文——综述文章
8
历年发表论文的数目
2500
2328
2000
1500
xikd
)
c2 ra n d( ) ( p gbest
xikd )
xk 1 id
xikd
vk 1 id
i 1,2,, m; d 1,2,, D
惯性权重(续)
通过调节w值,可以控制PSO的全局探索和局部开发能力:
• w≥1:微粒速度随迭代次数的增加而增加,微粒发散。
• 0<w<1 :微粒减速,算法的收敛性依靠惯性权重c1和 c2 。
共性
(1)都属于仿生算法; (2)都属于全局优化方法; (3)都属于随机搜索算法; (4)都隐含并行性; (5)根据个体的适配信息进行搜索,因此不受函 数约束条件的限制,如连续性、可导性等; (6)对高维复杂问题,往往会遇到早熟收敛和收 敛性能差的缺点,都无法保证收敛到最优点。
PSO就是对鸟群或鱼群寻找食物这种群体行为的模拟。
单个鸟 整个鸟群
单个微粒
由多个微粒组 成的微粒群
一个微粒代表问题 的一个解
每个微粒都有一个 由被优化函数值决 定的适应值
鸟群寻找食 物的飞行策 略
鸟群行为
微粒位置和速 度的更新策略
PSO
13
每个微粒通过跟踪 自身找到的最好位 置以及邻域内其它 微粒找到的最好位 置,完成对整个搜 索空间的搜索
最大化问题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

粒子群算法(1)----粒子群算法简介二、粒子群算法的具体表述上面罗嗦了半天,那些都是科研工作者写论文的语气,不过,PSO的历史就像上面说的那样。

下面通俗的解释PSO算法。

PSO算法就是模拟一群鸟寻找食物的过程,每个鸟就是PSO.中的粒子,也就是我们需要求解问题的可能解,这些鸟在寻找食物的过程中,不停改变自己在空中飞行的位置与速度。

大家也可以观察一下,鸟群在寻找食物的过程中,开始鸟群比较分散,逐渐这些鸟就会聚成一群,这个群忽高忽低、忽左忽右,直到最后找到食物。

这个过程我们转化为一个数学问题。

寻找函数y=1-cos(3*x)*exp(-x)的在[0,4]最大值。

该函数的图形如下:当x=0.9350-0.9450,达到最大值y=1.3706。

为了得到该函数的最大值,我们在[0,4]之间随机的洒一些点,为了演示,我们放置两个点,并且计算这两个点的函数值,同时给这两个点设置在[0,4]之间的一个速度。

下面这些点就会按照一定的公式更改自己的位置,到达新位置后,再计算这两个点的值,然后再按照一定的公式更新自己的位置。

直到最后在y=1.3706这个点停止自己的更新。

这个过程与粒子群算法作为对照如下:这两个点就是粒子群算法中的粒子。

该函数的最大值就是鸟群中的食物计算两个点函数值就是粒子群算法中的适应值,计算用的函数就是粒子群算法中的适应度函数。

更新自己位置的一定公式就是粒子群算法中的位置速度更新公式。

下面演示一下这个算法运行一次的大概过程:第一次初始化第一次更新位置第二次更新位置第21次更新最后的结果(30次迭代)最后所有的点都集中在最大值的地方。

粒子群算法(2)----标准的粒子群算法在上一节的叙述中,唯一没有给大家介绍的就是函数的这些随机的点(粒子)是如何运动的,只是说按照一定的公式更新。

这个公式就是粒子群算法中的位置速度更新公式。

下面就介绍这个公式是什么。

在上一节中我们求取函数y=1-cos(3*x)*exp(-x)的在[0,4]最大值。

并在[0,4]之间放置了两个随机的点,这些点的坐标假设为x1=1.5;x2=2.5;这里的点是一个标量,但是我们经常遇到的问题可能是更一般的情况--x为一个矢量的情况,比如二维的情况z=2*x1+3*x22的情况。

这个时候我们的每个粒子为二维,记粒子P1=(x11,x12),P2=(x21,x22),P3=(x31,x32),......Pn=(xn1,xn2)。

这里n为粒子群群体的规模,也就是这个群中粒子的个数,每个粒子的维数为2。

更一般的是粒子的维数为q,这样在这个种群中有n个粒子,每个粒子为q 维。

由n个粒子组成的群体对Q维(就是每个粒子的维数)空间进行搜索。

每个粒子表示为:x i=(x i1,x i2,x i3,...,x iQ),每个粒子对应的速度可以表示为v i=(v i1,v i2,v i3,....,v iQ),每个粒子在搜索时要考虑两个因素:1。

自己搜索到的历史最优值p i ,p i=(p i1,p i2,....,p iQ),i=1,2,3,....,n。

2。

全部粒子搜索到的最优值p g,p g=(p g1,p g2,....,p gQ),注意这里的p g只有一个。

下面给出粒子群算法的位置速度更新公式:这里有几个重要的参数需要大家记忆,因为在以后的讲解中将会经常用到:它们是:是保持原来速度的系数,所以叫做惯性权重。

是粒子跟踪自己历史最优值的权重系数,它表示粒子自身的认识,所以叫“认知”。

通常设置为2。

是粒子跟踪群体最优值的权重系数,它表示粒子对整个群体知识的认识,所以叫做“社会知识”,经常叫做“社会”。

通常设置为2。

是[0,1]区间内均匀分布的随机数。

是对位置更新的时候,在速度前面加的一个系数,这个系数我们叫做约束因子。

通常设置为1。

这样一个标准的粒子群算法就结束了。

下面对整个基本的粒子群的过程给一个简单的图形表示:判断终止条件可是设置适应值到达一定的数值或者循环一定的次数。

注意:这里的粒子是同时跟踪自己的历史最优值与全局(群体)最优值来改变自己的位置预速度的,所以又叫做全局版本的标准粒子群优化算法。

粒子群算法(3)----标准的粒子群算法(局部版本)在全局版的标准粒子群算法中,每个粒子的速度的更新是根据两个因素来变化的,这两个因素是:1. 粒子自己历史最优值p i。

2. 粒子群体的全局最优值p g。

如果改变粒子速度更新公式,让每个粒子的速度的更新根据以下两个因素更新,A. 粒子自己历史最优值p i。

B. 粒子邻域内粒子的最优值pn k。

其余保持跟全局版的标准粒子群算法一样,这个算法就变为局部版的粒子群算法。

一般一个粒子i 的邻域随着迭代次数的增加而逐渐增加,开始第一次迭代,它的邻域为0,随着迭代次数邻域线性变大,最后邻域扩展到整个粒子群,这时就变成全局版本的粒子群算法了。

经过实践证明:全局版本的粒子群算法收敛速度快,但是容易陷入局部最优。

局部版本的粒子群算法收敛速度慢,但是很难陷入局部最优。

现在的粒子群算法大都在收敛速度与摆脱局部最优这两个方面下功夫。

其实这两个方面是矛盾的。

看如何更好的折中了。

根据取邻域的方式的不同,局部版本的粒子群算法有很多不同的实现方法。

第一种方法:按照粒子的编号取粒子的邻域,取法有四种:1,环形取法2,随机环形取法3,轮形取法4,随机轮形取法。

1环形 2 随机环形3 轮形4随机轮形因为后面有以环形取法实现的算法,对环形取法在这里做一点点说明:以粒子1为例,当邻域是0的时候,邻域是它本身,当邻域是1时,邻域为2,8;当邻域是2时,邻域是2,3,7,8;......,以此类推,一直到邻域为4,这个时候,邻域扩展到整个例子群体。

据文献介绍(国外的文献),采用轮形拓扑结构,PSO的效果很好。

第二种方法:按照粒子的欧式距离取粒子的邻域在第一种方法中,按照粒子的编号来得到粒子的邻域,但是这些粒子其实可能在实际位置上并不相邻,于是Suganthan提出基于空间距离的划分方案,在迭代中计算每一个粒子与群中其他粒子的距离。

记录任何2个粒子间的的最大距离为dm。

对每一粒子按照||x a-x b||/dm计算一个比值。

其中||x a-x b||是当前粒子a到b的距离。

而选择阈值frac 根据迭代次数而变化。

当另一粒子b满足||x a-x b||/dm<frac时,认为b成为当前粒子的邻域。

这种办法经过实验,取得较好的应用效果,但是由于要计算所有粒子之间的距离,计算量大,且需要很大的存储空间,所以,该方法一般不经常使用。

粒子群算法(5)-----标准粒子群算法的实现标准粒子群算法的实现思想基本按照粒子群算法(2)----标准的粒子群算法的讲述实现。

主要分为3个函数。

第一个函数为粒子群初始化函数InitSwarm(SwarmSize......AdaptFunc)其主要作用是初始化粒子群的粒子,并设定粒子的速度、位置在一定的范围内。

本函数所采用的数据结构如下所示:表ParSwarm记录的是粒子的位置、速度与当前的适应度值,我们用W来表示位置,用V来代表速度,用F D。

表优解。

用Wg代表全局最优解,W.,1代表每个粒子的历史最优解。

粒子群初始化阶段表OptSwarm的前N行与表ParSwarm根据这样的思想MATLAB代码如下:function [ParSwarm,OptSwarm]=InitSwarm(SwarmSize,ParticleSize,ParticleScope,AdaptFunc)%功能描述:初始化粒子群,限定粒子群的位置以及速度在指定的范围内%[ParSwarm,OptSwarm,BadSwarm]=InitSwarm(SwarmSize,ParticleSize,ParticleScope,AdaptFunc) %%输入参数:SwarmSize:种群大小的个数%输入参数:ParticleSize:一个粒子的维数%输入参数:ParticleScope:一个粒子在运算中各维的范围;%ParticleScope格式:%3维粒子的ParticleScope格式:%[x1Min,x1Max%x2Min,x2Max%x3Min,x3Max]%%输入参数:AdaptFunc:适应度函数%%输出:ParSwarm初始化的粒子群%输出:OptSwarm粒子群当前最优解与全局最优解%%用法[ParSwarm,OptSwarm,BadSwarm]=InitSwarm(SwarmSize,ParticleSize,ParticleScope,AdaptFunc); %%异常:首先保证该文件在Matlab的搜索路径中,然后查看相关的提示信息。

%%编制人:XXX%编制时间:2007.3.26%参考文献:无%%容错控制if nargin~=4error('输入的参数个数错误。

')endif nargout<2error('输出的参数的个数太少,不能保证以后的运行。

');end[row,colum]=size(ParticleSize);if row>1|colum>1error('输入的粒子的维数错误,是一个1行1列的数据。

');end[row,colum]=size(ParticleScope);if row~=ParticleSize|colum~=2error('输入的粒子的维数范围错误。

');end%初始化粒子群矩阵%初始化粒子群矩阵,全部设为[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);下面的函数BaseStepPso实现了标准全局版粒子群算法的单步更新位置速度的功能function[ParSwarm,OptSwarm]=BaseStepPso(ParSwarm,OptSwarm,AdaptFunc,ParticleScope,MaxW,MinW, LoopCount,CurCount)%功能描述:全局版本:基本的粒子群算法的单步更新位置,速度的算法%%[ParSwarm,OptSwarm]=BaseStepPso(ParSwarm,OptSwarm,AdaptFunc,ParticleScope,MaxW,Min W,LoopCount,CurCount)%%输入参数:ParSwarm:粒子群矩阵,包含粒子的位置,速度与当前的目标函数值%输入参数:OptSwarm:包含粒子群个体最优解与全局最优解的矩阵%输入参数:ParticleScope:一个粒子在运算中各维的范围;%输入参数:AdaptFunc:适应度函数%输入参数:LoopCount:迭代的总次数%输入参数:CurCount:当前迭代的次数%返回值:含意同输入的同名参数%%用法:[ParSwarm,OptSwarm]=BaseStepPso(ParSwarm,OptSwarm,AdaptFunc,ParticleScope,MaxW,MinW, LoopCount,CurCount)%%异常:首先保证该文件在Matlab的搜索路径中,然后查看相关的提示信息。

相关文档
最新文档