【优化调度】基于粒子群算法求解梯级水电站调度问题matlab代码
1 簡介
粒子群算法( Particle Swarm Optimization, PSO)最早是由Eberhart和Kennedy于1995年提出,它的基本概念源于對鳥群覓食行為的研究。設想這樣一個場景:一群鳥在隨機搜尋食物,在這個區域里只有一塊食物,所有的鳥都不知道食物在哪里,但是它們知道當前的位置離食物還有多遠。最簡單有效的策略?尋找鳥群中離食物最近的個體來進行搜素。PSO算法就從這種生物種群行為特性中得到啟發并用于求解優化問題。
用一種粒子來模擬上述的鳥類個體,每個粒子可視為N維搜索空間中的一個搜索個體,粒子的當前位置即為對應優化問題的一個候選解,粒子的飛行過程即為該個體的搜索過程.粒子的飛行速度可根據粒子歷史最優位置和種群歷史最優位置進行動態調整.粒子僅具有兩個屬性:速度和位置,速度代表移動的快慢,位置代表移動的方向。每個粒子單獨搜尋的最優解叫做個體極值,粒子群中最優的個體極值作為當前全局最優解。不斷迭代,更新速度和位置。最終得到滿足終止條件的最優解。
算法流程如下:
1、初始化
首先,我們設置最大迭代次數,目標函數的自變量個數,粒子的最大速度,位置信息為整個搜索空間,我們在速度區間和搜索空間上隨機初始化速度和位置,設置粒子群規模為M,每個粒子隨機初始化一個飛翔速度。
2、 個體極值與全局最優解
定義適應度函數,個體極值為每個粒子找到的最優解,從這些最優解找到一個全局值,叫做本次全局最優解。與歷史全局最優比較,進行更新。
3、 更新速度和位置的公式
?
4、 終止條件
(1)達到設定迭代次數;(2)代數之間的差值滿足最小界限
2 部分代碼
%------主函數源程序-周調度(main.m) %------基本粒子群優化算法(Particle Swarm Optimization)----------- %------名稱:基本粒子群優化算法(PSO) %------作用:求解優化問題(周調度) %------說明:全局性,并行性,高效的群體智能算法%------初始格式化-------------------------------------------------- tic clear?all; clc; format?short; %% ------給定水電站初始化條件---------------------------------------------- %------------水電站1--------------------------------------- Vmax1=9015*10^4; ? ? ? ?%水庫容量上限(m3) Vmin1=7000*10^4; ? ? ? ??%水庫容量下限(m3) H1=640; ? ? ? ? ? ? ? ? ?%水庫容量初始值水位(m) V1=(2.0554*H1^2-2413.5002*H1+709934.65)*10^4?; ? ? ? ?%水庫庫容與水位的關系 h1=91; ? ? ? ? ? ? ? ? ??%初始水庫水頭(m) qr(:,1:7)=[20.4?25.2?22.1?19.3?16.4?23.3?28.6?]; ? ? ??%水庫來水流量(m3/s) qmax1=44; ? ? ? ? ? ? ??%水庫引用流量上限(m3/s) qmin1=0; ? ? ? ? ? ? ? ??%水庫引用流量下限(m3/s) A1=9.8*10^3; ? ? ? ? ? ??%水庫出力系數 k1=0.65; ? ? ? ? ? ? ? ? ?%發電效率 t=8.64*10^4; ? ? ? ? ? ?%水庫發電引用流量時間段(s) fengdian1=[10?15?11?12?16?17?18];%水庫1每個時段風電發電量 %-----------水電站2--------------------------------------%------初始化種群的個體(可以在這里限定位置和速度的范圍)------------q=zeros(N,2*T); ? ? ?%位置隨機初始化位置 v=rand(N,2*T); ? ? ? ? ??%速度隨機初始化速度%------適應度函數源程序(fitness.m)---------------------------- %% -----------------最后給出計算結果------------------------------------ disp('****************************結果顯示*******************************') Bestdisp('水庫來水預測流量(米/秒):') QR1=Qr1(r,:) QR2=Qr2(r,:)disp('水庫各時段初始水位(米):') HS1=Hs1(r,:) HS2=Hs2(r,:)disp('水庫各時段平均庫容大小(萬立方米):') VJ1=Vj1(r,:)/(10^4) VJ2=Vj2(r,:)/(10^4)disp('水庫各時段發電量(萬kWh):') HJ1=Hj1(r,:) e1=k1*A1*Best(1,1:7).*(HJ1-539.3).*t/(3.6*10^10) ? ? ? ? ? ? ? ? ? ? ? ?%-----************************************ sum(e1) disp('水庫各時段發電量(萬kWh):') HJ2=Hj2(r,:) e2=k2*A2*Best(1,8:14).*(HJ2-478.28).*t/(3.6*10^10) sum(e2) disp('水庫平均發電量功率(萬kW):') e1/24 e2/24disp('水庫總發電量(萬kWh):') Edisp('水庫各時段棄水量(萬立方米):') Quit1=((quit1(r,:)')/(10^4))' Quit2=((quit2(r,:)')/(10^4))'disp('水庫總棄水量(萬立方米):') ZQuit1=sum(Quit1) ZQuit2=sum(Quit1)%------------------------仿真結果------------------------------------ figure(1) x=1:7; subplot(2,3,1),bar(x,Best(:,1:7),'g'),title('引用流量與時段的關系'?),xlabel('時段T'),ylabel('發電水量(米/秒)'),grid subplot(2,3,2),bar(x,QR1,'b'),title('來水預測流量與時段的關系'),xlabel('時段T'),ylabel('來水量(米/秒)'),grid subplot(2,3,3),bar(x,VJ1,'c'),title('平均庫容與時段的關系'),xlabel('時段T'),ylabel('庫容(萬立方米)'),grid x=1:8; subplot(2,3,4),plot(x,HS1,'b'),?hold?on?,plot(x,HS1,'*r'),?hold?off?,title('各時段初始水位與時段的關系'),xlabel('時段T'),ylabel('水位(米)'),grid, x=1:7; subplot(2,3,5),bar(x,e1,'m'),title('發電量與時段的關系'),xlabel('時段T'),ylabel('發電量(萬kWh)'),grid subplot(2,3,6),bar(x,Quit1,'k'),title('棄水量與時段的關系'),xlabel('時段T'),ylabel('棄水量(萬立方米)'),grid figure(2) x=1:7; subplot(2,3,1),bar(x,Best(:,8:14),'g'),title('引用流量與時段的關系'?),xlabel('時段T'),ylabel('發電水量(米/秒)'),grid subplot(2,3,2),bar(x,QR2,'b'),title('來水預測流量與時段的關系'),xlabel('時段T'),ylabel('來水量(米/秒)'),grid subplot(2,3,3),bar(x,VJ2,'c'),title('平均庫容與時段的關系'),xlabel('時段T'),ylabel('庫容(萬立方米)'),grid x=1:8; subplot(2,3,4),plot(x,HS2,'b'),?hold?on?,plot(x,HS2,'*r'),?hold?off?,title('各時段初始水位與時段的關系'),xlabel('時段T'),ylabel('水位(米)'),grid, x=1:7; subplot(2,3,5),bar(x,e2,'m'),title('發電量與時段的關系'),xlabel('時段T'),ylabel('發電量(萬kWh)'),grid subplot(2,3,6),bar(x,Quit2,'k'),title('棄水量與時段的關系'),xlabel('時段T'),ylabel('棄水量(萬立方米)'),griddisp('****************************結果顯示*******************************') %----------------算法結束---DreamSun GL & HF------------------------------- figure(3) plot(y) xlabel('迭代次數') ylabel('棄水量') % axis([0 1500 200 300]) toc3 仿真結果
4 參考文獻
[1]夏燕, 馮仲愷, 牛文靜,等. 基于混合量子粒子群算法的梯級水電站群調度[J]. 水力發電學報, 2018, 37(11):12.
部分理論引用網絡文獻,若有侵權聯系博主刪除。
5 MATLAB代碼與數據下載地址
見博客主頁
總結
以上是生活随笔為你收集整理的【优化调度】基于粒子群算法求解梯级水电站调度问题matlab代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android开机启动检测和连接wifi
- 下一篇: 钉钉微应用内置浏览器js缓存清理