ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

用户侧储能优化配置与经济分析:基于Matlab的辅助服务收益建模

用户侧储能优化配置与经济分析:基于Matlab的辅助服务收益建模

这两年做用户侧储能项目的前期评估,我几乎每次都会被问到同一个问题:"这个项目配多大容量、多长时间能回本?"这个问题看着简单,实际上牵涉到储能系统的容量规划、运行策略、参与辅助服务的收益测算、电池寿命折算等一系列耦合因素。很多同行一上来就跑一个复杂的优化模型,结果参数没理清,算出来的方案要么容量偏大导致投资回收期拉得很长,要么容量偏小根本覆盖不了削峰填谷的收益缺口。这篇内容我就围绕"参与辅助服务的用户侧储能优化配置及经济分析"这个主题,结合Matlab代码实现的过程,把从数据整理、模型构建、求解计算到经济性评价的完整链路捋一遍,重点讲清楚每个环节为什么这样做、哪些细节容易翻车。

这篇文章适合的对象很明确:正在做储能项目可行性研究或方案设计的工程师,研究微电网、综合能源系统方向的学生,以及刚接触用户侧储能、想搞清楚"容量配置+经济分析"到底怎么落地的人。如果你手里有某工厂或园区的负荷数据、电价数据,完全可以按照下面的思路用Matlab把整套计算跑通。

1. 用户侧储能的收益逻辑与优化配置的核心问题

1.1 辅助服务到底在解决什么需求

用户侧储能和电网侧、电源侧储能最大的区别,在于它首先是一个"市场化"的投资行为。企业装储能不是为了完成考核指标,而是为了真金白银地省钱或者赚钱。收益来源目前主要有三个方向:

第一是峰谷套利。利用分时电价机制,在低谷时段充电、高峰时段放电,赚取峰谷价差。这是最基础也是占比最大的收益来源,各地区的峰谷价差从0.4元/kWh到0.9元/kWh不等,价差越大,项目可做的空间就越大。

第二是需量管理。对执行两部制电价的大工业用户来说,基本电费有两种计费模式:按需量计费和按容量计费。储能可以在厂区负荷短时爬升时出力,压低最大需量值,从而降低每个月的基本电费支出。这块收益经常被忽略,但实际算下来有时候比峰谷套利还高。

第三是参与辅助服务市场。包括需求响应、调频辅助服务等。用户侧储能通过聚合商或直接接入电力调度系统,响应电网的调频、调峰指令,获得相应的补偿费用。辅助服务收益的特点是单价高、但调用频次和调度容量有不确定性,而且不同区域的现货市场机制、补偿标准差异很大。

把这三类收益叠到同一个模型里去优化,就是标题里说的"参与辅助服务的用户侧储能优化配置"。这里的核心矛盾在于:储能系统的功率和容量配置,会同时影响峰谷套利的上限、需量压降的效果以及参与辅助服务的响应能力,而每一项收益都有各自的边界条件。不做一个综合优化,单靠人工经验估出来的方案,往往会在某一项收益上过度投资。

1.2 优化配置在数学上到底在算什么

从数学本质上看,这个优化问题有两层决策。

第一层是规划决策:确定储能系统的额定功率P(kW)和额定容量E(kWh)。P决定系统能同时充放的最大功率,E决定系统能存多少电。这两个变量是项目建设成本的主体,也是整个优化问题的"尺寸"。

第二层是运行决策:在给定的P和E下,每个时间段t的充放电功率P_ch(t)、P_dis(t),以及储能荷电状态SOC(t)。这一层决定了储能系统实际运行时的收益和效率。

两层决策之间互相耦合:容量配置大了,运行灵活度更高、潜在的收益空间更大,但初始投资成本也更高;容量配置小了,投资省了,但充放电策略受限制,收益上限被压低。优化模型要做的就是在这一对矛盾的平衡点上找到最优解——也就是在满足各种运行约束的前提下,让整个寿命周期内的净收益最大化或综合成本最小化。

用一个生活化的类比帮助理解:储能系统就像一个蓄水池,优化配置就是决定"这个水池建多大、配几个进出水阀门"。水池太小,雨季存不下多少水;水池太大,建造成本和空闲损耗都上去了。而运行策略相当于每个时刻怎么开关阀门——什么时候蓄水、什么时候放水、留多少余量应对突发需求。两者必须一起算,分开算出来的方案一定不是全局最优。

2. 优化配置模型的构建思路与关键约束

