粒子群算法的寻优算法-非线性函数极值寻优

一、简介  

粒子群算法又被称为粒子群优化算法(PSO)。粒子群算法是源于对鸟群捕食的行为研究;是通过模拟鸟群觅食行为而发展起来的一种基于群体协作的随机搜索算法。

二、粒子群算法分析

1、基本思想

粒子群算法通过设计一种粒子来模拟鸟群中的鸟类个体,粒子仅具有两个属性:速度和位置,速度代表移动的快慢,位置代表移动的方向。每个粒子在搜索空间中单独的搜寻最优解,并将其记为当前个体极值,并将个体极值与整个粒子群里的其他粒子共享,找到最优的那个个体极值作为整个粒子群的当前全局最优解,不断迭代,更新速度和位置,粒子群中的所有粒子根据自己找到的当前个体极值和整个粒子群共享的当前全局最优解来调整自己的速度和位置。最终得到满足终止条件的最优解。主要是通过群体中个体之间的协作和信息共享来寻找最优解。

2、初始化

对所有参数进行初始化,当然后期还可以更改。设置最大迭代次数、加速因子c1和c2、惯性权重w、种群规模sizepop、限制速度围、变量取值范围、适应度函数维数dim、选择待优化的函数、目标函数的自变量个数、位置信息为整个搜索空间、初始种群、初始化速度等。

3、个体极值与全局最优解

定义适应度函数,个体极值为每个粒子找到的最优解,从这些最优解中找到一个全局最佳值,叫做本次的全局最优解。以方便与历史的全局最优解比较,进行更新。

4、 更新速度和位置的公式

速度更新:

其中,w为惯性权重,其值不能为负数。c1和c2为加速因子,其值也不能为负数。rand为随机产生[0,1]之间的随机数。pbest(j,:)为粒子最优的位置;pop(j,:)为粒子当前的位置;V(j,:)为粒子当前的速度。

位置更新:

注:粒子群算法是通过初始化一群随机粒子。然后通过不断迭代来找到最优解。在每一次的迭代中,粒子通过跟踪两个“极值”(pbest,gbest)来更新自己。在找到这两个最优值后,粒子通过上面的公式来更新自己的速度和位置。

5、算法流程

 三、MATLAB测试结果及分析

各参数初始值如下表:

加速因子c1 加速因子c2 惯性权重w 最大迭代次数  种群规模 速度范围 变量取值范围 适应度函数维数
1.49445 1.49445 0.8 1000 200 [-1,1] [-5,5] 10

1.1当加速因子c1、c2和惯性权重w组合变化时(其他参数不变), 待优化的函数:Rastrigin函数,MATLAB实现如下:

c1 c2 w
1.49445 1.49445 0.8

测试结果如下表:

部分可视化图如下:

1.2当加速因子c1、c2和惯性权重w组合变化时(其他参数不变), 待优化的函数:Rastrigin函数,MATLAB实现如下:

c1 c2 w
1.49445 1.49445 0.5

测试结果如下表:

部分可视化图如下:

1.3当加速因子c1、c2和惯性权重w组合变化时(其他参数不变), 待优化的函数:Rastrigin函数,MATLAB实现如下:

c1 c2 w
1.49445 1.49445 0.3

测试结果如下表:

部分可视化图如下:

1.4 当加速因子c1、c2和惯性权重w组合变化时(其他参数不变), 待优化的函数:Rastrigin函数,MATLAB实现如下:

c1 c2 w
1.49445 1.49445 0.1

测试结果如下表:

部分可视化图如下:

 分析:综上可得,当其他参数的值不变时,惯性权重w的值与全局寻优能力呈线性正相关的关系。惯性权重w的值越大,全局寻优能力越强,局部寻优能力越弱;其值越小,全局寻优能力越弱,局部寻优能力越强。另外,动态w 能获得比固定值更好的寻优结果。动态w可以在PSO搜索过程中进行线性变化。

2.1当加速因子c1、c2和惯性权重w组合变化时(其他参数不变), 待优化的函数:Rastrigin函数,MATLAB实现如下:

