资源描述:
《粒子群算法原理及在函数优化中的应用(附程序).docx》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、粒子群算法原理及在函数优化中的应用(附程序)粒子群算法本理及其正在函数劣化中的使用1粒子群劣化(PSO)算法基础本理1.1尺度粒子群算法假如正在一个D维的宗旨搜刮空间中,有m个代表成绩潜伏解的粒子构成一个种群12[,,...,]m=xxxx,第i个粒子的疑息可用D维背量暗示为12[,,...,]TiiiiDxxx=x,其速率为12[,,...,]TiiiiDvvv=v。算法尾先初初化m个随机粒子,而后经由过程迭代寻到最劣解。每一一次迭代中,粒子经由过程跟踪2个极值举行疑息交换,一个是第i个粒子自己寻到的最劣解,称之为个别极值,即12[,,
2、...,]TiiiiDppp=p;另外一个是一切粒子今朝寻到的最劣解,称之为群体极值,即12[,,...,]TggggDppp=p。粒子正在更新上述2个极值后,依据式(1)以及式(2)更新本人的速率以及地位。11122()()ttttttiiiigiwcrcr+=+-+-vvpxpx(1)11tttiii++=+xxv(2)式中,t代表以后迭代次数,12,rr是正在[0,1]之间从命匀称散布的随机数,12,cc称为教习果子,分手调治粒子背个别极值以及群体极值圆背航行的步少,w为惯性权重,一样平常正在0.1~0.9之间与值。正在尺度的PSO
3、算法中,惯性权重w被设为常数,一般与0.5w=。正在真际使用中,x需保障正在必定的局限内,即x的每一一维的变动局限均为minmax[,]XX,那正在函数劣化成绩中相称于自变量的界说域。1.2算法真现步调步调1:暗示出PSO算法中的顺应度函数()fitnessx;(编程时最佳以函数的情势保留,便于屡次挪用。)步调2:初初化PSO算法中各个参数(如粒子个数,惯性权重,教习果子,最年夜迭代次数等),正在自变量x界说域内随机初初化x,代进()fitnessx供患上顺应度值,经由过程对比断定肇始个别极值ip以及齐局极值gp。步调3:经由过程轮回迭代
4、更新x、ip以及gp:①断定惯性权重w的与值(当w没有是常数时)。②依据式(1)更新粒子的速率1ki+v,若速率中的某一维凌驾了maxV,则与为maxV。③依据式(2)更新自变量x,若x的与值凌驾其界说域,则正在其界说域内从头初初化。④代进()fitnessx供患上顺应度值,经由过程对比更新个别极值ip以及齐局极值gp。步调4:判别是不是谦足末行前提(一般设为到达最年夜迭代次数或者到达估量粗度请求),若没有谦足,则转进步调(3),若谦足,则输入估量了局,算法停止。2步伐真现2.1各类测试函数(顺应度函数)测试函数是用去测试算法功能的一些通
5、用函数,上面先给出一些测试函数的3维图(自变量为两维,减上函数值共3维)如图1-图17所示。-1010z2=x2-cos(18*x)+y2-cos(18*y)图1测试函数1-1010z4=4*x2-2.1*x4+x6/3+x*y-4*y2+y4图2测试函数2-1010z5=(y-5.1*x2/4/π/π+5*x/π-6)2+10*(1-1/8/π)*cos(x)+10图3测试函数3-55z7=x*exp(-x2-y2)图4测试函数4-55z8图5测试函数5-55r=sqrt(x2+y2)+eps;z9=sin(r)/r;图6测试函数6-5
6、5f6图7测试函数7-1010图8测试函数8-100100图9测试函数910图10测试函数10-1010NDparabola图11测试函数11-1010f6图12测试函数12-1010Rosenbrock图13测试函数13-1010图14测试函数14-1010tripod图15测试函数15-1010图16测试函数16-1010Griewank图17测试函数172.2步伐真现尾先给出画造测试函数的步伐:%%画图测试函数draw_fitness.mclear;clc;closeall;%%[x,y]=meshgrid(-10:0.5:10);
7、z2=x.^2-cos(18*x)+y.^2-cos(18*y);figure(1);surf(x,y,z2);minz2=min(min(z2));title('z2=x^2-cos(18*x)+y^2-cos(18*y)');%%z4=4*x.^2-2.1*x.^4+x.^6/3+x.*y-4*y.^2+y.^4;figure(2);surf(x,y,z4);minz4=min(min(z4));title('z4=4*x^2-2.1*x^4+x^6/3+x*y-4*y^2+y^4');%%z5=(y-5.1*x.^2/4/pi/pi
8、+5*x/pi-6).^2+10*(1-1/8/pi)*cos(x)+10;figure(3);surf(x,y,z5);minz5=min(min(z5));title('z5=(y-5.1