1 简介
针对当前各种启发式算法,如遗传算法(GA),粒子群算法(PSO),模拟退火算法(SA)等在求解水库优化调度中的不足,提出了将新型的集群智能算法-人工鱼群算法AFSA(Artificial Fish School Algorithm)用于求解水库优化调度问题。该算法通过模拟鱼群的一些基本行为,如捕食、聚群、追尾,来求解问题的最优解。根据水库优化调度问题的情况及数学模型,给出了基于人工鱼群算法的水库优化调度的求解策略,详细讨论了求解步骤,最后给出了实验仿真结果。结果表明该算法具有较强的局部搜索能力,同时也有更高的搜索效率,与其它方法相比,该算法能够找到更优解,验证了该算法的可行性和有效性。
2 部分代码
%人工鱼群算法 梯级水库调度 tic clear all clc format long Visual=2.5; Step=0.3; N=100; %50条鱼 Try_number=100;%觅食时做50次搜索 d=[]; h=1e-1; Friend_number=50; a=[977,977,977,977,977,977,977,957,977,970,977,977]; %%[898,898,898,898,898,898,893,892,892,898,898,898]; b=[970,970,970,970,952,952,952,952,952,952,970,970]; %%[888,888,888,888,888,893,888,888,888,888,888,888]; k=0; %最外围变量,m为其上限,控制循环次数 m=200; X1=rand(N,1)*(a(1)-b(1))+b(1); X2=rand(N,1)*(a(2)-b(2))+b(2); X3=rand(N,1)*(a(3)-b(3))+b(3); X4=rand(N,1)*(a(4)-b(4))+b(4); X5=rand(N,1)*(a(5)-b(5))+b(5); X6=rand(N,1)*(a(6)-b(6))+b(6); X7=rand(N,1)*(a(7)-b(7))+b(7); X8=rand(N,1)*(a(8)-b(8))+b(8); X9=rand(N,1)*(a(9)-b(9))+b(9); X10=rand(N,1)*(a(10)-b(10))+b(10); X11=rand(N,1)*(a(11)-b(11))+b(11); X12=rand(N,1)*(a(12)-b(12))+b(12); X=[X1,X2,X3,X4,X5,X6,X7,X8,X9,X10,X11,X12];%人工鱼数量50,一行24个向量为一条鱼 for i=1:N wwww=[X(i,1),X(i,2),X(i,3),X(i,4),X(i,5),X(i,6),X(i,7),X(i,8),X(i,9),X(i,10),X(i,11),X(i,12)]; %www为所有鱼的全体,一行24个值,总共50行 d(i)=maxf(wwww); end [w,i]=max(d); maxX=[X(i,1),X(i,2),X(i,3),X(i,4),X(i,5),X(i,6),X(i,7),X(i,8),X(i,9),X(i,10),X(i,11),X(i,12)]; maxY=w; %初始公告板记录 w即为最大函数值 figurex1=[];figurex2=[];figurex3=[];figurex4=[];figurex5=[];figurex6=[];figurex7=[];figurex8=[];figurex9=[];figurex10=[];figurex11=[];figurex12=[]; figurez=[]; figurex1(numel(figurex1)+1)=maxX(1); %figurex1(numel(figurex1)+1)即为figurex1(1),也即X(i,1),同14行 figurex2(numel(figurex2)+1)=maxX(2); figurex3(numel(figurex3)+1)=maxX(3);figurex4(numel(figurex4)+1)=maxX(4);figurex5(numel(figurex5)+1)=maxX(5);figurex6(numel(figurex6)+1)=maxX(6); figurex7(numel(figurex7)+1)=maxX(7);figurex8(numel(figurex8)+1)=maxX(8);figurex9(numel(figurex9)+1)=maxX(9);figurex10(numel(figurex10)+1)=maxX(10); figurex11(numel(figurex11)+1)=maxX(11);figurex12(numel(figurex12)+1)=maxX(12); figurez(numel(figurez)+1)=maxY; %函数最大值 kkk=0; for p=1:3 while(k<m) for i=1:N %一次一条鱼进行 XX=[X(i,1),X(i,2),X(i,3),X(i,4),X(i,5),X(i,6),X(i,7),X(i,8),X(i,9),X(i,10),X(i,11),X(i,12)]; end end k=k+1; %进入下一次迭代 yy(k)=maxY; end a1(p)=maxY; end u=length(a1); for i=1:u-1 for j=i+1:u %从小到大排列 if a1(i)>a1(j) b1=a1(i); a1(i)=a1(j); a1(j)=b1; end end end c1=[1:1:u]; %plot(c1,a1); b=length(a1); disp('最优点为:') maxX %输出最佳x值 disp('最优解为:') maxY %输出最佳y值 toc figure(1) plot(yy) xlabel('迭代次数') ylabel('适应度值')
3 仿真结果
4 参考文献
[1]王正初, 周慕逊, 李军,等. 基于人工鱼群算法的水库优化调度研究[J]. 电力系统保护与控制, 2007, 35(21):43-46.