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

本文介绍了人工鱼群算法(AFSA)在解决水库优化调度问题中的应用,针对传统启发式算法的不足,AFSA通过模拟鱼群行为寻找最优解。算法展示出强大的局部搜索能力和高效率,实验结果表明其能找到更优解,验证了算法的可行性和有效性。
摘要由CSDN通过智能技术生成

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.

 

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Matlab科研辅导帮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值