目录

  • 一、问题描述
  • 二、问题建模
    • 1、光伏建模
    • 2、风机建模
    • 3、储能系统部分
    • 4、柴油发电机部分
    • 5、HRES的目标函数和仿真过程
  • 三、优化算法的选择
    • 1、数据结构设计和封装
    • 2、目标函数的计算
  • 四、实验结果

一、问题描述

相对于化石能源等不可再生能源而言,可再生能源可以定义为自然界中能够循环产生,从而不断恢复补充并维持在一定水平的一类资源,这类资源具有取之不尽,用之不竭的特点。可再生能源如风能、太阳能的随机性不确定性等缺点导致了这些资源利用率低、利用成本高的问题。为了克服这些问题,混合可再生能源系统(HRES)被越来越多的研究与应用。HRES通过适当的组合不同类型的可再生能源与常规能源,能够有效地克服各类可再生能源不确定性的缺点,相比于包含单一可再生能源的系统它也更为可靠和经济。一个HRES系统通过配置不同形式不同数量的能源,可以实现各类能源的优势互补,克服单一能源的不稳定性、随机性,从而改善系统供能的连续性、可靠性,提高系统的整体效率。


利用光、风等可再生能源发电的混合系统虽然被广泛研究,但是由于现阶段光伏系统和风机系统的安装成本依然很高,更多的研究开始考虑在混合可再生能源系统中引入柴油发电机等常规发电手段。相比于单纯的可再生能源发电系统,柴油发电机安装成本较低,并且能够充当备用电源在必要的时候满足负载功率需求。在光伏-风机-储能系统中加入柴油发电机以及相应的AC/DC逆变器,就构成了光-风-柴-储系统,其结构如图所示。
光-风-柴-储系统中可再生能源发电仍然被优先供给负载使用,满足负载之后的剩余电量给电池组充电。当可再生能源发电不能满足负载需求并且电池组达到最大放电深度时,柴油发电机才会工作以提供不足的功率需求。柴油发电机的工作虽然会消耗常规能源并产生一定的污染物排放,但其作为备用电源却可以大大提高系统供能的稳定性、连续性,提高系统的整体性能,因此这类系统被广泛研究并且正逐渐成为最普遍的混合可再生能源系统。

二、问题建模

1、光伏建模

太阳能光伏发电技术是利用太阳能的最理想方式之一。它安全、环保,没有复杂的部件。实际光伏系统的输出功率受天气和安装角度的影响很大。为了简化本部分的模型,我们只考虑光照强度和环境温度作为变量。由 N s N_s Ns​个光伏板组成的光伏板链的最大输出功率可以表示为:
P p v = N s ⋅ V O C ⋅ I S C ⋅ F l o s s P_{pv}=N_s\cdot V_{OC}\cdot I_{SC}\cdot F_{loss} Ppv​=Ns​⋅VOC​⋅ISC​⋅Floss​
V O C = V S T C − K V ⋅ T c V_{OC}=V_{STC}-K_V \cdot T_c VOC​=VSTC​−KV​⋅Tc​
I S C = ( I S T C + K I ⋅ ( T C − 25 ) ) ⋅ S p 1000 I_{SC}=(I_{STC}+K_I\cdot(T_C-25))\cdot \frac{S_p}{1000} ISC​=(ISTC​+KI​⋅(TC​−25))⋅1000Sp​​
T C = T A + N C O T − 20 800 ⋅ S p T_C=T_A+\frac{NCOT-20}{800}\cdot S_p TC​=TA​+800NCOT−20​⋅Sp​
其中 K I K_I KI​和 K V K_V KV​为温度系数, I S T C I_{STC} ISTC​和 V S T C V_{STC} VSTC​分别为标准状态下的短路电流和开路电压。 S p S_p Sp​和 F l o s s F_{loss} Floss​为太阳辐射和制造商提供的包装系数。

2、风机建模

HRES的另一个重要组成部分是风力发电子系统。风力涡轮机的功率输出通常是非线性的。当风速小于切入风速时,风轮机处于关闭状态;当风速大于切入风速时,输出功率与风速大致相等。当风速大于额定风速但小于切入风速时,需要采取适当的措施限制风机的输出功率,以防止风力发电系统过载和损坏;当风速超过切入风速时,必须关闭风机以保证系统的安全。
根据风力发电机组的功率输出曲线,可以建立以下风力发电模型:

