1 简介

针对当前各种启发式算法,如遗传算法(GA),粒子群算法(PSO),模拟退火算法(SA)等在求解水库优化调度中的不足,提出了将新型的集群智能算法-人工鱼群算法AFSA(Artificial Fish School Algorithm)用于求解水库优化调度问题。该算法通过模拟鱼群的一些基本行为,如捕食、聚群、追尾,来求解问题的最优解。根据水库优化调度问题的情况及数学模型,给出了基于人工鱼群算法的水库优化调度的求解策略,详细讨论了求解步骤,最后给出了实验仿真结果。结果表明该算法具有较强的局部搜索能力,同时也有更高的搜索效率,与其它方法相比,该算法能够找到更优解,验证了该算法的可行性和有效性。

【优化调度】基于人工鱼群算法求解梯级水库优化调度matlab源码_优化调度

【优化调度】基于人工鱼群算法求解梯级水库优化调度matlab源码_优化调度_02

【优化调度】基于人工鱼群算法求解梯级水库优化调度matlab源码_优化调度_03

【优化调度】基于人工鱼群算法求解梯级水库优化调度matlab源码_优化调度_04

【优化调度】基于人工鱼群算法求解梯级水库优化调度matlab源码_优化调度_05

【优化调度】基于人工鱼群算法求解梯级水库优化调度matlab源码_优化调度_06

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 仿真结果

【优化调度】基于人工鱼群算法求解梯级水库优化调度matlab源码_优化调度_07

4 参考文献

[1]王正初, 周慕逊, 李军,等. 基于人工鱼群算法的水库优化调度研究[J]. 电力系统保护与控制, 2007, 35(21):43-46.

【优化调度】基于人工鱼群算法求解梯级水库优化调度matlab源码_优化调度_08