2.1 目标函数:怎样把多维收益算清楚

我见过不少初版模型,目标函数里只写了峰谷套利一项收益,算出来项目收益率偏低,决策者一看就否了方案。正确的做法是把前面提到的多类收益都纳入目标函数,同时把全生命周期成本也分年度折算进来。

典型的目标函数形式是最大化净收益:

max NPV = Σ(r_season[t] + r_demand + r_aux) - C_inv - C_om

其中:

  • r_season[t]:分时电价下的套利收益,等于放电电量乘以峰段电价减去充电电量乘以谷段电价,再折算系统效率
  • r_demand:需量电费节省额,等于储能压低最大需量后减少的基本电费
  • r_aux:辅助服务补偿收益,包括调频里程补偿、容量补偿或需求响应激励
  • C_inv:储能系统的初始投资成本,等于P乘以功率单价,加上E乘以容量单价,再考虑土建、并网接入等附加费用
  • C_om:年运维成本,包括电池更换、人工维护、冷却系统能耗等

这里有一个容易忽略的点:所有收益和成本必须放在同一个时间轴上折算。储能系统的寿命通常在8到10年,而每天的运行收益是逐时累加的,所以要么把逐时收益聚合到年收益,再做净现值折现;要么把所有收益和成本都折到寿命周期初值再比较。还有电池容量衰减问题——随着循环次数增加,可充放电量逐年下降,如果用一个固定容量去算十年收益,结果一定偏高。工程上常用的处理办法是分段衰减模型,或者用年度等效循环次数估算容量保持率。

2.2 约束条件:从SOC连续性到需量管理

约束条件是优化模型里最容易出问题的部分,因为储能系统的物理限制和电网接入要求都必须转换成数学表达式。核心约束至少包含以下几组:

第一是SOC状态转移约束。SOC(t+1)等于SOC(t)加上充电量减去放电量,充电侧要乘充电效率,放电侧要除以放电效率。这个约束看似简单,但时间步长的选取不同,表达形式也会变化。如果用1小时为步长,充放电功率的单位就是kW,乘以1小时就是kWh;如果用15分钟步长,充电量就等于P_ch(t)乘以0.25小时。

第二是充放电功率限值约束。任意时刻的充电功率不能超过P,放电功率也不能超过P。如果模型允许同时充放电,还需要引入一个0-1二进制变量来防止同时充放电。

第三是容量约束。SOC不能超过额定容量E,同时不能低于最小SOC(对应最大放电深度DOD)。比如磷酸铁锂电池通常允许DOD到90%,那SOC下限就是0.1E。设置这个约束的意义不仅是保护电池寿命,也是保证储能随时具备响应辅助服务指令的能力。

第四是需量管理约束。这个约束很多人会漏:某时刻的购电功率等于负荷功率加上充电功率减去放电功率,而从厂区关口表看到的需量等于所有时刻购电功率的最大值。如果要优化需量,需要引入一个辅助变量表示"最大需量",然后让它在约束里取Max值,同时用大M法或直接线性化的方式建模。

2.3 电池寿命建模:经济性分析靠谱与否的分水岭

储能优化配置里最容易被高估收益的一点,就是忽略了电池循环寿命对系统经济性的影响。电池厂商给的循环寿命参数通常是"标准工况下100%放电深度循环次数",实际运行中DOD、放电倍率、环境温度都会影响寿命衰减速度。常见的经验模型里,单次循环的电池容量衰减量与放电深度之间近似呈幂函数关系,比如:

Q_loss = a * (DOD)^b * N_cycle

a和b需要根据电池测试数据拟合。工程上更简便的做法是:设定一个寿命终止阈值(比如容量降至初始的80%),根据每日平均放电深度估算总循环次数,再反推储能系统的实际使用寿命。

例如某磷酸铁锂储能系统的标称循环寿命为6000次(100% DOD下),但实际运行中平均放电深度只有60%,可以根据厂家的寿命曲线查到对应循环次数约为9000到10000次。按每天1.5个循环计算,系统寿命约18年,但考虑日历老化后通常取到10到12年比较稳妥。这个寿命参数直接决定了折旧成本和NPV计算的结果,误差20%就会让回收期判断偏离半年以上。

3. Matlab代码实现的工程路径与核心代码解析

3.1 代码架构:从原始数据到结果输出的模块划分

写Matlab代码处理这个问题,我最不建议的做法是把所有内容塞进一个脚本里顺序执行。数据清洗、模型构建、求解运算、结果绘图各做各的模块,调试成本会低很多。

