1 简介
利用投影寻踪法来评价水质,利用粒子群优化算法来求解最优函数问题,计算速度快,精度高.实例计算表明,基于粒子群优化算法寻找最优投影方向,方法简单,计算效率较高,收敛速度快,解决了投影寻踪过程中最优化问题,是解决复杂水质综合评价的有效途径.
2 部分代码
%function [gBest]=PSO()%PSO主函数 pso_size=100;%群体规模c1=0.5;c2=0.5;%学习因子w_max=0.8;%最大权重w_min=0.4;%最小权重w=w_max;Pb=10000000;%适应度值 Pb1=10000000;Pb2=10000000;dimens=1;%待优化问题的维数 run_max=100;%迭代次数上限X=zeros(1,pso_size);V=zeros(1,pso_size);Xb=zeros(1,pso_size);Xb1=zeros(1,pso_size);Xb2=zeros(1,pso_size);Yb=zeros(1,pso_size);Yb1=zeros(1,pso_size);Yb2=zeros(1,pso_size);P=zeros(1,8000);PL=zeros(1,pso_size);Pp=0;Pp1=0;Pp2=0;dpBest=zeros(1,pso_size);dgBest=0;gBest=0;s1=zeros(1,run_max);s2=zeros(1,run_max);q=0;L=0.05;%!!!!!!精度t=1;% !!!!!!!!!!P(t)中t初值为1for i=1:pso_size%初始化粒子速度位置 X(i)=-5+12*rand; X1(i)=X(i); X2(i)=X(i); Xb(i)=X(i); Xb1(i)=X(i); Xb2(i)=X(i); V(i)=(-12+24*rand)/10;endfor i=1:pso_size Yb1(i)=f1(X(i));%计算f1中个体适应度值,步骤3 if Yb1(i)<Pb1 Pb1=Yb1(i);%f1中全局极值 步骤3,4 Pp1=X(i); endendfor i=1:pso_size Yb2(i)=f2(X(i));%计算f2中个体适应度值 if Yb2(i)<Pb2 Pb2=Yb2(i);%f2中全局极值 步骤3,4 Pp2=X(i); endend gBest=(Pp1+Pp2)/2;% 步骤5Pp=gBest;dgBest=abs(Pp1-Pp2);%计算全局最优值的距离for i=1:pso_size dpBest(i)=abs(Xb1(i)-Xb2(i));%计算各粒子间的距离 if dpBest(i)<dgBest q=rand; if q>0.5 Xb(i)=Xb1(i); else Xb(i)=Xb2(i); end %个体极值随机选取 else Xb(i)=(Xb1(i)+Xb2(i))/2;%取两函数个体极值的均值 end PL(i)=(Yb1(i)+Yb2(i))/2;%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! if PL(i)<L P(t)=X(i); t=t+1; end%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!endt%Pfor count=1:run_max %循环迭代 for k=1:pso_size V(k)=w*V(k)+c1*rand*(Xb(k)-X(k))+c2*rand*(Pp-X(k)); if abs(V(k))>12 %判断是否超出Vmax if V(k)>0 V(k)=12; else V(k)=-12; end end X(k)=X(k)+V(k); X1(k)=X(k); X2(k)=X(k); temp1=f1(X1(k)); %$$$$在f1中计算个体适应度值$$$$ if temp1<Yb1(k) Yb1(k)=temp1;%$$$$判断是否更改个体极值$$$$ Xb1(k)=X1(k); end if Yb1(k)<Pb1 Pb1=Yb1(k);%$$$$得到新的f1中全局极值Pb1$$$$ Pp1=X1(k); end temp2=f2(X2(k)); %$$$$在f2中计算个体适应度值$$$$ if temp2<Yb2(k) Yb2(k)=temp2;%$$$$判断是否更改个体极值$$$$ Xb2(k)=X2(k); end if Yb2(k)<Pb2 Pb2=Yb2(k); %$$$$ Pp2=X2(k); %$$$$ end gBest=(Pp1+Pp2)/2; %得到全局最优 Pp=gBest; %全局极值, dgBest=abs(Pp1-Pp2); %$$$$计算全局最优值的距离 dpBest(k)=abs(Xb1(k)-Xb2(k)); if dpBest(k)<dgBest %$$$$比较个体极值的距离$$$$ q=rand; if q>0.5 Xb(k)=Xb1(k); else Xb(k)=Xb2(k); end %$$$$个体极值随机选取 else Xb(k)=(Xb1(k)+Xb2(k))/2; %$$$$取两函数个体极值的均值,得到目标均衡适应度值$$$$ end PL(k)=(Yb1(k)+Yb2(k))/2; %flag=0; if PL(k)<L%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! a=0; for e=1:t-1 if P(e)==X(k) a=1; end end if a~=1 P(t)=X(k); t=t+1; end end % if PL(k)<L % for e=1:t % if P(t)不等于X(k)
3 仿真结果
4 参考文献
[1]李学法, 周迎红. 基于粒子群优化算法的投影寻踪水质评价模型[J]. 湖北农业科学, 2013, 052(019):4627-4628,4682.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。