c1 c2 w
0.5 0.5 0.8

测试结果如下表:

部分可视化图如下:

2.2当加速因子c1、c2和惯性权重w组合变化时(其他参数不变), 待优化的函数:Rastrigin函数,MATLAB实现如下:

c1 c2 w
1 1 0.8

测试结果如下表:

部分可视化图如下:

2.3当加速因子c1、c2和惯性权重w组合变化时(其他参数不变), 待优化的函数:Rastrigin函数,MATLAB实现如下:

c1 c2 w
1.5 1.5 0.8

测试结果如下表:

部分可视化图如下:

 分析:当惯性权重w不变时,通过测试以上3组不同的加速因子的值,并且对每一个加速因子分别随机测试10组数据,分别记录最优适应度和达到最优适应度时的最多迭代次数,便算出最优适应度的平均值,对比其平均值可得:加速因子c1、c2的值越大,最优适应度平均值也越大,因此全局寻优能力也逐渐增强强。当调整幅度过大时,荣誉陷入局部最优中。

3.1当种群规模数(sizepop)和适应度函数维数(dim)组合变化时(其他参数不变),待优化的函数:Rastrigin函数,MATLAB实现如下:

种群规模数(sizepop) 适应度函数维数(dim)
200 5

测试结果如下表:

部分可视化图如下:

3.2当种群规模数(sizepop)和适应度函数维数(dim)组合变化时(其他参数不变),待优化的函数:Rastrigin函数,MATLAB实现如下:

种群规模数(sizepop) 适应度函数维数(dim)
200 15

测试结果如下表:

部分可视化图如下:

3.3当种群规模数(sizepop)和适应度函数维数(dim)组合变化时(其他参数不变),待优化的函数:Rastrigin函数,MATLAB实现如下:

种群规模数(sizepop) 适应度函数维数(dim)
200 25

测试结果如下表:

部分可视化图如下:

 分析:当其他参数不变时,通过测试以上3组不同的适应度函数维数为5、15和25,并且对每一个适应度函数维数分别随机测试10组数据,分别记录最优适应度和达到最优适应度时的最多迭代次数,便算出最优适应度的平均值,对比其平均值可得:适应度函数维数(dim)越大,寻优能力越强。

原文地址:https://www.cnblogs.com/twzh123456/p/11977054.html

时间: 2024-10-10 08:22:16

粒子群算法的寻优算法-非线性函数极值寻优的相关文章

【智能算法】粒子群寻优算法

