目录
一、代码总体思路:
二、建模流程图与讲解:
运行结果:
相关代码:
本文是对于《基于改进多目标灰狼算法的冷热电联供型微电网运行优化》的基本复现
参考文献:
摘要:针对冷热电联供型微电网运行调度的优化问题,为实现节能减排的目标,以微电网运行费用和环境污染成本为优化目标,建立了包含风机、微型燃气轮机、余热锅炉、溴化锂吸收式制冷机等微源的微电网优化模型。模型的优化求解使用改进的多目标灰狼优化算法,得到多目标问题的 Pareto 最优解集,并针对微电网优化问题约束条件较多,算法前期探索能力不足的问题,对算法进行改进。仿真结果表明,改进算法的求解速度和全局搜索性能优于原始算法,文中方法可以为冷热电联供型微电网优化调度提供建议,实现根据用户需求的微电网灵活调动,达到减少运行费用和污染气体排放的效果。
本代码根据论文构建了四种模式:无、单一加储电、单一加储热、既储电又储热
当前各个地方新能源发展程度不同,以及电负荷及热负荷的需求不同,因此设置四模式,不是为了体现哪个模式更优,而是适应地域适应负荷需求下面给出各个模式的长处:
(1)无:适应于新能源刚发展,渗透率低的地区,适应于光照风速特稳定或电能质量要求不高的地区
(2)单一加储热:适合北部严寒地区,储热需求大,这里注意下储热目前成本上相较于储电只有1到2成,所以优先储热提高消纳
(3)单一加储电:适合南部不需要储热的地区,或者中部对电能质量要求更高的地区,或者风光波动过大的地区
(4)储电加储热:电热都有需求且电波动较大的地区
(系统结构图不是优化算法流程图)
这部分暂时不能分享流程图,避免雷同,可参阅代码,我略作简述(算了,直接介绍代码组成吧,你们反推下流程图)
(1)楼宇负荷表:给24小时基础电热负荷数据
(2)风机由一天的风速求功率
(3)参数表:限值常参数及可变范围
(4)非支配排序:对种群筛选出帕累托等级为1的最优个体组成新矩阵
(5)微燃机发的电到消耗的天然气的体积到天然气的总费用
(6)利用微燃机发出的电热效率比例推出发出的热,微燃机这里为了让效率提高,设置为既能发电又能利用余热,加起来效率30%左右,具体的看代码
(7)主文件:这里最需要注意的是,电(热)功率与储电(热)容量的双重约束
(8)程序运行较慢,为了避免某个参数忘记采集,需要再次无意义的运行,而设置了此excel文件,用于保存优化完后的最后一代狼群
(9)这三个是当时用来分别输出新一代种群中帕累托等级分别为0,1,2的个体的,避免程序刚运行时,出现帕累托等级为0的个体只有一个的情况,不足以选出三只头狼,后来,为了提高算法的全局搜索能力,避免过早收敛,而将此情况头狼改为在狼群中随机选取。狼群缺少遗传的变异环节,容易陷入局部最优,因此设置了多周期余弦因子,代码可见(这里多周期余弦因子在另一个三目标程序里,好友可以自己改进)用于从最优中随机挑选头狼
(10)这部分是双目标函数的适应度函数部分,上两个被我整合为了CC一个,简化代码,一起放进狼群的最后四列中
(11)此为种群初始化部分代码,创建的粒子分布:
这里解释下便于理解:
自变量位置(24*n)+ 运行成本值 + 碳排放值2+帕累托等级+拥挤度
这代码采用矩阵,亲测比群文件V2G代码采用的结构体运行快的多
(12)帕累托等级排序
(13)程序运行过程中的帕累托等级为0的个体经过不断筛选后,依然为0的个体,保留在这里,用于画帕累托前沿图:
可以筛选出这四条线的四个端点的某个个体作为某一模式某一目标的最优点,对应的设备出力位置,就是下面这些柱状图:
%% 以下为部分,获取全部请 关注 VX “神经网络与数学建模” %随机生成MT出力 clc clear %种群初始化 nVar=72; % Lower bound and upper bound lb(1,1:24 )=20; lb(1,25:48 )=-500; lb(1,49:72 )=-50; ub(1,1:24 )=40; %把上下边界像单个粒子的位置一样,横向排列 ub(1,25:48 )=500; ub(1,49:72 )=25; H_Socmin=1000; H_Socmax=4000; E_Socmin=50; E_Socmax=250; P_load_H = [ 600 600 600 700 700 700 700 450 450 450 450 300 300 300 300 450 450 450 450 500 500 500 500 600 ]; 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 : 24 GreyWolves(i,j)= lb(j)+rand()*( ub(j) - lb(j) ); %加一个向上取整函数,可以方便控制微燃机出力,也方便画图,也方便筛选粒子。 GreyWolves(i,j)= ceil(GreyWolves(i,j)); end %下面是储热功率初始化 Soc=1500 ; for j=25 : 48 GreyWolves(i,j)= -5+rand()*10 ; %加一个向上取整函数,将结果限为-5,-4,-3,-2,-1,0 ,1,2,3,4,5这11个常数 GreyWolves(i,j)=100*round(GreyWolves(i,j) ); %首先,放热不能大于热负荷(正代表充电,负代表放电) %经过这一步限制,可以使热量不会浪费。差额由电转热去补充。 if -GreyWolves(i,j) > P_load_H(1,j-24 ) GreyWolves(i,j) = - P_load_H(1,j-24 ); end %上面是概率生成功率P_BA,没有考虑超出容量限制的问题,下面将解决。 Soc=Soc+GreyWolves(i,j) ; if Soc > 4000 || Soc < 1000 %如果越限 Soc=Soc-GreyWolves(i,j) ; %撤销容量 GreyWolves(i,j) =0; %撤销功率 end end E_Soc=100 ; for j=49 : 72 GreyWolves(i,j)= -50+rand()*75 ; %上面是概率生成功率P_BA,没有考虑超出容量限制的问题,下面将解决。 GreyWolves(i,j)=round(GreyWolves(i,j) ); E_Soc=E_Soc+GreyWolves(i,j) ; if E_Soc > 250 || E_Soc < 50 %如果越限 E_Soc=E_Soc-GreyWolves(i,j) ; %撤销容量 GreyWolves(i,j) =0; %撤销功率 end end GreyWolves(i,nVar+1:nVar+2)= Double_CC_fitness(GreyWolves(i,1:24), GreyWolves(i,25:48),GreyWolves(i,49:72) ); end Archive_num=100; Archive=[];