推荐的结构是四层模块划分:

  • 数据输入层:读取负荷曲线、分时电价、辅助服务价格、电池参数、财务参数,统一为结构体数组
  • 模型构建层:根据输入参数生成目标函数系数矩阵和约束矩阵
  • 求解计算层:调用linprog或intlinprog求解优化问题,返回最优配置与运行策略
  • 结果分析层:计算NPV、IRR、回收期、敏感性分析,并绘制充放电曲线和SOC曲线

这种模块化的好处很实际:后期如果要换电池品牌、改动财务参数,只需要修改数据输入层的对应字段,模型和求解代码可以原样复用。我试过直接改脚本里的常量去试算不同方案,改到第三轮就分不清哪次跑的是哪组参数了。

3.2 决策变量与目标函数的矩阵化建模

Matlab的linprog求解器接收的是线性规划标准形式:min f' * x,因此需要把所有决策变量整合成一个大向量x,再把目标函数系数写成一个列向量f。

决策变量排列方式可以这样定义:前T个变量是各时段的充电功率P_ch(1)到P_ch(T),接着T个变量是各时段放电功率P_dis(1)到P_dis(T),再接着T个变量是各时段SOC,最后两个变量是额定功率P和额定容量E。如果按15分钟步长,一天就有96个时段,十天就有960个时段,变量数量在2000左右,规模适中。

目标函数的系数向量f分两大部分:运行收益部分和投资成本部分。运行收益系数是各时段的电价差乘以步长时间;投资成本系数在P和E对应的位置赋值,分别是功率单价和容量单价。以最小化综合成本为目标时,投资成本可以直接放进f向量。

有一个细节建议:在建模阶段先不要急着把全生命周期折算系数并进去,而是把目标函数写成"日运行净收益减单日折旧成本"的形式,算完结果后再单独做财务分析模块。这样模型的物理意义更清楚,也方便单独检查哪一项收益在驱动配置结果。

3.3 约束矩阵构建的实操要点

约束矩阵A和b的构建是整个代码里最容易出错的地方。一个排查技巧:每写一层约束,就单独计算一次约束矩阵的条件数和行数,确认与预期的约束条件数量一致。

SOC连续性约束的实现方式如下:

SOC(t+1) - SOC(t) - η_ch * P_ch(t) * Δt + P_dis(t) * Δt / η_dis = 0

写进矩阵时,SOC(t+1)对应的系数是1,SOC(t)对应的系数是-1,P_ch(t)对应的系数是负的η_ch乘以Δt,P_dis(t)对应的系数是Δt除以η_dis。这个线性约束本质上是一个线性方程组,可以直接放进Aeq矩阵。

防止同时充放电的约束处理更关键。由于充放电效率不对称,线性松弛模型容易在电价跳变点出现"既充电又放电"的假划算解。工程上的处理方式是引入二进制变量y(t),当y(t)=1时只允许充电,当y(t)=0时只允许放电。Matlab中可以使用intlinprog求解混合整数线性规划,变量规模和约束规模都能接受。

有些论文用SOC作为连续变量搭配充放电互斥的逻辑约束,但实现时需要在每个时段加两个不等式约束:

P_ch(t) ≤ M * y(t) P_dis(t) ≤ M * (1 - y(t))

M取一个足够大的数,比如额定功率P与1.2的安全系数的乘积。这个M如果设得太大,数值稳定性会变差;设得不够大,可能错误限制实际功率范围,需要根据求解结果调优。

3.4 经济性指标计算与可视化输出

求解完优化模型,拿到最优P、E和逐时充放电策略后,还要做一遍经济性验证。这部分我建议独立成函数,输入是优化的运行结果和财务参数,输出是四个指标:净现值NPV、内部收益率IRR、静态投资回收期、平准化储能成本LCOS。

净现值的计算逻辑是:把每年的净现金流(收益减运维成本)按折现率折算到当前年份。折现率取企业加权平均资本成本,一般在6%到10%之间。项目越接近市场化投资,折现率越要取高一些。

内部收益率的计算可以直接Matlab的irr函数从现金流序列求根。注意要保证现金流序列的正负号逻辑:第0年是负的初始投资,之后每年是正的净收益,至少发生一次符号变化,不然算出来的IRR没有实际意义。

