资讯动态

储能参与调峰的系统配置与经济性分析:从MILP建模到Matlab复现

发布时间:2026/10/13 10:18:10 来源:尧图企业网站定制
1. 储能参与调峰的核心逻辑收益从哪来成本怎么算看到“参与调峰的储能系统配置方案及经济性分析”这个题目我的第一反应是这其实是一类非常典型的电力系统规划-运行联合优化问题。它在EI论文里出现的频率极高不只是因为储能本身是热点而是因为这个问题的结构足够完整既有设备投资层面的整数决策配多大功率、配多少容量又有运行层面的连续决策每个时刻充多少、放多少最后还要落到财务指标上判断到底划不划算。先说清楚“调峰”到底是个什么事。电网的负荷是波动的一天之内有明显的峰谷差尤其是在以风电、光伏为主的高比例新能源系统中净负荷曲线负荷减新能源出力的波动会更剧烈。传统火电机组可以爬坡调节但调节速率有限而且深度调峰时煤耗高、磨损大。储能的作用就是“时间搬移”——负荷低谷时充电负荷高峰时放电把能量从时间轴上搬一块缓解系统调峰压力。那储能的收益到底从哪来这个必须分清楚否则经济性分析就是一笔糊涂账。常见的有四类峰谷价差套利在分时电价机制下低谷充电、高峰放电赚取价差。这是市场化程度较高地区最直观的收益来源。容量补偿/容量租赁储能给新能源场站或电网提供调峰容量按容量获得补偿类似“订阅费”。辅助服务市场的调峰补偿储能参与调峰辅助服务市场按调峰深度和调峰量获得补偿这是东北、西北等地区实际运行中收益占比较大的部分。减少弃电的增量收益配在新能源场站侧时储能把弃电时段的风光出力存下来在限电解除后再上网减少弃电量的损失。成本侧就相对明确了初始投资储能本体、PCS、变压器、土建、安装、运维成本、充电购电成本、替换成本电池寿命到期后更换以及资金成本贷款利息、贴现率。经济性分析的最终目标就是回答三个问题配多大储能功率、配多长时间容量/时长、在什么电价和政策环境下能实现净收益为正。这三个问题不是独立求解的——功率和时长决定了投资成本也决定了调峰能力和套利空间而电价政策直接决定单位调峰量的收益。我在复现这类论文时最大的体会是论文里的模型往往不是难点真正的难点在于弄明白作者对“调峰收益”的定义。同样是“参与调峰”有的论文按调峰深度付费有的按实际调峰电量付费有的是综合峰谷价差和容量补偿的叠加。如果第一步就没对齐后面所有的求解结果都没有可比性。2. 复现EI论文的关键三步模型还原、参数对齐、结果验证“EI复现”这四个字听起来很唬人实际做起来其实有一套固定的方法论。我复现过不少电力优化类的论文总结下来就是三步读透模型、抠清参数、跑通流程再验证。2.1 模型还原从论文公式到数学表达第一步是把论文里的目标函数和约束条件“翻译”成标准的数学优化模型。参与调峰的储能配置问题标准形式通常是一层或两层的单层模型目标函数是年净收益最大化或年综合成本最小化决策变量既包含储能配置容量/功率也包含逐时的充放电功率。好处是结构简单直接一个混合整数线性规划/混合整数二次规划就能求解。双层模型上层做投资决策下层模拟系统运行比如机组组合或经济调度两层之间通过KKT条件或者强对偶理论合并为单层或者用迭代方法求解。这类模型更贴近电网实际运行但求解难度和复现难度都明显上升。实际复现时我通常先按单层模型走通再根据论文具体内容考虑是否升级到双层。单层模型的核心可以概括为目标函数以净收益最大为例[ \max ; \sum_{t1}^{T} \left( p_t^{peak} \cdot P_{dis}(t) \cdot \Delta t \cdot \eta_{dis} - p_t^{valley} \cdot P_{ch}(t) \cdot \Delta t / \eta_{ch} \right) - C_{inv} - C_{om} ]其中 ( P_{dis}(t) )、( P_{ch}(t) ) 是放电/充电功率( \eta_{dis} )、( \eta_{ch} ) 是充放电效率( p_t^{peak} )、( p_t^{valley} ) 是峰谷电价( C_{inv} ) 是折算到每年的投资成本( C_{om} ) 是年运维成本。投资成本的折算看着简单但有几个细节容易踩坑储能系统寿命通常按循环次数或者运行年限取较小者贷款利息要不要计入、折旧年限怎么取不同论文的处理方式五花八门。我复现时的默认做法是采用等年值法把一次性投资按折现率折算成等额年值公式为[ C_{inv}^{annual} C_{inv}^{total} \cdot \frac{r(1r)^n}{(1r)^n - 1} ]其中 ( r ) 是折现率( n ) 是储能寿命年限。这套方法在工程经济学里叫年值法吐出来的结果可以直接和年收益对比判断项目是否可行。2.2 参数对齐一个都不能少参数是复现过程中最容易被忽视、却是最影响结果的部分。论文的正文、表格、甚至附录里的一个小数都可能决定最终结果的走向。我整理了一套“参数清单”每次复现都对一遍参数类别具体参数典型取值参考储成本单位功率成本元/kW锂电池PCS集成600~1500元/kW储成本单位容量成本元/kWh锂电池系统1000~1800元/kWh储能运行充放电效率0.88~0.95储能运行最大放电深度DOD0.8~0.9储能运行自放电率0.01~0.05/月电价峰时电价元/kWh0.8~1.2电价谷时电价元/kWh0.2~0.4系统折现率0.06~0.08系统储能寿命10~15年调峰补偿调峰深度补偿价格0.3~0.8元/kWh这些参数不是随便拍的实际论文里都会给出取值范围。复现时我的经验是先用论文里的原始参数跑出一版结果再自己调整关键参数做敏感性分析。如果论文给的是“某地区实际数据”那就尽量还原该地区的峰谷时段划分——有的地方峰谷时段是固定的有的地方是分季节浮动的这个细节直接影响充放电策略。2.3 结果验证对不上才是正常的很多新手复现时最焦虑的环节是“为什么我的结果和论文不一样”。先说结论完全一样才不正常因为论文里很多隐式假设没有写出来——比如是否考虑了容量衰减、是否计及了功率限制下的效率变化、是否忽略了某些运行约束。我的做法很简单三步验证有量纲检查收益是元/年成本是元/年容量是MWh功率是MW。如果某个中间量的单位对不上说明公式推导出了问题。边界验证把储能的配置容量设为0目标函数值应该等于不配储能的基准值把充放电效率设为1投资成本设为0收益应该逼近理论最大值。这几个边界条件一测模型错误基本能暴露。趋势验证电价峰谷差拉大时最优配置容量应该变大储能单位成本上升时最优配置容量应该变小。如果趋势反了那一定是约束或目标函数写反了。3. 优化模型搭建目标函数、约束条件与线性化处理这部分是复现工作的重头戏。很多论文的模型看起来复杂但拆开了无非就是目标函数加几组约束。我把参与调峰的储能配置模型按功能拆成四块一块一块说透。3.1 决策变量与目标函数决策变量分两类配置变量储能额定功率 ( P_{rated} )MW、储能额定容量 ( E_{rated} )MWh这俩决定了投资规模。运行变量每个时刻的充电功率 ( P_{ch}(t) )、放电功率 ( P_{dis}(t) )、荷电状态变量 ( SOC(t) )。目标函数如果要考虑调峰贡献可以写成“综合收益最大化”其中调峰收益部分按调峰深度或调峰电量计费。比如调峰电量的收益可以写成[ R_{peak} \sum_{t1}^{T} C_{peak_shaving} \cdot P_{dis}(t) \cdot \Delta t ]其中 ( C_{peak_shaving} ) 是单位调峰电量的补偿价格。加上峰谷套利收益、减去投资和运维成本就是完整的净收益目标函数。3.2 约束条件看得见和看不见的约束条件是区分论文深度的关键。参与调峰的储能配置模型核心约束至少包括这六类功率平衡约束储能放电功率加上其他电源出力要等于负荷需求。在配置模型里这条约束可以简化但如果论文做的是并网运行模拟这条不能省。充放电功率上限 [ 0 \le P_{ch}(t) \le P_{rated}, \quad 0 \le P_{dis}(t) \le P_{rated} ]同一时刻不能同时充放电用二进制变量 ( u(t) \in {0,1} ) 控制 [ P_{ch}(t) \le M \cdot u(t), \quad P_{dis}(t) \le M \cdot (1-u(t)) ] 其中 ( M ) 是一个足够大的常数Big-M法。这条约束很多复现者会漏漏掉之后求解器会把“边充边放”当成最优解——毕竟充进去再放出来虽然效率有损耗但如果效率大于50%在纯套利模式下 solver 确实有可能钻这个空子。SOC递推约束 [ SOC(t1) SOC(t) P_{ch}(t) \cdot \Delta t \cdot \eta_{ch} / E_{rated} - P_{dis}(t) \cdot \Delta t / (E_{rated} \cdot \eta_{dis}) ] 注意效率放在分母还是分子别搞反了。SOC上下限( SOC_{min} \le SOC(t) \le SOC_{max} )通常取 0.1~0.9对应DOD 0.8。始末SOC相等约束( SOC(T) SOC(0) )保证储能在一个完整调度周期后回到初始状态避免“透支”下一周期的能量。3.3 非线性项的线性化处理复现时最大的坑往往出在非线性项。最常见的是这个储能参与调峰的收益如果按“调峰深度”付费那么调峰深度本身是 ( P_{rated} ) 和 ( P_{dis}(t) ) 的组合可能形成双线性项。还有配置变量 ( P_{rated} )、( E_{rated} ) 和运行变量之间如果存在互相乘除的关系模型就变成非凸了。我建议大家优先把模型建成MILP混合整数线性规划避免直接上MINLP混合整数非线性规划。实际做法是把非线性项做线性化处理Big-M法处理“条件约束”比如“只有放电时才能获得调峰收益”。分段线性化处理充放电效率随功率变化的曲线。简单起见很多论文直接用固定效率复现时可以先从固定效率入手。二进制变量线性约束处理“要么充要么放”的逻辑关系。举个实际的线性化例子。假设调峰收益按放电功率计单位补偿 ( C_{peak} )那收益项 ( C_{peak} \cdot P_{dis}(t) ) 本身就是线性的问题不大。但如果论文里写的是“按调峰深度比例补偿”补偿比例 ( \alpha(t) ) 和储能的额定功率关联那 ( \alpha(t) \cdot P_{dis}(t) ) 就是个双线性项。处理方法是引入辅助变量 ( z(t) \alpha(t) \cdot P_{dis}(t) )然后用McCormick不等式进行松弛。不过说实话大部分EI论文不会搞得这么复杂——只要看到目标函数是“收益-成本”形式成本是线性函数基本都可以建为MILP。我踩过的最大一个坑是在SOC递推公式里忽略了时间步长 (\Delta t) 的量纲。如果 (\Delta t) 以小时为单位而充放电功率以MW为单位那么一个小时内充进去的电量是 MW × 1h MWh。如果把 (\Delta t) 写成分钟数容量数字会大10倍以上整个配置结果全部作废。这个错误在初稿阶段非常隐蔽。4. Matlab求解实现从YALMIP建模到结果可视化标题里带了“附Matlab代码”这说明论文复现的最终呈现载体是Matlab。Matlab做这类优化问题我的首选组合是YALMIP CPLEX或YALMIP Gurobi前者做建模语言后者做底层求解器。如果机器上没装商业求解器也可以用内置的intlinprog或fmincon顶一下但求解速度和稳定性差不少。4.1 建模前需要准备的输入数据在写代码之前先把数据准备好。参与调峰的储能配置问题至少需要以下几类数据负荷曲线或净负荷曲线8760小时或典型日96点数据分时电价序列至少要有峰、平、谷三段最好按季节区分新能源出力曲线如果储能配置在新能源场站侧储能成本和效率参数这些数据在论文里一般以曲线图或参数表形式给出。复现时一个常见问题论文的曲线图无法直接提取数据。我的做法是用getdat之类的工具从图中提取数值点或者直接根据论文描述的典型日场景人工构造数据。注意在博文或代码注释里说明数据来源否则后续回顾时会忘。4.2 代码结构设计我惯用的代码结构分四块按顺序执行% 1. 参数初始化 % 2. 构建优化模型YALMIP % 3. 调用求解器求解 % 4. 结果后处理与可视化参数初始化的关键代码大致是这样的%% 基础参数 T 24; % 调度周期小时 dt 1; % 时间步长小时 load_profile [...]; % 负荷曲线24维向量 price [...]; % 分时电价24维向量 eta_ch 0.92; % 充电效率 eta_dis 0.92; % 放电效率 SOC_min 0.1; SOC_max 0.9; SOC_init 0.5;模型构建部分最核心的代码是决策变量定义和约束方程%% 决策变量 P_rated sdpvar(1, 1); % 额定功率 (MW) E_rated sdpvar(1, 1); % 额定容量 (MWh) P_ch sdpvar(1, T); % 充电功率 P_dis sdpvar(1, T); % 放电功率 u binvar(1, T); % 充放电状态二进制变量 SOC sdpvar(1, T1); % 荷电状态 %% 目标函数 Income_peak sum(C_peak * P_dis * dt); % 调峰补偿收益 Income_arb sum(price .* (P_dis * eta_dis - P_ch / eta_ch) * dt); % 峰谷套利净收益 Cost_inv alpha * P_rated beta * E_rated; % 投资年化折算 Objective Income_peak Income_arb - Cost_inv - Cost_om; %% 约束条件 Constraints []; Constraints [Constraints, P_ch P_rated]; Constraints [Constraints, P_dis P_rated]; Constraints [Constraints, P_ch u * P_rated]; Constraints [Constraints, P_dis (1 - u) * P_rated]; Constraints [Constraints, SOC(2:T1) SOC(1:T) (P_ch * eta_ch - P_dis / eta_dis) * dt / E_rated]; Constraints [Constraints, SOC_min SOC SOC_max]; Constraints [Constraints, SOC(1) SOC_init, SOC(T1) SOC_init]; %% 求解 ops sdpsettings(solver, cplex, verbose, 2); result optimize(Constraints, -Objective, ops);这里有几个细节值得展开为什么用-Objective而不是Objective因为 YALMIP 默认最小化取负号之后最大值问题变成最小值问题。二进制变量在同一个时刻把充放电隔开但要不要同时限制 SOC 变化率的上下限严格来说需要因为 SOC 变化率受功率限制。但我这里通过功率约束已经间接限制住了所以可以不额外加。投资成本 ( \alpha \cdot P_{rated} \beta \cdot E_{rated} ) 是线性的意味着什么意味着在同一个线性规划框架内求解器可以同时决策功率和容量不需要两层循环。这是很多论文采用线性化成本的原因。4.3 求解完成后的结果处理求解之后最容易被忽视的一步是结果合理性检查。我习惯先查看几个关键输出P_rated_opt value(P_rated); E_rated_opt value(E_rated); P_ch_opt value(P_ch); P_dis_opt value(P_dis); SOC_opt value(SOC);然后做三件事打印最优配置fprintf(最优配置%.2f MW / %.2f MWh储能时长 %.2f h\n, P_rated_opt, E_rated_opt, E_rated_opt/P_rated_opt);看SOC曲线是否“平滑”。如果SOC剧烈震荡大概率是约束写错了比如效率方向搞反。看总收益的各组成部分占比——调峰收益多少、峰谷套利多少。如果某部分收益占比异常高需要回头检查是不是收益公式里少乘了效率或系数。可视化部分我习惯用两个图第一个是功率曲线图充电为正、放电为负叠加负荷曲线第二个是收益柱状图按收益来源拆分开。这两个图基本是论文标准的“结果图”配置。5. 算例配置与敏感性分析如何让结果可复现又有说服力模型和代码都跑通之后最考验“复现者水平”的部分来了——算例设计。这部分直接决定了你的分析结果能不能支撑结论也决定了审稿人或导师会不会认可你的工作。5.1 基础算例参数设计以国内某省的典型日为例我设计过这样一套基准算例参数系统基础负荷峰值120 MW谷值60 MW日峰谷差60 MW风电装机容量100 MW出力曲线按典型日风速波动电价机制峰时10:00-14:0018:00-22:000.9元/kWh平时0.6元/kWh谷时23:00-6:000.3元/kWh调峰补偿0.5元/kWh按放电电量计储能成本单位功率成本800元/kW单位容量成本1200元/kWh折现率6%寿命10年这套参数的好处是“干净”——成本和电价都在常见范围内结果不会出现极端配置。用这套参数跑出来后最优配置通常落在10~20 MW/20~40 MWh的区间储能时长2小时左右年净收益在数百万元量级。如果结果差得太远优先检查模型而不是怀疑参数。5.2 敏感性分析的三个维度复现一篇EI论文不能只看一个基准结果至少要跑三组敏感性分析结论才有支撑力峰谷价差敏感性价差从0.4元/kWh到1.0元/kWh观察最优配置和净收益的变化。预期结果是价差越大最优配置和收益率都上升。如果上升幅度太缓说明目标函数里套利收益的权重设置有问题。储能成本敏感性单位容量成本从800元/kWh到2000元/kWh观察最优容量的变化。这个趋势几乎是线性的因为成本直接进目标函数。调峰补偿价格敏感性补偿价格从0.3元/kWh到0.8元/kWh观察储能运行策略的改变——补偿高了之后储能更倾向于在负荷高峰深度放电而不是只做“浅充浅放”的套利。敏感性分析做完之后还要做一个盈亏平衡分析找到净现值为零的临界条件。比如在基准参数下如果峰谷价差低于0.35元/kWh或者单位容量成本高于1800元/kWh项目就会亏。这个临界点数据放在论文里比单纯说“具备经济可行性”有说服力得多。5.3 复现过程中的“隐藏关卡”复现最后我提几个PubMed级别的“坑”全是实际踩过的论文里的“典型日”和“全年8760小时”的换算关系要分清。有的论文用典型日数据乘以365近似全年这在RSOC递推中没问题但在涉及电池循环寿命折旧时会有系统性偏差。如果论文没写清楚我建议直接按全年时序仿真牺牲一点求解速度换结果准确性。效率参数的方向。充电效率 ( \eta_{ch} ) 和放电效率 ( \eta_{dis} ) 在SOC递推和收益计算中位置完全不同。SOC递推里充电效率在分子表示充进去的电量打了个折收益计算里放电效率在乘法位置表示放出来的电量需要按效率折算。弄反一个SOC曲线就会整体偏移。“弃电”场景下的储能收益计算。如果储能配在新能源场站侧充电的电价怎么取有的论文按“弃电零成本”处理有的按“上网电价”处理这个假设对收益影响极大。复现时一定要看清楚原文假设并在代码注释里显著标注。求解器的数值问题。Big-M法里的M取值如果太大求解器的数值稳定性会下降出现“实际上满足约束但被判定为不可行”的假象。我习惯把M设置为P_rated的上界比如100 MW而不是随便拍一个10000。6. 代码可复现性的最后一公里Matlab代码能不能被别人复现往往取决于你写代码时有没有考虑“使用场景”。很多复现者的代码只有自己能看懂换个数据源就跑不动。我分享几个提升可复现性的习惯第一参数集中管理。不要在代码里散落多个区段的魔法数字而是把参数集中到一个params.m脚本或者struct结构体里。换个数据源只改这一处。第二输入数据文件化。负荷曲线、电价序列、新能源出力都放成CSV文件用readmatrix读取。这样读者拿到代码后可以直接替换自己的数据不需要去代码里找赋值语句。第三分阶段调试。我先用一个小规模的测试数据比如3个时刻的简化模型跑通再上完整数据。小规模时可以直接打印每一行的约束条件肉眼检查是不是符合物理规律。第四输出中间结果。在代码里加上关键结果保存比如save(result.mat, P_rated_opt, E_rated_opt, SOC_opt)。后面做敏感性分析或对比实验时不需要重跑整个时间序列直接加载结果就行。第五版本控制与注释。我强烈建议给每个主要函数开头写一段注释说明输入输出、调用的求解器、依赖的Matlab工具箱。哪怕只是三五行也会在半年后帮到大忙。回到标题本身——“EI复现”其实不是一个很困难的事情难点在于把论文的隐含信息补齐、把参数对齐、把代码写清楚。储能参与调峰这个选题本身也不算特别前沿但它胜在结构完整、逻辑清晰、结论有实际参考价值不管是做课程设计、毕业论文还是发小论文都是一个很扎实的起点。如果你正准备入坑这个方向我给的建议是先别急着追求“完全复现论文的每个数字”而是先把模型结构跑明白——为什么要在低谷充电、为什么要在高峰放电、为什么储能时长不是越长越好。把这三个为什么用自己的话解释清楚比跑通十篇论文都有用。最后再分享一点我在实际操作中的体会储能配置方案这类问题的“经济性分析”表面上是在算账本质上是在给不确定的未来定价。不同价格机制下储能的价值差别极大。所以做敏感性分析时不要只盯着一组参数的结果多看看趋势和临界条件——那才是你论文里最耐看的部分。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