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