可视化部分,最少要输出三张图:一张是典型日的负荷、储能充放电功率、SOC曲线对照图,另一张是全年多月运行策略热力图,再一张是投资回收期对峰谷价差和电池单价的敏感性热力图。第一张图用来判断运行策略是否合理,第二张图看季节性变化对运行方式的影响,第三张图直接回答"哪些外部参数变化会让项目从赚钱变亏钱"这个决策者最关心的问题。

4. 典型场景测算:某工厂参与调峰与需量管理的算例

4.1 基础数据与参数设定

用一个我在项目中实际处理过的简化场景来演示整套方法。某制造企业,日负荷电量约8000kWh,最大需量约600kW,执行一般工商业两部制电价。峰段电价1.05元/kWh(8点到11点、14点到18点),平段电价0.62元/kWh(6点到8点、11点到14点、18点到21点),谷段电价0.32元/kWh(21点到次日6点),需量电价35元/kWh每月。

电池系统采用磷酸铁锂方案,初始投资单价按容量计取1200元/kWh,PCS和并网设备按600元/kW,设计寿命10年,每年运维成本为初始投资的2%。系统往返效率按90%计算,放电深度上限90%,SOC下限10%。

辅助服务收益按照所在区域的调峰辅助服务补偿标准估算:按调度指令调整出力,按调整里程计算补偿,预估日均调峰收益在300元到600元之间。考虑到实际调度量的不确定性,这里把基础场景取日均400元,后面做敏感性分析时再上下浮动。

4.2 求解结果与典型日运行策略

在Matlab中运行优化模型后,得到的最优配置是额定功率约250kW、额定容量约750kWh。这个容量配置比一些凭经验"按最大负荷10%配储能"的方案要合理得多——单纯按比例估出来的800kWh到1000kWh容易偏高,多出来的容量在实际运行里根本利用不上,还白白增加了初始投资。

看一下典型日的运行策略:谷段电价时段(夜里0到6点)储能持续以额定功率充电,SOC从10%爬到接近100%。上午峰段开始时,储能放电支撑厂区负荷,将电网购电功率压到较低水平。午间平段电价回落,SOC逐步降到低位。下午第二个峰段继续放电,到傍晚谷段前完成剩余放电。这个"两充两放"的策略与峰谷电价结构高度匹配,同时下午放电时段叠加了需量的二次压低效果,对降低最大需量也有贡献。

配置结果中250kW的功率相对750kWh容量来说偏大,原因是辅助服务收益对功率响应能力敏感——参与调峰辅助服务需要足够的功率来响应调度指令,而容量大了之后边际收益递减,所以最优配置呈现"功率优先、容量适度"的特点。如果去掉辅助服务收益项重新优化,最优功率会下降到约180kW,容量则上升到约840kWh,完全变成"容量套利主导"的形态。这说明多类收益共同建模确实会改变最优解的形态,不做综合优化就容易偏向某一种收益模式。

4.3 经济指标计算与敏感性分析

按上面参数和优化结果计算静态投资:750kWh * 1200元/kWh + 250kW * 600元/kW = 90万 + 15万 = 105万元。年运行收益按365天模拟计算:峰谷套利收益约46万元,需量电费节省约12.6万元,辅助服务收益约14.6万元,三项合计约73.2万元,扣除运维成本2.1万元,年净收益约71.1万元。

据此估算静态投资回收期约1.48年,但这是未考虑电池衰减和折现的结果。按8%折现率考虑电池容量逐年衰减3%至5%,动态回收期约1.8年,项目寿命期内的NPV约为347万元,IRR约为52%。这个收益率在纯峰谷套利项目中很少出现,主要是需量管理和辅助服务收益的贡献。

敏感性分析的结果很有意思:当峰谷价差从0.73元/kWh下降到0.55元/kWh时,NPV仍然为正但回收期拉长到2.6年;当辅助服务日均收益从400元下降到150元时,最优配置中功率变量显著收缩,部分容量从"辅助服务专用"转为"纯套利用途",说明辅助服务收益的波动直接影响功率配置的激进程度。电池价格从1200元/kWh下降到900元/kWh时,最优容量配置上升约12%,低电池价格会鼓励"多装一点"以提高套利收益上限。这套敏感性分析的价值在于,它能告诉项目方"什么参数变化对收益率影响最大",从而在做后续电价谈判和辅助服务协议签署时有明确的底线。

5. 常见问题排查与实操避坑记录

5.1 优化结果明显不合理怎么办