其中 v v v和 C p C_p Cp​是风速和风力发电机的性能系数,由制造商提供。 ρ \rho ρ和 A w g A_{wg} Awg​分别为空气密度和转子扫过的面积。此外, V c V_c Vc​、 V r V_r Vr​和 V f V_f Vf​分别为切入风速、额定风速和切出风速,在本研究中根据生产商的要求,分别设定为4 m / s m/s m/s、14 m / s m/s m/s和20 m / s m/s m/s。

3、储能系统部分

在HRES中,电池一般被用于储能。作为一个储能系统,当可再生能源发电量大于负荷需求时,电池组被用来储存多余的能量,当天气状况很差,发电量不能满足负荷时,电池组就会放电,为负荷提供能量。大多数电池模型会考虑充电状态(SOC),SOC应保持在制造商给出的最大和最小范围内,以确保安全。电池组的SOC根据可再生能源发电和负载电力需求之间的关系变化,可以表示为:
S O C ( t + 1 ) = S O C ( t ) + ( P b a t ( t ) / V b u s ) ⋅ Δ t ⋅ η b a t C n SOC(t+1)=SOC(t)+\frac{(P_{bat}(t)/V_{bus})\cdot\Delta t \cdot\eta_{bat}}{C_n} SOC(t+1)=SOC(t)+Cn​(Pbat​(t)/Vbus​)⋅Δt⋅ηbat​​
S O C m i n ≤ S O C ( t ) ≤ S O C m a x SOC_{min} \leq SOC(t) \leq SOC_{max} SOCmin​≤SOC(t)≤SOCmax​
其中 P b a t ( t ) P_{bat}(t) Pbat​(t)为电池输入/输出功率(正值表示充电模式,负值表示放电模式), V b u s V_{bus} Vbus​和 e t a b a t eta_{bat} etabat​为直流母线电压和双向充放电效率。 C n C_n Cn​(Ah)是储能系统的总额定容量。

4、柴油发电机部分

在HRES中,柴油发电机通常被用作备用能源。它只有在可再生能源发电量小于负荷需求,而电池储能系统不能满足电力不足的情况下才会工作。虽然引入柴油发电机可以进一步提高HRES的可靠性,但也会增加系统的成本。同时,柴油等化石燃料的消耗将增加有害污染物和温室气体的排放。柴油发电机的燃料消耗取决于其自身的性质。为了简化计算,可以近似假定柴油发电机的燃料消耗量 F c o n s F_{cons} Fcons​是其输出功率的线性函数。
F c o n s = γ 1 ⋅ P d g r ⋅ Δ t + γ 2 ⋅ P d g ⋅ Δ t F_{cons}=\gamma_1\cdot P_{dgr}\cdot \Delta t+\gamma_2 \cdot P_{dg}\cdot \Delta t Fcons​=γ1​⋅Pdgr​⋅Δt+γ2​⋅Pdg​⋅Δt
其中 P d g r P_{dgr} Pdgr​和 P d g P_{dg} Pdg​是柴油发电机的额定功率和实际功率, γ 1 \gamma_1 γ1​和 γ 2 \gamma_2 γ2​是燃料消耗曲线的系数。

5、HRES的目标函数和仿真过程

计算HRESS的目标值需要对运行过程进行模拟。为了准确计算供电损失(LPSP)、系统年成本(ACS)和燃料排放 F e m i s s i o n F_{emission} Femission​,采用了时间序列模拟方法。具体来说,上述三个目标的计算可以表示为:
A C S = ∑ i ∈ X ( C i n v i ∗ N i + C o m i ∗ N i ) + C r e p ∗ N b a t 。 ACS = \sum_{i \in X} (C_{inv}^{i}*N_{i} + C_{om}^{i}*N_{i})+C_{rep}*N_{bat}。 ACS=i∈X∑​(Cinvi​∗Ni​+Comi​∗Ni​)+Crep​∗Nbat​。
其中 C i n v i C_{inv}^{i} Cinvi​和 C o m i C_{om}^{i} Comi​是设备 i i i的年成本和运行维护成本, C r e p C_{rep} Crep​是电池系统的替换成本。 X X X是设备的集合,包括光伏、风力涡轮机、储能系统和柴油发电机。
L P S P = ∑ t = 0 T P a v a i l a b l e ( t ) < P l o a d ( t ) T 。 LPSP = \frac{\sum_{t=0}^{T} P_{available}(t)<P{load}(t)}{T}。 LPSP=T∑t=0T​Pavailable​(t)<Pload(t)​。
其中 P a v a i l a b l e ( t ) P_{available}(t) Pavailable​(t)和 P l o a d ( t ) P{load}(t) Pload(t)是 t t t时的可用功率和需要的功率。此外,为了保持系统的稳定运行,我们有 L P S P < 10 % LPSP<10\% LPSP<10%。
F e m i s s i o n = ∑ t = 0 T F c o n s ( t ) ∗ η e m i s s i o n . F_{emission} = \sum_{t=0}^{T} F_{cons}(t)*\eta _{emission}. Femission​=t=0∑T​Fcons​(t)∗ηemission​.
其中 F c o n s ( t ) F_{cons}(t) Fcons​(t)和 η e m i s s i o n \eta _{emission} ηemission​是时间 t t t的燃料消耗和排放因子,它取决于柴油发电机和燃料的质量。其数值一般在2.4-2.8公斤/升之间。

