目录
1 主要内容
程序主要参考《基于改进多目标灰狼算法的冷热电联供型微电网运行优化》,但是未考虑冷能,仅对热电能量进行分析,针对热电联产微电网运行调度的优化问题,为实现节能减排的目标,以微电网运行费用和碳排放量为优化目标,建立了包含风机、微型燃气轮机、余热锅炉等微源的微电网优化模型,模型优化求解使用改进的多目标灰狼优化算法,得到多目标问题的 Pareto最优解集。
并考虑了四种模式以及适应范围:
四模式:无、单一加储电、单一加储热、既储电又储热
(1)未加储能和储热:适应于新能源刚发展,渗透率低的地区
适应于光照风速特稳定或电能质量要求不高的地区
(2)单一加储热:适合北部严寒地区,储热需求大,这里注意下储热目前成本上相较于储电只有1到2成,所以优先储热提高消纳
(3)单一加储电:适合南部不需要储热的地区,或者中部对电能质量要求更高的地区,或者风光波动过大的地区
(4)储电加储热:电热都有需求且电波动较大的地区。
(注:程序运行时间比较长,需要足够的耐心)
2 部分代码
%随机生成MT出力
clc
clear
%种群初始化
nVar=48;
% Lower bound and upper bound
lb(1,1:24 )=20;
lb(1,25:48 )=-50;
ub(1,1:24 )=40; %把上下边界像单个粒子的位置一样,横向排列
ub(1,25:48 )=25;
Socmin=50;
Socmax=250;
GreyWolves_num=500;
MaxIt=5000; % Maximum Number of Iterations
% Initialization 初始化
GreyWolves = zeros( GreyWolves_num , nVar+2+2 ); %创建空粒子
for i=1:GreyWolves_num
%首先是MT初始化
for j=1 : nVar/2
GreyWolves(i,j)= lb(j)+rand()*( ub(j) - lb(j) );
%加一个向上取整函数,可以方便控制微燃机出力,也方便画图,也方便筛选粒子。
GreyWolves(i,j)= ceil(GreyWolves(i,j));
end
%下面是储热功率初始化
Soc=100 ;
for j=nVar/2+1 : nVar
GreyWolves(i,j)= -50+rand()*(50+25 ) ;
%上面是概率生成功率P_BA,没有考虑超出容量限制的问题,下面将解决。
Soc=Soc+GreyWolves(i,j) ;
if Soc > 250 || Soc < 50 %如果越限
Soc=Soc-GreyWolves(i,j) ; %撤销容量
GreyWolves(i,j) =0; %撤销功率
end
end
GreyWolves(i,nVar+1:nVar+2)= Double_CC_fitness(GreyWolves(i,1:nVar/2), GreyWolves(i,1+nVar/2:nVar));
end
Archive_num=100;
Archive=[];
%%
% MOGWO main loop
for it=1:MaxIt
a=2-it*((2)/MaxIt);
%首先非支配排序
GreyWolves = Non_Dominated( GreyWolves ,nVar,2 );
%获取paroto等级为0、1、2的粒子,为选取头狼做准备
Graywolves_rank_0=Get_Graywolves_rank_0(GreyWolves );
% Graywolves_rank_1=Get_Graywolves_rank_1(GreyWolves );
% Graywolves_rank_2=Get_Graywolves_rank_2(GreyWolves );
%将rank_0放进存储库Archive,然后拥挤度排序,选择拥挤度最大的前Archive_num个狼,放进存储库
Archive=[ Archive;
Graywolves_rank_0 ];
Archive = Non_Dominated( Archive ,nVar,2 );
Archive =Get_Graywolves_rank_0(Archive );
[Archive ,Alpha,Beta,Delta] = Congestion_rank_select(Archive ,Archive_num) ;
%头狼的选取,首先应该是先0,后1,后2
%其次是尽量选择拥挤度小的
%把整群个体数设置的大一点,确保第一代就极有可能使得存储库大于3只狼
% %先判断0里狼的个数是否超过三只
%
% if size(Graywolves_rank_0,1) >= 3
% %拥挤度排序后,选择拥挤度最大的三个
% end
%其次是,利用Alpha、Beta、Delta作为基准位置,对所有粒子进行更新。
for i=1:GreyWolves_num
for j=1:nVar
r1=rand(); % r1 is a random number in [0,1]
r2=rand(); % r2 is a random number in [0,1]
A1=2*a*r1-a; % 计算系数A,Equation (3.3)
C1=2*r2; % 计算系数C,Equation (3.4)
% Alpha狼位置更新
D_alpha=abs(C1*Alpha(1,j)-GreyWolves(i,j)); % Equation (3.5)-part 1
X1=Alpha(1,j)-A1*D_alpha; % Equation (3.6)-part 1
X1 = max( [min([ X1, ub(j) ] ) ,lb(j) ] );
r1=rand();
r2=rand();
A2=2*a*r1-a; % 计算系数A,Equation (3.3)
C2=2*r2; % 计算系数C,Equation (3.4)
% Beta狼位置更新
D_beta=abs(C1*Beta(1,j )-GreyWolves(i,j)); % Equation (3.5)-part 1
X2=Beta(1,j )-A1*D_beta; % Equation (3.6)-part 1
X2 = max( [min([ X2, ub(j) ] ) ,lb(j) ] );
r1=rand();
r2=rand();
A3=2*a*r1-a; % 计算系数A,Equation (3.3)
C3=2*r2; % 计算系数C,Equation (3.4)
% Delta狼位置更新
D_delta=abs(C1*Delta(1,j )-GreyWolves(i,j )); % Equation (3.5)-part 1
X3=Delta(1,j )-A1*D_delta; % Equation (3.6)-part 1
X3 = max( [min([ X3, ub(j) ] ) ,lb(j) ] );
% 位置更新
GreyWolves(i,j)=(X1+X2+X3)/3;% Equation (3.7)
%下面是位置越限处理
GreyWolves(i,j)=round( GreyWolves(i,j) );
end
Soc=100;
%因为22点是峰时,23,24点是谷电,并且夜间风大。所以我大概率假设,23,24在充电。
%充电两小时后,为5+2.5*2=10kWh;
%因此,我将日开始Soc设置为10;当时刻容量越限时,容量等于边限,功率等于0;
for j= 1+nVar/2 : nVar
%首先是把储热放热整定为100的倍数
%上面是概率生成功率P_BA,没有考虑超出容量限制的问题,下面将解决。
Soc=Soc+GreyWolves(i,j) ;
if Soc > 250 || Soc < 50 %如果越限
Soc=Soc-GreyWolves(i,j) ; %撤销容量
GreyWolves(i,j) =0; %撤销功率
end
end
GreyWolves(i,nVar+1:nVar+2)= Double_CC_fitness(GreyWolves(i,1:nVar/2), GreyWolves(i,1+nVar/2:nVar));
end
figure(1)
Archive_Cost=Archive(:,49);
Archive_Carbon=Archive(:,50);
plot(Archive_Cost,Archive_Carbon,'*' );
% hold on
figure(2)
GreyWolves_Cost=GreyWolves(:,49);
GreyWolves_Carbon=GreyWolves(:,50);
plot(GreyWolves_Cost,GreyWolves_Carbon,'o' );
end
xlswrite('Archive.xlsx', Archive );
3 程序结果