1 简介
粒子群算法因其原理简单,易于编程,适于并行计算等优点而得到了广泛的应用.本文探讨和分析了Matlab粒子群算法工具箱,并提出了基于该工具箱来实现水电站优化调度计算的方法.计算实例表明,Matlab粒子群算法工具箱可以很好地用于解决水电站优化调度问题,可获得比动态规划算法更好的精度.
1 算法介绍
1.1 关于速度和位置
粒子群算法通过设计一种无质量的粒子来模拟鸟群中的鸟,粒子仅具有两个属性:速度和位置,速度代表移动的快慢,位置代表移动的方向。
鸟被抽象为没有质量和体积的微粒(点),并延伸到N维空间,粒子i在N维空间的位置表示为矢量Xi=(x1,x2,…,xN),飞行速度表示为矢量Vi=(v1,v2,…,vN)。每个粒子都有一个由目标函数决定的适应值(fitness value),并且知道自己到目前为止发现的最好位置(pbest)和现在的位置Xi。这个可以看作是粒子自己的飞行经验。除此之外,每个粒子还知道到目前为止整个群体中所有粒子发现的最好位置(gbest)(gbest是pbest中的最好值),这个可以看作是粒子同伴的经验。粒子就是通过自己的经验和同伴中最好的经验来决定下一步的运动。
2.2 速度和位置的更新
PSO初始化为一群随机粒子(随机解)。然后通过迭代找到最优解。在每一次的迭代中,粒子通过跟踪两个“极值”(pbest,gbest)来更新自己。在找到这两个最优值后,粒子通过下面的公式来更新自己的速度和位置。
对于公式(1):
公式(1)的第①部分称为【记忆项】,表示上次速度大小和方向的影响;
公式(1)的第②部分称为【自身认知项】,是从当前点指向粒子自身最好点的一个矢量,表示粒子的动作来源于自己经验的部分;
公式(1)的第③部分称为【群体认知项】,是一个从当前点指向种群最好点的矢量,反映了粒子间的协同合作和知识共享。粒子就是通过自己的经验和同伴中最好的经验来决定下一步的运动。
以上面两个公式为基础,再来看一个公式:
公式(2)和 公式(3)被视为标准PSO算法。
1.3 标准PSO算法的流程
1)初始化一群微粒(群体规模为N),包括随机位置和速度;
2)评价每个微粒的适应度;
3)对每个微粒,将其适应值与其经过的最好位置pbest作比较,如果较好,则将其作为当前的最好位置pbest;
4)对每个微粒,将其适应值与其经过的最好位置gbest作比较,如果较好,则将其作为当前的最好位置gbest;
5)根据公式(2)、(3)调整微粒速度和位置;
6)未达到结束条件则转第2)步。
迭代终止条件根据具体问题一般选为最大迭代次数Gk或(和)微粒群迄今为止搜索到的最优位置满足预定最小适应阈值。
PSO流程图解
2 部分代码
%min (x-3)^2
%s.t. 1 clear all clc x=zeros(20,1);%粒子位置 v=zeros(20,1);%粒子速度 vmax=(4-1)./5;%最大速度 fx=zeros(20,1);%粒子适应值 pbest=zeros(20,1);%个体最好位置 fpbest=zeros(20,1);%个体最好适应值 gbest=ones(1,1);%全局最好序号 w=0.9;%惯性权重 c1=2.0;%学习因子 c2=2.0; gmax=200;%最大迭代次数 %初始化 for i=1:20 x(i,1)=1+rand().*(4-1);%初始化粒子位置 tmp = rand().*vmax;%初始化速度 v(i,1)=tmp; if rand()<0.5 v(i,1)=-1.*tmp; end fx(i)=(x(i,1)-3)^2;%每个个体目标函数值 pbest(i,1)=x(i,1);%初始化个体最好 fpbest(i,1)=fx(i);%初始化个体最好适应值 end t=1; while t w=0.9-0.5.*t/gmax;%更新惯性权重 for i=1:20 v(i,1)=w.*v(i,1)+c1.*rand().*(pbest(i,1)-x(i,1))+c2.*rand().*(pbest(gbest,1)-x(i,1));%速度更新 if v(i,1)>vmax%速度越界判断 v(i,1)=vmax; end if v(i,1)<-1.*vmax v(i,1)=-1*vmax; end x(i,1)=x(i,1)+v(i,1);%位置更新 if x(i,1)>4%限幅 x(i,1)=4; end if x(i,1)<1 x(i,1)=1; end fx(i,1)=(x(i,1)-3)^2;%计算适应值 if fx(i,1) pbest(i,1)=x(i,1); fpbest(i)=fx(i); if fpbest(i) gbest=i; end end end t=t+1; end disp('最小值为'); disp(fpbest(gbest));%输出最好目标 disp('对应的x1为'); disp(pbest(gbest,1));%输出最好解 3 仿真结果 4 参考文献 [1]芮钧, 陈守伦. MATLAB粒子群算法工具箱求解水电站优化调度问题[J]. 中国农村水利水电, 2009(1):3. 博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。 部分理论引用网络文献,若有侵权联系博主删除。**完整代码获取关注微信公众号天天matlab**