跑出来P和E双双取到变量的上下界边界,这个结果通常不可信。出现这种情况,先检查约束条件:如果SOC上界设成了1.0且没有放电深度限制,模型就会倾向于"无限大容量"以便在所有谷段充电、峰段放电,推着容量顶到上界。解决方式是把SOC上界改成0.9,或者增加一个最大可用容量与实际场地面积、变压器接入容量挂钩的上界约束。

另一个常见现象是SOC曲线长时间贴在1.0或0.1的边界上震荡,说明约束条件缺少对电池深度循环的约束,模型在"透支"电池寿命换取账面收益。此时在目标函数中增加一个针对SOC越限的软惩罚项,或者加入基于循环次数的寿命衰减成本项,曲线就会平缓很多。这是一种工程化的做法——纯数学模型中如果缺少这个惩罚项,优化器倾向于把电池用到极致,而实际运行中没人敢这么干。

5.2 净现值和回收期算起来差异很大

同一个项目,有人算出来回收期1.5年,有人算出来3年,差别往往出在三个地方:

第一是折现率的选取。项目融资成本不同、风险溢价不同,折现率从4%取到12%,回收期能差出一倍不止。建议不要只出一个数,而是给出"折现率-回收期对照表",让决策者自己按资金成本判断。

第二是容量衰减怎么处理。如果按首年容量恒定算十年收益,回收期偏低约20%;如果按每年衰减3%做分段计算,结果更贴近实际。我建议至少做一版"衰减5%"和"衰减2%"的两极测算,让项目方知道电池寿命假设对收益的影响幅度。

第三是辅助服务收益怎么折算。辅助服务收益不像峰谷价差那样由电价表直接确定,它依赖调度机构实际调用。保守做法是不把辅助服务收益放进基础场景,单独做一列"乐观场景"展示,这样做出来的可行性报告更有说服力。

5.3 代码工程中的几个实操经验

在Matlab调试过程中建议从一开始就把约束矩阵分块构建,每块后面加一行注释标明对应哪类约束。调bug时先单块检查,确认某块约束作用正常后再拼装到一起。运行结果里SOC突变到负值,通常不是求解器的问题,而是SOC连续性约束的等式系数写错了,比如效率乘除位置反了或者Δt遗漏了。

另一个经验:矩阵维度对不上时,用size命令逐块打印每一层的行数列数,比在几十个约束变量里肉眼排查快得多。约束矩阵构建完成后,用稀疏矩阵存储能明显降低内存占用,尤其是全年8760小时步长的场景,稠密矩阵的规模会让求解变得非常慢,稀疏化之后求解时间能从几分钟降到十几秒。

5.4 从论文模型到工程落地的决策建议

很多人拿到的参考代码往往面向学术论文,目标函数写的很全面,约束条件也很丰富,但直接迁移到工程项目的可行性评估时会发现有两个不适应:一是学术模型通常假设电价曲线和负荷曲线完全已知,没有考虑实际运行中电价的波动和负荷预测误差;二是学术模型的收益项构成和真实结算规则之间有明显差异,比如辅助服务收益在论文里按理想化的调用率计算,而真实项目中辅助服务调用有很大随机性。

因此我通常建议工程落地时分成两个阶段做:第一阶段用简化模型做方案筛选,目标只求"哪些大方向可行",比如要不要配置储能、大约多少容量级别;第二阶段再用完整优化模型对入选方案做精细测算,重点校核运行策略与经济指标的合理性。第一阶段的模型可以把辅助服务收益按固定值打包,第二阶段再把收益细化成跟功率响应相关的过程量。这种分层递进的做法比一上来就跑复杂模型更高效,也更不容易被模型细节带偏判断。

6. 写在最后的一点体会

前前后后用Matlab做过不少储能配置相关的测算,我最大的感受是:模型可以精巧,但工程判断永远要简单。优化模型算出来的P和E只是一个参考基准,最终还是得回到实际的安装场地、变压器剩余容量、消防间距和电网接入条件去校核。有些项目在模型里看似收益率很高,到现场一看连放电池柜的位置都不够,那再精确的优化结果也落不了地。反过来,如果峰谷价差够大、负荷曲线规律性强、场地条件也合适,哪怕模型粗糙一些,算出来的方案也大差不差。建议刚入门的朋友不要急着追求算法的复杂度,先把基础数据整理扎实,把收益项拆清楚,再套到一个成熟框架里去优化。有了可靠的数据,模型哪怕简朴一点,结果也能站得住脚。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进