上图显示了HRES优化过程中使用的模拟流程图。在模拟程序开始时,首先给出数据,包括太阳辐射、平均风速和系统组件的相关性能指标值。然后,在每个模拟时间步骤中,优化器将根据输入数据和数学模型计算出可再生能源发电量。然后将可再生能源的输出功率与当前时刻的全部负荷需求量进行比较。如果可再生能源发电量和负载需求量相等,则跳过下面的步骤;如果供电量大于需求量,则对储能系统进行充电;如果发电量小于需求量,则首先考虑由储能系统来供应能量。一旦储能系统不能满足要求(SOC很低),柴油发电机将被打开。如果柴油发电机不能满足负荷要求,将计算LPSP。上述过程将重复进行,直到 t = T t=T t=T。

三、优化算法的选择

这个问题通过建模非常清楚,我们的决策变量只有4个整数,分别为【光伏个数,风机个数,电池个数,发电机个数】,然后目标函数是三个。这是一个典型的,多约束、整数变量、多目标优化问题。因此,我们可以选择很多多目标优化算法来求解。其中,约束处理方式与我之前的博文类似,这里就不在赘述。详情请看
通用的改进遗传算法求解带约束的优化问题(MATLAB代码精讲、实际工程经验分享)
(PS.其实我主要研究的是多目标优化,对于单目标优化问题只是偶尔搞搞)

为了解这个问题,我实现了几种算法,分别是IBEA、MOEAD、NSGA2、SPEA2、MOEASES(堪称劳模)。老规矩,程序的目录如下所示:

1、数据结构设计和封装

其实主体的优化程序反而是最简单的,最难得部分是怎么合理设计数据结构、怎么计算目标函数值。这里我为了方便,直接将用到的数据打包进一个全局变量HRES里面,方便调用,具体如下:

