粒子群算法的寻优算法
1.算法介绍
粒子群优化算法的基本思想是通过群体中个体之间的协作和信息共享来寻找最优解。
PSO的优势在于简单容易实现并且没有许多参数的调节。目前已被广泛应用于函数优化、神经网络训练、模糊系统控制以及其他遗传算法的应用领域。
1.1问题提出
设想这样一个场景:一群鸟在随机的搜索食物。 在这个区域里只有一块食物,所有的鸟都不知道食物在哪。但是它们知道自己当前的位置距离食物还有多远。 那么找到食物的最优策略是什么?最简单有效的就是搜寻目前离食物最近的鸟的周围区域。
1.2问题抽象
鸟被抽象为没有质量和体积的微粒(点),并延伸到N维空间,粒子在N维空间的位置表示为矢量Xi=(x1,x2,…,xN),飞行速度表示为矢量Vi=(v1,v2,…,vN)。每个粒子都有一个由目标函数决定的适应值(fitness value),并且知道自己到目前为止发现的最好位置(pbest)和现在的位置Xi。这个可以看作是粒子自己的飞行经验。除此之外,每个粒子还知道到目前为止整个群体中所有粒子发现的最好位置(gbest)(gbest是pbest中的最好值)。这个可以看作是粒子同伴的经验。粒子就是通过自己的经验和同伴中最好的经验来决定下一步的运动。
1.3算法描述
PSO初始化为一群随机粒子(随机解)。然后通过迭代找到最优解。在每一次的迭代中,粒子通过跟踪两个“极值”(pbest,gbest)来更新自己。
在找到这两个最优值后,粒子通过下面的公式来更新自己的速度和位置。
i=1,2,…,M,M是该群体中粒子的总数;Vi 是粒子的速度; pbest和gbest如前定义; rand()是介于(0、1)之间的随机数; xi是粒子的当前位置。c1和c2是学习因子,通常取c1= c2=2 在每一维,粒子都有一个最大限制速度Vmax,如果某一维的速度超过设定的Vmax ,那么这一维的速度就被限定为Vmax 。( Vmax >0)以上面两个公式为基础,形成了后来PSO 的标准形式。
2.基本流程
Step1:初始化一群微粒(群体规模为m),包括随机位置和速度;
Step2:评价每个微粒的适应度;
Step3:对每个微粒,将其适应值与其经过的最好位置 pbest作比较,如果较好,则将其作为当前的最好位置pbest;
Step4:对每个微粒,将其适应值与其经过的最好位置 gbest作比较,如果较好,则将其作为当前的最好位置gbest;
Step5:根据(2)、(3)式调整微粒速度和位置;
Step6:未达到结束条件则转Step2。
迭代终止条件根据具体问题一般选为最大迭代次数Gk或和微粒群迄今为止搜索到的最优位置满足预定最小适应阈值。
3.代码实现
POS:
%% 清空环境
clc
clear
%% 参数初始化
%粒子群算法中的三个参数
c1 = 1.49445;%加速因子
c2 = 1.49445;
w=0.8 %惯性权重
maxgen=10