【优化调度】基于人工鱼群算法求解梯级水库优化调度matlab源码
生活随笔
收集整理的這篇文章主要介紹了
【优化调度】基于人工鱼群算法求解梯级水库优化调度matlab源码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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:Nwwww=[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:3while(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)];endendk=k+1;?%進入下一次迭代yy(k)=maxY;enda1(p)=maxY; endu=length(a1); for?i=1:u-1for?j=i+1:u?? ? ? ? ?%從小到大排列if?a1(i)>a1(j)b1=a1(i);a1(i)=a1(j);a1(j)=b1;endend 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.
5 MATLAB代碼與數據下載地址
見博客主頁頭條
總結
以上是生活随笔為你收集整理的【优化调度】基于人工鱼群算法求解梯级水库优化调度matlab源码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HttpModules 管道过滤 自定义
- 下一篇: Thread类和Runnable接口