function HRES = LoadData()
load wind_pv_temp.txt;
load Load.txt;
WG=wind_pv_temp(:,1);
S=wind_pv_temp(:,2);
temp=wind_pv_temp(:,3);T=8760;                              %total time interval of one year
%% pv model, this model only consider the beam radiation
phi=41.65;    %地理 latitude of zaragoza in Spain, N
lamda=1.02;     %solar ecliptic longitude of zaragoza in Spain, W
I=23.44;       %地轴与轨道面倾角
belta=20;      %待优化变量 PV tilt angleNCOT=43;                                  %额定电池工作温度
Ki=0.0038;                                %short-circuit current temperature coefficient  unit:A/C
Kv=0.05;                                 %可以再小点
%open-circuit voltage  temperature coefficient  unit:V/C
Vocstc=21;
Iscstc=7;
Vmax=17;
Imax=6.5;                                %额定功率110w
FF=Vmax*Imax/(Vocstc*Iscstc);             %fill factor
%delta:the longitude at the equator,太阳赤纬角,地球赤道面与地日中心线之间的夹角%% the parameter of wind turbine风机参数
Vc=4;                                        %cut-in speed
Vr=14;                                       %rated wind speed
Vf=20;                                       %cut-off wind velocity
Cp=0.5;                                      %the limit of Cp is 0.593, that is Betz limit
rho=1.29;                                    %density of air  kg per m^3
r=2;                                         %radiur of wind turbine
alpha=0.15;                                  %wind speed power law efficient
Hr=10;                                       %reference height,unit:m
Ht=25;                                       %the height of wind turbine 待优化变量
Pwgr=10000;                                   %rated power 10 kw
Awg=pi*r^2;%% battery parameter 电池参数
HRES.Cnb=500;                                   %nominal capacity of the battery, unit: Ah
HRES.volt=12;                                  %volatage ,V
HRES.Vbus=48;
HRES.rtc=0.8;                                  %roundtrip efficiency in the charging process
HRES.rtd=1;                                    %roundtrip efficiency in the discharging process
HRES.dod=0.8;
HRES.nbs=HRES.Vbus/HRES.volt;                            %number of batteries in series%% diesel parameter
HRES.Pndg=2000;                                  %diesel nominal capacity, unit:W
HRES.afdg=0.1;                              %额定功率下燃料消耗参数,unit:l/kwh
HRES.bdg=0.25;                                 %非额定功率下燃料消耗参数
HRES.inverter_dg=0.9;                            %交流发电机逆变器效率HRES.ef=2.5;                                     %fuel emission factor kg/l%% power output
PV = zeros(1,T);
PWG = zeros(1,T);
for n=1:365delta(n)=I*sin(2*pi*(284+n)/365);for t=0:23i=24*(n-1)+t+1;tao=2*pi*(12-t)/24;ele(i)=sin(phi*pi/180)*sin(delta(n)*pi/180)+cos(phi*pi/180)*cos(delta(n)*pi/180)*cos(tao);%防止出现过小的机器数,设置精度if ele(i)<0.01ele(i)=0;endh(i)=asind(ele(i));                                        %结果以度表示,太阳高度角  elevation angleif h(i)<0||h(i)==0St(i)=0;Sp(i)=0;elseSt(i)=S(i)/ele(i);                                         %入射在斜面上的部分tiltSp(i)=St(i)*sin((h(i)+belta)*pi/180);                               %垂直于斜面的部分,有效部分,pendicularendTc(i)=temp(i)+(NCOT-20)*Sp(i)/800;Isc(i)=[Iscstc+Ki*(Tc(i)-25)]*Sp(i)/1000;Voc(i)=Vocstc-Kv*Tc(i);PV(i)=Isc(i)*Voc(i)*FF;                                     %考虑光伏个数之后的总输出功率%% wind turbineV(i)=WG(i)*(Ht/Hr)^alpha;if V(i)<VcPwg(i)=0;elseif V(i)>Vc&&V(i)<Vr ||V(i)==VcPwg(i)=0.5*Cp*rho*Awg*V(i)^3;elseif V(i)>Vr&&V(i)<Vf||V(i)==VrPwg(i)=Pwgr;else %V(i)>Vf||V(i)==VfPwg(i)=0;endPWG(i)=Pwg(i);                                          %考虑风机个数的总输出功率end
endHRES.Ppv = PV.*2.5;
HRES.Pwg = PWG./2;
HRES.Pload = Load'.*2;

加载完成之后,封装的数据如下:

种群的数据结构设计也跟之前博客差不多,初始化种群如下:

2、目标函数的计算

剩下的就是目标函数的计算啦,按照上文提到的数学模型,很容易就能写出来:

这里特别要注意的是,为了让所有不支持约束处理技术的算法都能有效得到最优解并且对比起来更加公平,我们使用了罚函数的方法。

四、实验结果

为了获得问题的Pareto前沿,我也是使用穷举的方法遍历了一下,非常耗时间,一并开源吧。

下面是不同算法的运行结果对比:

为了展示方便,提取出问题的Knee点作为最终的解。

同时将各个组件的运行状态展示一下,分了四个季节,挑选了典型日作为展示~




最后,博主专注于优化领域论文的复现工作,有兴趣的同学可以私信共同探讨。本次的代码因为费时比较长,采用捐赠方式获取(一杯咖啡),详情请私聊博主。

