ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

储能参与调峰的配置方案及经济性分析Matlab复现实战

储能参与调峰的配置方案及经济性分析Matlab复现实战 看到这个标题我第一反应是挺有共鸣的。储能配置与调峰分析是这几年电网方向毕业论文和期刊论文里的大热门但也是最容易让初学者一头雾水的地方——EI论文里三言两语带过的参数设置自己动手复现时却处处是坑。这篇文章我想以Matlab代码实现为主线把参与调峰的储能系统配置方案及经济性分析拆开揉碎从建模思路、目标函数、约束条件到经济性评价指标一步步讲清楚最后附上实际算例和我在复现中踩过的坑。1. 为什么要让储能去参与调峰电网的问题与储能的定位1.1 调峰的实质电网需要回答的三个问题调峰这件事本质上是电力系统在时间维度上的供需平衡问题。电网负荷不是恒定的每天都有早高峰、晚高峰也有深夜的低谷峰谷差可能达到最大负荷的30%-40%。在传统火电为主的时代这个问题靠机组启停和出力调节就能解决但如今新能源占比越来越高光伏中午大发、晚上停摆风电半夜猛发、白天疲软这些波动叠加在负荷曲线上调峰压力陡增。具体来说调峰要回答三个问题一是峰荷时段谁来顶上二是低谷时段多余的电力往哪去三是如何用最低的成本完成前两件事储能的优势恰恰体现在第三个问题上——它的响应速度是毫秒级的且不受燃料约束可以在负荷低谷时充电、高峰时放电实现削峰填谷。我第一次复现这类论文时的感受是模型本身并不复杂但很碎。目标函数、约束条件、经济性指标之间环环相扣任何一处考虑不周结果就会偏差很大。所以这篇文章我不会只贴代码而是把每个环节的来龙去脉都说清楚。1.2 储能参与调峰的三种典型模式在动手建模之前先得搞清楚储能到底以什么身份参与调峰这直接决定了模型的边界条件。第一种模式是独立储能电站模式。储能作为独立的电力市场主体在现货市场或辅助服务市场中参与调峰收益来自峰谷套利和调峰补偿。这类模型通常假设储能可以自由充放电优化目标是自身收益最大化或者社会总成本最小化。第二种是新能源配储模式。风电场或光伏电站配套储能目标是平滑出力曲线、减少弃电同时配合上网电价获取收益。这类模型需要引入新能源出力的时序曲线约束条件中一定会出现新能源出力储能出力与并网功率上限之间的不等式关系。第三种是用户侧储能模式也就是工商业用户或微网配置储能利用峰谷价差节省电费。这类模型的电价结构最复杂需要分时电价、需量电价甚至实时电价同时进入目标函数。这篇复现针对的核心场景是前两种模式的结合——既考虑储能参与系统调峰的运行效果削峰率、新能源消纳又分析其经济可行性净现值、回收期。模型定位清楚了后面的数学描述才有根基。2. 配置方案的核心数学模型容量与功率怎么定2.1 目标函数怎么设计成本项与收益项的对冲逻辑储能配置方案的优化目标在绝大多数EI论文里都是最小化全生命周期总成本或最大化净收益两者其实是一枚硬币的两面。我的复现采用了净收益最大化的表述方式这样经济性指标可以直接从目标函数的数值中读出来。目标函数可以这样写最大化的对象是年化净收益等于年收益总和减去年化成本。其中年收入包括峰谷套利收益、调峰补偿收益年支出包括储能投资成本的等年值、运维成本。再考虑资金时间价值用净现值NPV作为最终评价指标。为什么要把一次性投资成本转化成等年值因为储能寿命期长达10-15年每年的收益是逐年产生的如果直接把一次性投资和单年收益做差等价于今年买设备、今年必须回本显然不合理。等年值转换的方式是将总投资的净现值除以年金现值系数取决于折现率和寿命期得到的金额与年度运行收益在时间维度上才可比。目标函数中还有一个容易被忽视的细节调峰补偿价格通常不是固定的。有些地区按调峰电量补偿有些按调峰容量补偿补偿价格还可能分段递增。复现时可以先用固定单价跑通后再做敏感性分析。2.2 约束条件哪些是必须写进代码的我把约束条件归纳为三个层级是复现时最容易遗漏或出错的地方。第一层是功率平衡约束。比如针对某个微网或区域系统每个时刻必须满足负荷功率 储能充电功率 新能源出力 储能放电功率 电网交互功率这个式子看起来简单但隐含了一个方向负号的问题。如果代码里把充电功率定义成正值放电功率也定义成正值那么功率平衡方程中充电项必须带负号。我见过很多初学复现的同学在这上面栽跟头不是结果发散而是充放电完全反了画出来的曲线让人哭笑不得。第二层是储能设备约束。包括充放电功率不能超过额定功率、SOC不能超过上下限以及充放电不能同时进行的互斥约束。SOC的递推关系式是离散时间状态转移的核心SOC(t1) SOC(t) (充电功率 × 充电效率 - 放电功率 / 放电效率) × 时间间隔 / 额定容量这里充电效率和放电效率不能混用一个值否则SOC误差会随时间步长累积96个时点下来偏差非常可观。第三层是调峰相关约束。最常见的是等效日负荷曲线的峰值削减要求即加装储能后系统的净负荷峰值不超过某个阈值或者削峰率达到设定目标。这类约束把储能配置和调峰效果直接挂钩是参与调峰这四个字在数学模型中的体现。2.3 决策变量与求解器选型连续优化还是混合整数规划初学者最容易问的问题是这个模型用linprog还是fmincon还是intlinprog这个问题的答案取决于决策变量是连续型还是混合整数型。如果储能功率和容量是给定参数只需要优化逐时充放电功率那么决策变量全为连续变量模型是线性规划用linprog就能解。如果储能功率和容量也作为决策变量但充放电状态用0-1变量表示避免同时充放电那就是混合整数线性规划要调用intlinprog。如果目标函数或约束中有非线性项比如效率随工作点变化才需要考虑fmincon。我复现时采用的是混合整数线性规划。互斥约束用两个0-1变量和一个不等式来实现充电状态为1时充电功率可以大于0放电状态为1时放电功率可以大于0两个状态之和不超过1。这里注意如果储能充放电效率高优化结果几乎不会出现边充边放的非物理现象但效率一旦低于90%优化器可能钻空子利用充放电同时进行来骗过能量平衡约束。所以互斥约束不是可选项是必选项。有人会问0-1变化导致求解速度慢怎么办对于典型的24点或96点问题变量数量最多几千个intlinprog的求解时间通常在一分钟以内完全不必担心性能问题。3. 经济性分析不是算一笔账那么简单3.1 全生命周期成本把账算全了投资回收期才算得准经济性分析最忌讳的就是漏项。很多初版复现只算了电池本身的购置成本结果回收期短得出奇一看就有问题。完整的储能电站成本包括以下几项成本项说明典型占比参考电池本体成本磷酸铁锂电芯及模组40%-50%PCS变流器成本储能变流器、升压变压器15%-20%BMS/EMS系统电池管理系统、能量管理系统5%-10%土建及安装场地、消防、并网改造10%-15%其他费用设计、调试、备用金5%-10%年运维成本通常按初始投资的2%-3%估算包括电池维护、系统检测、人员费用等。如果论文的算例里没有明确给出这些明细可以用一个综合的单位容量造价指标来替代但运维成本一定要单列不能省略。电池寿命和循环次数也要特别关注。磷酸铁锂电池的日历寿命约10-15年循环寿命在6000-8000次之间。配置方案中日调度曲线每天大概1-2个完整循环一年下来约400-600次循环理论上可以用到10年以上。但如果每天满充满放循环寿命消耗就会加速届时不考虑更换电池的成本经济性分析就会偏高。3.2 收益端峰谷套利、容量补偿和辅助服务分别怎么算储能的收益结构决定了它有没有投资价值。调峰场景下收益主要来自三块第一块是峰谷套利收益等于峰时放电电量 × 峰时电价 - 谷时充电电量 × 谷时电价。由于充放电存在损耗实际套利收益一定是正的价差扣除损耗成本后的净值。价差过小时储能跑一天可能还倒贴钱。我在算例中设置峰谷价差0.6元/kWh以上才能保证基本盈利。第二块是调峰容量补偿收益。部分地区按储能提供的调峰容量给予年度补偿比如每千瓦容量补偿几百元不论当年实际调用了多少次。这类收益要和调峰电量收益区分开——一个看容量一个看电量。第三块是新能源弃电消纳收益。当风光大发或负荷低谷时储能把原本要弃掉的电存起来在负荷高峰释放等于间接增加了新能源并网电量。这笔账怎么算可以按弃电量价值或者按新能源上网电价换算。需要特别注意的一个问题是这三类收益可能存在重复计算。比如峰谷套利时储存的新能源电量在低谷时段的谷时电价已经低于上网电价而高峰时段的峰时电价又已经把调峰补偿包含进去了。我在调试过程中一度把收益算重了一倍后来通过分项核对曲线才找出来。这也是为什么我强烈建议在代码中对每类收益单独记账最后再汇总。3.3 评价指标NPV、IRR和回收期到底怎么算才严谨经济性评价指标的选取直接关系到结论的成立与否。我建议至少计算三个指标净现值NPV、内部收益率IRR和动态投资回收期三个指标彼此交叉验证。净现值的计算方式是将项目寿命期内每一年的净现金流按折现率折现到当前时点减去初始投资。计算时有几个参数要提前设定或做敏感性分析折现率一般取6%-8%类似项目基准收益率运行年限取10-15年年度净现金流 年度总收益 - 年度运维成本 - 年度其他费用。如果净现值为正说明项目在折现率要求下是可行的。内部收益率则反推使NPV0的折现率。在Matlab中可以用irr函数直接求解它返回的是年化内部收益率。对比折现率时要注意IRR高并不等于一定值得投资如果项目太短、后期收益不稳IRR会失真所以必须配合NPV一起看。动态投资回收期把每年净现金流折现后再去抵减初始投资直到累计折现值转正的年数。这个指标最直观几年回本。我复现算例里不同容量配置下回收期在7-9年之间浮动对于储能项目来说处于合理区间。4. Matlab代码复现的实施架构与核心实现4.1 代码整体架构把数据、模型、求解、后处理分层复现论文代码最怕写成一坨。好的代码架构应该是分层的每一层只负责一件事我按以下四层来组织数据层定义负荷曲线、风光出力序列、分时电价、储能参数。这些数据全部集中在一个脚本里方便批量修改。模型层把目标函数和约束条件翻译成目标函数向量和约束矩阵组成标准形式送给求解器。求解层调用linprog或intlinprog求解返回决策变量。后处理层从决策变量中提取储能出力、SOC曲线、收益数据计算经济性指标并绘图验证。这种分层的好处是当你想换一组负荷数据或调整电价参数时只改数据层即可模型层和后处理层不需要变动。做敏感性分析时这个优势尤为突出——可以写一个循环自动更换参数并收集指标。4.2 核心参数定义与数据结构设计先说我建议的数据组织方式。时间尺度是24点或96点96点是电力系统分析的常规选择可以更细腻地刻画峰谷变化。负荷曲线、电价、光伏出力都按96维列向量存储。储能参数定义在结构体变量里这样调用时一目了然% 储能系统参数定义 ess.P_rated 50; % 额定功率单位MW ess.E_rated 200; % 额定容量单位MWh ess.soc_min 0.1; % SOC下限 ess.soc_max 0.9; % SOC上限 ess.eta_ch 0.95; % 充电效率 ess.eta_dis 0.95; % 放电效率 ess.soc_init 0.2; % 初始SOC ess.life 12; % 运行年限单位年 ess.discount_rate 0.07; % 折现率经济性参数单独放比如单位容量投资成本元/kWh、单位功率投资成本元/kW、运维成本比例、分时电价向量。这里有个细节很多人会忽略ess.P_rated单位是MW而电价单位是元/kWh。计算电量收益时必须统一单位1MW × 1h 1000kWh如果直接用MW乘电价结果差了1000倍。我在初版代码里犯过这个错误得出的收益看似巨大检查后发现是单位没对齐。4.3 目标函数与约束矩阵的构建过程在YALMIP或MATLAB优化工具箱里构建优化模型核心是把目标函数的系数向量和约束矩阵写清楚。以intlinprog为例模型要写成如下标准形式最小化 c * x满足 A_ub * x ≤ b_ubA_eq * x b_eqlb ≤ x ≤ ub。决策向量x的设计是关键。我将x按顺序排列为24个时段的充电功率、24个时段的放电功率、24个时段的SOC变量以及24个0-1状态变量1表示充电0表示放电。变量总数约96个规模不大但含义必须对应清楚否则约束矩阵极易写错。目标函数系数的构成是充电功率对应的系数谷时电价 × 时间间隔成本为正放电功率对应的系数峰时电价 × 时间间隔收益为负即目标函数取负SOC变量的系数为零因为它本身不产生直接收益0-1状态变量系数为零。注意intlinprog要求目标函数是最小化形式所以收益项的前面要加负号。很多初学复现的同学在这一步容易犹豫我怎么知道哪个系数是正哪个是负——只要把握一个原则凡是增加总成本的变量系数为正凡是增加收益的变量系数为负就对了。功率平衡约束的表达方式也是一个容易踩坑的点。若负荷向量为P_load、新能源向量为P_pv、电网交互功率为P_grid正值表示从电网购电则每个时段的平衡条件为P_load P_pv P_dis - P_ch P_grid那么电网交互功率是一个自由变量既可以为正也可以为负在约束矩阵中不能简单消去需要通过等式约束的形式写进A_eq矩阵。SOC递推约束是相邻时段的状态转移需要用等式约束把SOC(t1)与SOC(t)以及充放电功率联系起来。我强烈建议在这里显式将SOC的初值写进第一个时段的约束中否则系统可能在第一天就凭空多出能量。而周期末SOC与初值相等的约束也建议保留代表一个完整的调度周期日复一日是可循环的这是电力系统日调度模型的标准做法。4.4 YALMIP还是MATLAB原生工具箱我的选择针对这个模型我用了YALMIP建模。YALMIP的好处是语法直观接近数学表达式省去了手动拼约束矩阵的烦恼。比如SOC递推约束在YALMIP中可以这样写for t 1:T if t 1 Constraints [Constraints, soc(t) soc_init (eta_ch * p_ch(t) - p_dis(t) / eta_dis) * delta_t / E_rated]; else Constraints [Constraints, soc(t) soc(t-1) (eta_ch * p_ch(t) - p_dis(t) / eta_dis) * delta_t / E_rated]; end end如果追求更快的求解速度可以在YALMIP中设置求解器为gurobi或cplex。先装好对应求解器再在代码开头写ops sdpsettings(solver,gurobi,verbose,0);即可。我用gurobi求解96点时段的MILP问题通常在几秒到十几秒内收敛速度让人满意。当然直接用intlinprog也可以但约束矩阵的构建工作量会翻倍而且出错时排查成本很高。如果你是复现论文的实验型工作我更推荐YALMIP——它让你把精力放在模型本身的合理性上而不是矩阵下标的地狱里。4.5 后处理与结果可视化让曲线自己说话求解完成之后一定要做细致的后处理我至少要绘制出四张图来进行判断96时段的原始负荷与净负荷加储能后曲线对比直接观察削峰效果储能充放电功率曲线和SOC曲线检查是否存在越限或突变峰谷电价与储能出力的时间对应关系确认储能在低价时段充电、高价时段放电全生命周期的现金流量表柱状图直观展示投资回收时间节点。绘图代码并不复杂但有一个经验值得分享在画SOC曲线时把SOC上下限也画成横线这样可以一眼看出约束是否被有效激活。如果SOC曲线长期贴在上限上可能意味着储能容量配置偏大或调峰深度不足如果SOC曲线一直在中间游荡则说明容量利用率偏低。5. 算例走一遍按我的参数设置能复现出什么5.1 输入数据与场景设定为了让复现过程更有体感我设计一个参考算例。假设一个区域电网的夏季典型日负荷数据最大负荷100MW负荷低谷出现在凌晨3-4点约58MW晚高峰出现在19-20点约100MW。新能源场站配套光伏电站装机容量30MW中午出力最高约24MW。储能拟配置方案有两种待比较方案A功率10MW/容量20MWh方案B功率20MW/容量40MWh。除了储能配置不同其他边界条件保持一致。价格参数依据国内某省一般工商业分时电价水平设定峰时段电价1.0元/kWh8:00-11:0018:00-22:00平时段电价0.65元/kWh谷时段电价0.3元/kWh23:00-次日7:00。系统运行约束要求削峰率不低于10%即加入储能后净负荷峰值不能超过90MW。如果不满足该配置方案就不具备调峰可行性经济性再高也不能选。5.2 优化结果分析与经济性对比用方案A10MW/20MWh跑出来的结果是储能日循环约1.5次凌晨2-5点充电上午和晚上高峰时段放电。净负荷峰值从100MW降到90MW刚好满足削峰率10%的约束SOC在0.2-0.85之间波动未触及上下限。日收益方面峰谷套利收益约为0.9万元/天考虑年度运行360天年套利收益约324万元。调峰补偿收益按容量补偿80元/kW·年估算额外的收益为80万元/年。合计年收益约404万元。总投资按1200元/kWh的综合造价计算总成本约2400万元。按6.5%的折现率、12年寿命期计算等项目运行到第7年年底现金流折现累计值转正——也就是动态回收期约7.2年。NPV在12年寿命期末约300万元项目可行。方案B20MW/40MWh的结果就有些不同了。削峰效果更显著净负荷峰值降到84MW削峰率达到16%但投资成本直接翻倍至4800万元。虽然日套利收益提升到约1.5万元/天年收益约540万元加上容量补偿160万元年收益总额约700万元但由于投资基数更大核算结果是NPV为负数回收期超过12年项目在经济性上不可行。这个对比非常典型地说明了调峰效果最优不等于经济性最优。配置容量过大后增加的边际收益不足以覆盖边际投资净收益反而下降。这正是优化配置的意义所在——不是追求无限大的储能而是找到那个收益和成本之差最大的点。5.3 敏感性分析什么参数最能左右结论在复现论文的过程中我建议做三个参数的敏感性分析因为这三个变量对结论波动的影响最大峰谷价差。价差从0.7元/kWh变化到1.2元/kWh时最佳储能容量配置会明显上移。价差越高越值得配大容量。综合投资成本。锂电池降价速度很快如果综合造价从1200元/kWh降到1000元/kWh原来不可行的方案B也可能变成可行。这是规模效应的典型体现。年运行天数。储能不可能全年都满负荷运行检修、故障、调度需求不足都会压缩实际运行天数。如果年运行天数从360天降到300天收益直接减少16%左右经济性评价结论可能从可行翻转成谨慎投资。敏感性分析在代码里实现很方便把相关参数设成循环变量外层套一个for循环重复调用配置优化与评价模块即可。6. 复现过程中的坑与我的实操建议6.1 四个最容易让人崩溃的报错和逻辑错误我在复现过程中踩过的坑总结下来主要有四类。第一类是变量维数不匹配。96时段模型里所有时变量都应该是96×1的向量。但在计算收益时我一度把电价用成了1×96的行向量结果矩阵乘法直接报错。解决方法是写一个assert(length(p_price) T)的检查断言在代码早期就拦截这类错误。第二类是SOC约束里的时间间隔不一致。如果时间间隔用小时1/4但容量单位是MWh、功率单位是MW那么SOC递推式中的delta_t必须等于1/4。我有一次把delta_t默认设成了1结果SOC算出来每步都在跳变曲线完全不是平滑充放电的形状。这个问题不报错但结果一眼就能看出不对劲。第三类是目标函数里收益方向写反。收益项系数应为负值因为intlinprog是求最小化但如果在约束构建时加了负号而在目标函数里又加了一次负号就会导致收益变成本优化结果变成尽量多充电、少放电净负荷曲线反向恶化。检查方法很简单把最优结果里的放电电量乘以峰时电价再求和看是否为正如果为负方向肯定反了。第四类是忽略SOC的末值等于初值的循环约束。如果没有这个约束优化器会倾向于在模拟周期末尾把SOC放空然后让模型承担由此带来的收益导致末段放电功率异常偏大。这类结果在单日优化中尤其常见加了周期末SOC等于初值的约束后曲线全程就合理了。6.2 对EI论文复现的通用方法论不迷信图重视参数复现EI论文时目标不是一行不差地复现原作者的代码而是复现其结论的合理性。论文里的图曲线很漂亮但原作者详细参数未必完全公开。这时候需要做的是第一步从论文中找到完整的参数表并推断缺失参数。比如论文有了储能效率、容量和功率但没给初值SOC一般取0.2或0.5都是合理解释。第二步搭建自己的算例平台有自己的负荷数据、电价数据把论文的方法跑通观察结论趋势是否与论文一致。如果论文说容量在4-6小时内最佳而你得到的区间相差不远复现就算成功了。第三步做可解释性验证。比如增加储能容量削峰率一定提高或不变不会下降增加价差收益一定增加。如果出现反常趋势优先检查约束条件其次检查目标函数再次检查数据单位。复现的最终目的是理解问题和方法不是为了得到一个炫目的图。模型跑出来的结果如果能回答什么容量的储能在这套参数下最经济、为什么要这么配那这篇文章的价值就真正拿到了。6.3 从代码到论文结果的呈现与表达最后说点写论文阶段的经验。配置优化模型的结果除了常规的充放电曲线和经济性表格还建议画两个图审稿人很喜欢看也很有说服力。一个是容量-年净收益曲线横轴是储能容量或容量/功率比纵轴是年净收益或净现值曲线呈现先升后降的倒U形最高点就是最优配置点。这个图直观地证明了存在最优配置而非越大越好的核心论点。另一个是削峰率与NPV的双纵轴图。横轴是储能容量左纵轴是削峰率上升趋势右纵轴是NPV倒U形。这个图一目了然地展示了调峰效果提升与经济性下降之间的权衡关系正是参与调峰的储能系统配置方案及经济性分析这个标题的核心矛盾。数据表的呈现也是有讲究的。建议把各方案的功率、容量、初始投资、年收益、NPV、IRR、回收期汇总成一张横向对比表格再配一小段文字论述选择推荐方案的理由。最后再分享一点个人体会储能配置与经济性分析这类复现工作本质上是把一篇论文复杂的公式体系还原成你可以一步步独立推导、独立编码、独立验证的思维过程。我在做完整个复现之后最大的收获不是那几行能跑通的Matlab代码而是真正理解了为什么倒U形曲线最高点在容量/功率比为2小时附近这样的结论受哪些参数影响最大。它们不再是论文里的一个局部结果而是自己亲手调整参数后观察到的规律。希望这篇文章能帮你少走我当初走过的弯路把你的复现工作做得更扎实、更有说服力。
返回列表