PSO求解梯级水库优化调度

PSO求解梯级水库优化调度_第1张图片

 

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

你可能感兴趣的:(MATLAB,板块7:优化类问题,算法,matlab,PSO求解梯级水库优化调度)