%%%%%%%%%%%%%%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)
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(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