PSO求解梯级水库优化调度
?
%%%%%%%%%%%%%%PSO求解梯級水庫優化調度%%%%%%%%%%%%%%%%%
%------初始格式化--------------------------------------------------
clear all;
clc;
format short;
tic ? %-----------------------計時開始
%------給定初始化條件----------------------------------------------
c1=1.4962; ? ? ? ? ? ? %學習因子1
c2=1.4962; ? ? ? ? ? ? %學習因子2
w=0.7298; ? ? ? ? ? ? ?%慣性權重
MaxDT=20; ? ? ? ? ? ?%最大迭代次數-------k次迭代
D=12; ? ? ? ? ? ? ? ? ?%搜索空間維數(未知數個數)-----D維空間
N=100; ? ? ? ? ? ? ? ? ?%初始化群體個體數目--------m個粒子
eps=10^(-6); ? ? ? ? ? %設置精度(在已知最小值時候用)
%-----------------------------------------時段水位上下限
zmin=[970,970,970,970,952,952,952,952,952,952,970,970] ? %%[888,888,888,888,888,893,888,888,888,888,888,888];
zmax=[977,977,977,980,980,977,977,957,977,970,977,977] ? %%[898,898,898,898,898,898,893,892,892,898,898,898];
%------初始化種群的個體(可以在這里限定位置和速度的范圍)------------
for i=1:N
? ? for j=1:12
? ? x(i,j)=zmin(j)+(zmax(j)-zmin(j))*rand; %水位初始化
? ? end
? ??
? ? k=0.2; ? ? ? ?%%%%%%%%%%%%
? ? for j=1:12
? ? v(i,j)=k*(zmax(j)-zmin(j))*rand; ? %速度 ?
? ? end
end
%------先計算各個粒子的適應度(發電量),并初始化Pi和Pg----------------------
for i=1:N
? ? p(i)=fxpso(x(i,:));?
? ? pb(i,:)=x(i,:); ? ??
end
gb=x(1,:); ? ? ? ? ? ? ?
for i=2:N
? ? if fxpso(x(i,:))>fxpso(gb) ? ? %%%%%%%%%%%%%注意大小號
? ? ? ? gb=x(i,:); ? ? ? ? ? ??
? ? end
end
%------進入主要循環,按照公式依次迭代,直到滿足精度要求------------
for t=1:MaxDT
? ? for i=1:N
? ? ? ? v(i,:)=w*v(i,:)+c1*rand*(pb(i,:)-x(i,:))+c2*rand*(gb-x(i,:));
? ? ? ? x(i,:)=x(i,:)+v(i,:); ?
? ? ? ? for j=1:12 ? ? ? ? ? ? ?%%%%%%%%%%%%%%
? ? ? ? ? ? if x(i,j)<zmin(j)
? ? ? ? ? ? ? ? x(i,j)=zmin(j)+rand*(zmax(j)-zmin(j)); ? ? ?
? ? ? ? ? ? elseif x(i,j)>zmax(j)
? ? ? ? ? ? ? ? x(i,j)=zmin(j)+rand*(zmax(j)-zmin(j));
? ? ? ? ? ? end
? ? ? ? end
? ? ? ? if fxpso(x(i,:))>p(i)
? ? ? ? ? ? p(i)=fxpso(x(i,:)); ?%第i個粒子新的發電量
? ? ? ? ? ? pb(i,:)=x(i,:); ? ? ?%第i個粒子新的水位值
? ? ? ? end
? ? ? ? if p(i)>fxpso(gb)
? ? ? ? ? ? gb=pb(i,:);
? ? ? ? end
? ? ? ? y=fxpso(x(i,:));
? ? ? ? [e,f]=max(y);
? ? end
? ? gb=x(f,:);
? ? Gbest(t)=fxpso(gb);?
? ? xdai(t,:)=gb; ? ? ? ?%最優水位值 ?
end
for i=1:MaxDT-1
? ? for j=2:MaxDT
? ? ? ? if Gbest(i)<Gbest(j)
? ? ? ? ? ? temp1=Gbest(i);
? ? ? ? ? ? Gbest(i)=Gbest(j);
? ? ? ? ? ? Gbest(j)=temp1;
? ? ? ? ? ? temp2=xdai(i);
? ? ? ? ? ? xdai(i,:)=xdai(j,:);
? ? ? ? ? ? xdai(j,:)=temp2;
? ? ? ? end
? ? end
end
gb=xdai(1,:)
Gbest=Gbest(1)
toc ? %結束計時
%------最后給出計算結果
disp('*************************************************************')
disp('函數的全局最優位置為:')
Solution=gb'
disp('最后得到的優化極值為:')
Result=fxpso(gb)
disp('*************************************************************')
? ? ?x=gb;
D133? ??
總結
以上是生活随笔為你收集整理的PSO求解梯级水库优化调度的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 带收缩因子的PSO优化算法
- 下一篇: 通过 PSO实现TSP问题优化