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    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fpga和matlab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值