1.理论基础 粒子群算法(particle swarm optimization,PSO)是计算智能领域中的一种生物启发式方法,属于群体智能优化算法的一种,常见的群体智能优化算法主要有如下几类: (1)蚁群算法(Ant Colony Optimization,简称ACO)[1992年提出]: (2)粒子群优化算法(Particle Swarm Optimization,简称PSO)[1995年提出](简单易于实现,也是目前应用最为广泛的群体智能优化算法): (3)菌群优化算法(Bacterial

C语言实现粒子群算法(PSO)二

上一回说了基本粒子群算法的实现,并且给出了C语言代码.这一篇主要讲解影响粒子群算法的一个重要参数---w.我们已经说过粒子群算法的核心的两个公式为: Vid(k+1)=w*Vid(k)+c1*r1*(Pid(k)-Xid(k))+c2*r2*(Pgd(k)-Xid(k))Xid(k+1) = Xid(k) + Vid(k+1) 标红的w即是本次我们要讨论的参数.之前w是不变的(默认取1),而现在w是变化的,w称之为惯性权重,体现的是粒子继承先前速度的能力. 经验表明:一个较大的惯性权重有利于全局

C语言实现粒子群算法(PSO)一

最近在温习C语言,看的书是<C primer Plus>,忽然想起来以前在参加数学建模的时候,用过的一些智能算法,比如遗传算法.粒子群算法.蚁群算法等等.当时是使用MATLAB来实现的,而且有些MATLAB自带了工具箱,当时有些只是利用工具箱求最优解问题,没有自己动手亲自去实现一遍,现在都忘的差不多了.我觉得那样层次实在是很浅,没有真正理解算法的核心思想.本着"纸上得来终觉浅,绝知此事要躬行"的态度,我决定现在重新复习一遍算法,然后手工用C语言重新实现一遍.说做就做,我第一

粒子群算法(PSO)算法解析(简略版)

粒子群算法(PSO) 1.粒子群算法(PSO)是一种基于群体的随机优化技术: 初始化为一组随机解,通过迭代搜寻最优解. PSO算法流程如图所示(此图是从PPT做好,复制过来的,有些模糊) 2.PSO模拟社会的三条规则: ①飞离最近的个体,以避免碰撞 ②飞向目标(认知行为)--Pbest ③飞向群体的中心(社会行为)--Gbest 3.迭代公式: 举一个粒子...在一维中,利用MATLAB中自带的函数求极值        搜索起始点位置 注:fmincon(有约束的非线性最小化) fminbnd(

粒子群优化算法简介

好好学数学. 一.问题来源 经朋友介绍,接了一份工作,就是做PSO及其优化,恰好我导师也研究这个,刚开学也有接触,那我就接了.......赚点生活费. 欢迎大家和我联系做算法类项目,QQ:791909235,Tel:13137910179. 二.背景介绍 2.1 人工生命 人工生命:研究具有某些生命基本特征的人 工系统.包括两方面的内容: 1.研究如何利用计算技术研究生物现象: 2. 研究如何利用生物技术研究计算问题. 我们关注的是第二点.已有很多源于生物现象的计算技巧,例如神经网络和遗传算法.

粒子群优化算法PSO及matlab实现

算法学习自:MATLAB与机器学习教学视频 1.粒子群优化算法概述 粒子群优化(PSO, particle swarm optimization)算法是计算智能领域,除了蚁群算法,鱼群算法之外的一种群体智能的优化算法,该算法最早由Kennedy和Eberhart在1995年提出的,该算法源自对鸟类捕食问题的研究. • PSO算法首先在可行解空间中初始化一群粒子,每个粒子都代表极值优化问题的一个潜在最优解,用位置.速度和适应度值三项指标表示该粒子特征. • 粒子在解空间中运动,通过跟踪个体极值Pb

数学建模方法-粒子群算法

一.引言 哈喽大家好,有一段时间没更新Blog了,最近身体不太舒服哈,今天开始继续更了.言归正传,这次要讲的是"粒子群算法".这个算法是由两个科学家在1995年,根据对鸟类捕食行为的研究所得到启发而想出来的.好的,接下来让我们开始吧. 二.鸟类捕食行为 鸟妈妈有7个鸟宝宝,有一天,鸟妈妈让鸟宝宝们自己去找虫子吃.于是鸟宝宝们开始了大范围的捕食行为.一开始鸟宝宝们不知道哪里可以找得到虫子,于是每个鸟宝宝都朝着不同的方向独自寻找. 但是为了能够更快的找到虫子吃,鸟宝宝们协商好,谁发现了虫子

量子粒子群优化算法

参考文献: 量子行为粒子群优化算法研究[D] ,孙俊,博士论文2.4节. #include <iostream> #include <math.h> #include <time.h> using namespace std; #define M 50 //群体数目50 #define N 4 //每个粒子的维数4 //测试类 class TestFunction { public: double resen(double x1,double x2,double x3,

算法(三)粒子群算法之局部粒子

在全局版的标准粒子群算法中,每个粒子的速度的更新是根据两个因素来变化的,这两个因素是:1. 粒子自己历史最优值pi.2.  粒子群体的全局最优值pg.如果改变粒子速度更新公式,让每个粒子的速度的更新根据以下两个因素更新,A. 粒子自己历史最优值pi.B. 粒子邻域内粒子的最优值pnk.其余保持跟全局版的标准粒子群算法一样,这个算法就变为局部版的粒子群算法. 一般一个粒子i 的邻域随着迭代次数的增加而逐渐增加,开始第一次迭代,它的邻域为0,随着迭代次数邻域线性变大,最后邻域扩展到整个粒子群,这时就