• USSThobo2
    了解作者
  • matlab
    开发工具
  • 16KB
    文件大小
  • rar
    文件格式
  • 2
    收藏次数
  • 10 积分
    下载积分
  • 42
    下载次数
  • 2017-08-30 17:19
    上传日期
遗传-套粒子群算法用于解决经济调度问题。
NestedParticle Swarm Optimization .rar
  • isPSO2.m
    2.6KB
  • data.m
    5.2KB
  • HPSO.m
    7.4KB
  • Best.m
    2.1KB
  • fitness2.m
    4.3KB
  • guangfuchuli.m
    2KB
  • Hfitness.m
    2.2KB
  • jingjidiaodu.m
    10.4KB
  • mohubianliang.m
    521B
  • yueshu.m
    4.2KB
内容介绍
%%清屏 clc; clear all; %%加载数据 [A,B,C,ELoad,Load,TotaLoad,Ppv,EPpv,Ploss,Pmax,Pmin,deltT,delt,Ton,Toff,Tc,Sh,Sc,L1,L2,W1,W2,... alf,alf2,beta1,beta2,Pricload,Pricep,Pricefa,Qco2,gama1,gama2,maxtimes,rate,Timesofprice,deltprice]=data(); %%参数初始化 times=24; n=10;%燃煤机组数 %……上一时段的机组值……% Plast=[435 425 30 30 30 30 30 30 30 30];%0时刻的机组初始值 Ilast=[1 1 1 1 1 1 1 1 1 1];%0时刻的机组出力状态 Xonlast=[4 4 3 3 3 3 3 3 3 3];%各机组出力前的持续停机时间Xofflast=[0 0 0 0 0 0 0 0 0 0] Xofflast=[0 0 0 0 0 0 0 0 0 0];%各机组停机前的持续运行时间Xonlast=[0 0 0 0 0 0 0 0 0 0] Cqt=zeros(1,n);%用于存储各机组可以改变启停状态的命令,0-维持原状,1-可以改变启停状态 % Fbest1=zeros(1,times);%用于置放各时段考虑惩罚成本的最优成本最终值 Fbestotal=zeros(1,times); Ibest1=zeros(1,n);%用于存放对应时段最佳的机组启停状态 Pbest1=zeros(1,n);%用于存放对应时段最佳启停状态下的机组出力值 Pbest2=zeros(1,n);%用于存放对应时段最佳启停状态下的机组四舍五入的出力值 % Xontemp=zeros(1,n); % Xofftemp=zeros(1,n); deltPowerbest=zeros(1,times);%用于存放对应时段最佳的弃负荷量 Eatbestotal=zeros(1,times);%用于存放最佳碳排量 Ratebest=zeros(1,times);%用于存放最佳的弃荷率 Pricepbest=zeros(1,times);%最佳碳交易价格 SALEemission=zeros(1,times);%用于存放最佳碳权出售量 Ptotal=zeros(times,n);%用于存放24个时段的最佳出力值,便于最终输出 Itotal=zeros(times,n);%用于累计存放24个时段最佳的启停状态 Xontotal=zeros(times,n); Xofftotal=zeros(times,n); Fbestfirst1=zeros(1,times);%用于存放不考虑弃负荷时的成本 Ibestfirst1=zeros(times,n);%用于存放不考虑弃负荷时的机组启停状态 Pbestfirst1=zeros(times,n);%用于存放不考虑弃负荷时的机组出力 Fbestfirst2=zeros(1,times);%用于存放不考虑竞拍策略使的成本 Ibestfirst2=zeros(times,n);% Pbestfirst2=zeros(times,n);% %…………分配弃荷空间…………% Fbestemp1=zeros(maxtimes,1);%用于存放特定弃负荷量情况下的系统最优成本 Ibestemp1=zeros(maxtimes,n);%用于存放特定弃负荷量情况下的系统最佳启停状态 Pbestemp1=zeros(maxtimes,n);%用于存放特定弃负荷量情况下的系统最佳出力值 deltPowerbestemp1=zeros(maxtimes,1);%用于存放各种弃负荷量值的大小 Eatbestemp1=zeros(maxtimes,1); Xontemp1=zeros(maxtimes,n); Xofftemp1=zeros(maxtimes,n); %………………分配碳价竞拍空间信息…………% Fbestemp2=zeros(Timesofprice,1);%用于存放特定弃负荷量情况下的系统最优成本 Ibestemp2=zeros(Timesofprice,n);%用于存放特定弃负荷量情况下的系统最佳启停状态 Pbestemp2=zeros(Timesofprice,n);%用于存放特定弃负荷量情况下的系统最佳出力值 Eatemp2=zeros(Timesofprice,1); Xontemp2=zeros(Timesofprice,n); Xofftemp2=zeros(Timesofprice,n); BestPricetemp=zeros(Timesofprice,1);%用于存放各种弃负荷量值的大小 Ratebestemp=zeros(Timesofprice,1); Eatbestemp2=zeros(Timesofprice,1); deltPowerbestemp2=zeros(Timesofprice,1); Priceptemp=zeros(Timesofprice,1); number=[0 0 0 0 0 0 0 0 0 0];%用于存放可以改变启停状态的机组序号 NUMPalast=zeros(1,n);%用于累计各机组24时段总共违反爬坡的个数 creditlast=1;%信用值初始化 SERIAL=zeros(Timesofprice,1); %%开始主程序 for Time=1:times disp('********************************************************************************'); disp(['时间段编号为',num2str(Time)]);%将数组中的数转换成字符串“2”发音为two,与to谐音 %……为各个时段在不违背爬坡约束条件下的机组制定实际出力最大/小值……% pmax=zeros(1,n); pmin=zeros(1,n); %……用于临时存储各时段下各机组是否满足启停时间约束条件信息0-不满足,1-满足……% Isave=zeros(1,n); %……计算各个时段各机组在不违背爬坡约束的条件下的出力最大值和最小值……% for i=1:n a=Plast(i)+deltT*delt(i); b=Plast(i)-deltT*delt(i); if a<=Pmax(i) pmax(i)=a; else pmax(i)=Pmax(i); end if b>=Pmin(i) pmin(i)=b; else pmin(i)=Pmin(i); end end % disp('各机组实际出力最大值为'); % disp(pmax); % disp('各机组实际出力最小值为'); % disp(pmin); %……该循环用于判断各时段各机组在遵循连续启/停时间的约束下是否达到可以停/启的条件……% for i=1:n %对1号机组默认其启停状态为1,即1号机组始终出力 if Ilast(i)==0 if Xofflast(i)<Toff(i)%如过上一时段机组的连续停机时间小于限定的连续停机时间,则本时段的出力状态认为停机状态,即Isave(i)的值为0 Isave(i)=0; Cqt(i)=0; number(i)=0; %用于计录可以改变启停状态的机组序号,元素为0表示该机组暂时还不能改变启停状态,状态必须和上一时段一样 else Cqt(i)=1;%此时Cqt(i)的值为1,表示此时可以改变机组出力状态,具体地说可以开机 number(i)=i;%i号机可以改变启停状态 end else %对应的是Ilast(i)==1的条件 if Xonlast(i)<Ton(i) Isave(i)=1;%如过上一时段机组的连续运行时间小于限定的连续运行时间,则本时段的出力状态认为开机状态即Isave(i)的值为1 Cqt(i)=0; number(i)=0; else Cqt(i)=1; number(i)=i; %number中的元素不为零时则对应的序号机组可以改变出力状态,为零时则表示还不能改变启停状态。如元素为2,表示第2台机组可以改变启停状态了 end end end D1=sum(Cqt);%D1用于累计满足启停条件的重新启/停条件的机组个数,放在粒子群中也就是粒子的维数 %……………………………对不同弃负荷水平下的调度成本进行比较………………………………% for k=1:Timesofprice Priceptemp(k)=Pricep+(k-1)*deltprice; K1=1;%实际负荷率 eload=0; spanabandon=0.030;%弃荷水平的变化步长 for j=1:maxtimes eload=K1*ELoad(Time); load=K1*Load(:,Time); [epsilon]=mohubianliang(Time,load);%调用模糊变量函数 ploss=K1*Ploss(Time); totaload=K1*TotaLoad; deltPower=(1-K1)*ELoad(Time); K1=K1-spanabandon; [Fbest,Ibest,Pbest,XonBest,XoffBest,Eat]=HPSO(D1,number,n,Ilast,Plast,Xonlast,Xofflast,Time,pmax,pmin,eload,load,ploss,epsilon,deltPower,totaload,creditlast,Priceptemp(k));%调用外围的粒子群算法,Fbest1的值是考虑了惩罚并非是实际值 if j==1 Fbestfirst1(Time)=Fbest;%用于记录非弃荷情况下的信息 Ibestfirst1(Time,:)=Ibest; Pbestfirst1(Time,:)=Pbest; end Fbestemp1(j)=Fbest; Ibestemp1(j,:)=Ibest; Pbestemp1(j,:)=Pbest; deltPowerbestemp1(j)=deltPower; Eatbestemp1(j)=Eat; Xontemp1(j,:)=XonBest; Xofftemp1(j,:)=XoffBest; % disp('*****该情景下启停状态为***') % disp(Ibest); end NUMBER1=find(Fbestemp1==min(Fbestemp1));%找出成本最小的那组序号 SERIAL(k)=NUMBER1; Fbestemp2(k)=Fbestemp1(NUMBER1);%最优成本 Pbestemp2(k,:)=Pbestemp1(NUMBER1,:);%最优出力 Ibestemp2(k,:)=Ibestemp1(NUMBER1,:);%最优启停状态 deltPowerbestemp2(k)=deltPowerbestemp1(NUMBER1);%最优弃负荷量 Eatbestemp2(k)=Eatbestemp1(NUMBER1);%最优碳排量 Ratebestemp(k)=(NUMBER1-1)*spanabandon; Xontemp2(k,:)=Xontemp1(NUMBER1,:);%最优连续开机时间 Xofftemp2(k,:)=Xofftemp1(NUMBER1,:);%最优连续停机时间 end NUMBER2=find(Fbestemp2==min(Fbestemp2));%找出成本最小的那组序号 Ptotal(Time,:)=Pbestemp2(NUMBER2,:);%储存出力值便于最后输出观察 Itotal(Time,:)=Ibestemp2(NUMBER2,:);%储存启停状态便于最后输出观察 Xontotal(Time,:)=Xontemp2(NUMBER2); Xofftotal(Time,:)=Xofftemp2(NUMBER2); Eatbestotal(Time)=Eatbestemp2(NUMBER2); Ratebest(Time)=Ratebestemp(NUMBER2); deltPowerbest(Time)=deltPowerbestemp2(NUMBER2); Fbestfirst2(Time)=Fbestemp2(1); Ibestfirst2(Time,:)=Ibestemp2(1,:); Pbestfirst2(Time,:)=Pbestemp2(1,:); Pricepbest(Time)=Priceptemp(NUMBER2); %…………………………对结果进行输出……………………% %……输出最佳启停状态……% disp('各机组启停状态为:'); disp(Itotal(Time,:)); %……输�
评论
    相关推荐