【MATLAB代码完整可运行】多目标微电网规划设计、混合可再生能源系统、HRES、Hybrid Renewable Energy System、多目标优化相关推荐

  1. [万字长文]使用 React 重写学成在线前端项目 I 代码完整可运行,步骤有详解

    [万字长文]使用 React 重写学成在线前端项目 I 代码完整可运行,步骤有详解 准备工作 安装必备工具/库 nodejs React 脚手架 需要的 node 依赖包 分析需求 初始化项目 搭建框 ...

  2. 光伏储能联合运行的直流微电网matlab/simulink 储能系统双向DCDC充放电控制 光伏+MPPT控制

    光伏储能联合运行的直流微电网matlab/simulink 1.光伏+MPPT控制 2.储能系统双向DCDC充放电控制 3.有仿真+参考说明+相关文献+视频讲解 YID:335067471034488 ...

  3. 光伏储能联合运行的直流微电网matlab/simulink 光伏+MPPT控制 储能系统双向DCDC充放电控制

    光伏储能联合运行的直流微电网matlab/simulink 1.光伏+MPPT控制 2.储能系统双向DCDC充放电控制 3.有仿真+参考说明+相关文献+视频讲解 YYID:91967518919688 ...

  4. 【电力系统】基于matlab YALMIP+CPLEX求解带储能的微电网优化调度问题【含Matlab源码 2175期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[电力系统]基于matlab YALMIP+CPLEX求解带储能的微电网优化调度问题[含Matlab源码 2175期] 点击上面蓝色字体, ...

  5. Matlab+YALMIP+CPLEX解决带储能的微电网调度优化

    Matlab+YALMIP+CPLEX解决带储能的微电网优化调度问题,以微电网运行成本最小为目标函数,能量设备包含风电.光伏以及蓄电池,同时考虑到电价和与电网的交互,约束条件包含蓄电池SOC约束.交换 ...

  6. Matlab+YALMIP+CPLEX解决带储能的微电网优化调度问题(完整代码分享)

    2Matlab+YALMIP+CPLEX解决带储能的微电网优化调度问题 请先确保YALMIP工具箱和CPLEX正确安装,MATLAB导入对应文件,否则无法运行程序!! 如果对你有用,请给博主点歌赞!! ...

  7. MATLAB代码:考虑退化成本的混合储能微电网双层能源管理系统 可再生能源 (RES) 和储能系统 (ESS) 在微电网中的集成为最终用户和系统运营商提供了潜在的利益

    MATLAB代码:考虑退化成本的混合储能微电网双层能源管理系统 参考文档:<A Two-Layer Energy Management System for Microgrids With Hy ...

  8. Poisson Image Editing 泊松融合 matlab代码完整

    做相关的实验,发现竟然没找到的能直接用的matlab代码,于是 google一下. 原理我觉得这个就讲的挺好的:https://blog.csdn.net/hjimce/article/details ...

  9. 《机械制造业智能工厂规划设计》——2.3 智能工厂的方针、目标

    2.3 智能工厂的方针.目标 在进行了一系列的外部环境分析,内部资源能力分析和企业优势.劣势.机会.威胁的分析之后,我们明确地找到了企业可持续发展的核心竞争能力,以及如何获得这些核心竞争能力,从而可以 ...

最新文章

  1. PHP获取当前毫秒时间戳
  2. C++二叉堆binary heap (附完整源码)
  3. CF1486B Eastern Exhibition
  4. 轻量级代码生成器-OnlyCoder 第一篇
  5. mysql set类型 查询,MYSQL SET字段类型怎么查询
  6. php获取时间格式的年份,PHP获取当前时间、时间戳的各种格式写法汇总
  7. 通过Jersey客户端API调用REST风格的Web服务
  8. ruby环境变量的文件读取形式
  9. 2012年7月19日 解一元二次方程
  10. 线性可分支持向量机与硬间隔最大化
  11. Unity组件脚本的常用类和结构体GameObject
  12. VBScript 教程
  13. 欧美html游戏,欧美HTML社区服务游戏
  14. Android 左飞字幕的实现(带描边)
  15. cadence17.4如何修改快捷键(修改env文件,实现空格翻转)
  16. 如何快速提高视唱练耳能力
  17. win11_中文包/中文输入法(微软拼音)设置/键盘/输入法移除win10启用单词输入法/基于英语语言包的美式键/半角切换设置开关
  18. 情有独钟,迷情电子三五年(转贴)想学好电子必看 后悔的找我
  19. git branch 和 git checkout -b 创建新brach的区别
  20. Transformers预测未来:关注下一帧和时间序列预测

热门文章

  1. MATLAB矩阵乘法为什么快,为什么MATLAB在矩阵乘法中如此之快?
  2. 第5.2节 Python中带星号的函数参数实现参数收集
  3. 知识丨软件定义汽车下的整车开发
  4. 第二单元笔记——应用层万字长文
  5. 开源Python-单元测试
  6. GO语言的实战学习(猜谜游戏和在线词典)| 青训营笔记
  7. 小程序 cover-view 字体_iFonts 字体助手 - 用有趣的字做设计
  8. 使用python连接mysql和发送post请求
  9. 千里眼摄像头支持对象存储吗_“无处安放”的海量数据,万能的对象存储
  10. typescript (简写Ts)