1. 调峰场景下储能经济性建模的本质:不是在"省电费",而是在算"系统级收益账"
先说个我在帮学生审论文时反复遇到的误区:大部分初次接触储能调峰经济性分析的人,会把模型做成"储能在低谷充电、高峰放电,赚峰谷价差"这么简单。但真正参与调峰的储能系统,尤其是以EI论文为目标的复现工作,做的根本不是这笔小账。
调峰,全称是削峰填谷,它的服务对象不是储能所有者自己,而是整个电力系统。储能在负荷低谷期吸收过剩电量、在负荷高峰期释放电量,本质上是替代了传统火电机组的部分调节功能。所以经济性分析的第一性问题不是"电价差够不够大",而是"储能替代了多少可调机组容量、减少了多少系统弃电、提升了多少新能源消纳率、带来了哪些可以量化的系统级收益"。
这就是为什么标题里"参与调峰"四个字是建模的锚点。你如果只是做一个充放电策略优化,那叫"基于峰谷套利的储能运行策略",和"参与调峰的配置方案及经济性分析"完全是两个层次的课题。前者是单主体收益最大化,后者是储能作为系统调节资源、在满足调峰考核指标前提下的容量配置与综合效益评估。
我在复现这类论文时,习惯把整个逻辑链条拆成四层,后面所有代码和模型都围绕这四层展开:
第一层是边界条件层,包括典型日负荷曲线、新能源出力曲线、火电机组装机容量与调节速率、联络线交换功率约束等。这一层决定了调峰缺额有多大。
第二层是储能行为层,储能系统的充放电功率、SOC上下限、循环寿命、能量转换效率、是否参与连续调节等运行特性。这一层决定了储能"能做到什么程度"。
第三层是配置决策层,以储能额定功率和额定容量为决策变量,在满足调峰率或弃电率指标的前提下,求最优配置。这是整个复现工作的核心输出。
第四层是经济性评估层,把配置结果代入全生命周期成本模型,算净现值、内部收益率、回收期、度电成本,最终给出一套"多少钱配多少储能"的结论。
代码复现时,这四层不是串行写的,而是先写第四层的经济性评估函数,因为目标函数的表达式决定了前三层的数据结构和约束写法。这是我和很多照着论文重写代码的同学最大的不同——不是从数据读入开始写,而是从目标函数倒推数据流。
2. 从调峰缺额出发:数据构造与典型日选取,这一步错了后面全是废的
2. 从调峰缺额出发:数据构造与典型日选取,这一步错了后面全是废的
凡是做过实际优化模型的人都知道一句话:模型不会因为复杂而失败,但会因为数据失真而崩溃。储能调峰配置模型的第一个拦路虎,就是输入数据怎么构造。
多数EI论文在摘要部分会写"以某地区电网为例"或"基于某省实际负荷数据",但我们复现时往往拿不到原始数据。这里不要慌,也不需要去网上挖真实数据——正确的做法是构造一条符合统计特征的模拟负荷曲线,并用灵敏度分析来证明配置结果不依赖于特定曲线。
具体来说,我用Matlab构造典型日负荷曲线的方法是:
%% 构造典型日负荷曲线(以小时为单位) hours = 0:23; % 基荷 + 早高峰 + 晚高峰 + 随机波动 base = 800; % 基荷部分,单位MW morning_peak = 150 * exp(-((hours - 9).^2) / 8); evening_peak = 250 * exp(-((hours - 19).^2) / 6); load_profile = base + morning_peak + evening_peak + 20 * randn(1, 24);这段代码看起来简单,但它内部有三层含义。第一,基荷800 MW可以理解为系统必须满足的刚性负荷;第二,用高斯函数模拟两个峰是刻意为之,因为早峰和晚峰的形态不同,才能测试储能的连续调节能力;第三,随机波动的幅度20 MW是服从正态分布的系统误差,它模拟的是负荷预测误差,而不是真实随机负荷。
但这里有个关键陷阱:你的调峰缺额不是直接来自负荷曲线,而是来自"负荷曲线减去火电最小出力"后的剩余部分。所以构造数据时还要设置火电机组的出力特性:
%% 调峰能力参数 thermal_capacity = 1200; % 火电总装机,MW min_technical_output = 0.4; % 最小技术出力系数(火电通常40%-50%) thermal_min = thermal_capacity * min_technical_output; % 火电最小出力 peak_regulation_demand = max(0, load_profile - thermal_min);为什么这样设置?因为调峰的本质矛盾是:低谷负荷可能低于火电最小出力,这时系统被迫弃风弃光或让火电深度调峰;高峰负荷接近甚至超过火电最大出力,这时需要额外电源顶上。储能在低谷充电、高峰放电,恰好同时缓解这两个方向的压力。
不过我要特别提醒一点:不要直接用一个24小时典型日撑起全部求解过程。EI级别的论文通常要做季度或年度的时序仿真,至少选取春、夏、秋、冬四个典型日,分别求解储能配置,再取合理的结果。我在复现时一般这样构造多维数据结构:
%% 构造四个典型日负荷矩阵(4季 x 24h) season_load = zeros(4, 24); peak_demands = [950, 1100, 1050, 1200]; % 各季峰值 base_levels = [750, 800, 780, 850]; % 各季基荷 for s = 1:4 % 用缩放系数构造不同季节峰谷特性 season_load(s, :) = base_levels(s) + ... (peak_demands(s) - base_levels(s)) * ... (load_profile - min(load_profile)) / (max(load_profile) - min(load_profile)); end构造完数据,不要急着写优化模型。先做一步非常关键、但90%的复现博客不会提的工作:画出调峰缺额曲线,人工分析储能的"有效工作区间"。因为在24小时尺度上,你一眼就能看出,储能充电时段主要集中在凌晨1点到5点、放电时段集中在晚上18点到21点,但这个时间窗口不是固定的,它随季节和新能源渗透率变化。把这一步想清楚,后面约束条件怎么写就有依据了。
3. 模型搭建的实操路径:储能配置优化的目标函数与约束条件完整拆解
3. 模型搭建的实操路径:储能配置优化的目标函数与约束条件完整拆解
这一节是代码复现的"心脏",也是最容易翻车的地方。先说目标函数。
参与调峰的储能配置,目标函数存在两种流派。第一种是系统总成本最小化,把储能投资成本、火电运行成本、弃电惩罚成本全部纳入,求一个全局最优。第二种是储能项目自身收益最大化,在给定的调峰服务补偿机制下,算储能的净收益。如果是EI论文复现,我强烈建议采用第一种,因为系统总成本最小化天然包含"要不要配储能、配多少储能"的决策,它是规划问题而非运行问题。
目标函数长这样(以一小时为调度间隔,典型日总成本):
%% 目标函数:系统总成本最小化(以单典型日为例) % 决策变量: % P_charge(24,1): 储能充电功率 % P_discharge(24,1): 储能放电功率 % P_thermal(24,1): 火电出力 % E_rated: 储能额定容量(MWh) % P_rated: 储能额定功率(MW) % 成本系数(示意值,实际论文里需要查文献引用) c_invest_power = 800; % 功率成本,元/kW c_invest_energy = 1500; % 容量成本,元/kWh c_fuel = 0.35; % 火电煤耗成本,元/kWh c_curtail = 0.8; % 弃电惩罚系数,元/kWh c_om = 0.05; % 储能年运维成本占初始投资比例 % 年化系数(将一次性投资分摊到每年,基于运行寿命N和折现率r) N = 10; r = 0.08; crf = r * (1+r)^N / ((1+r)^N - 1); % 资本回收系数 % 单日成本表达式 daily_cost = c_fuel * sum(P_thermal) + ... 1000 * c_invest_power * P_rated * crf / 365 + ... 1000 * c_invest_energy * E_rated * crf / 365 + ... c_curtail * sum(curtailment);这里有一个单位换算的大坑,我帮人Debug时十次有八次踩中:功率的单位从MW到kW要乘1000,容量的单位从MWh到kWh也要乘1000,但费用如果在元/kW和元/kWh口径下,初始投资算出的单位是"元",需要除以365折算到单日。
很多论文的式子里会写"Min C = C_inv + C_op",但复现者照抄代码时经常忘了资本回收系数(CRF)。没有CRF,等于是把十年寿命的储能投资一次性算在一天头上,结果肯定是"配得越少越好",模型完全失去意义。
再来是约束条件,储能参与调峰的约束比单纯峰谷套利多得多。基础约束包括:
功率平衡约束——这是系统模型的灵魂等式:
% 功率平衡:负荷 = 火电出力 + 储能放电 - 储能充电 + 弃电 % 即 P_load = P_thermal + P_discharge - P_charge + P_curtail Aeq = [ones(1,24), -ones(1,24), ones(1,24), -ones(1,24)]; % 对应P_thermal, P_discharge, P_charge, P_curtail beq = load_profile; % 24x1储能SOC递推约束,这是储能建模的核心,也是初学者最容易写错的地方:
% SOC(k+1) = SOC(k) + (P_charge(k) * eta_c - P_discharge(k) / eta_d) / E_rated % eta_c为充电效率,eta_d为放电效率,通常取0.9-0.95 for k = 1:24 soc(k+1) == soc(k) + (P_charge(k) * 0.92 - P_discharge(k) / 0.92) / E_rated; end soc(1) == 0.2; % 初始SOC取20% soc(25) == 0.2; % 周期结束回到初始(日循环调度) soc(k) >= 0.1; % 下限防止过放 soc(k) <= 0.9; % 上限防止过充这里我要分享一个提高求解效率的实操小技巧:如果直接让soc连续变化,SOC 0到1的范围会把问题变成非线性,而且求解器很容易卡边界。我通常的做法是引进两个中间变量,代表充电量和放电量,并把SOC的范围直接化为分段的线性组合,这样能用linprog或intlinprog快速求解。初学者往往一上来就上fmincon和遗传算法,没必要——在配置优化层面,目标函数和约束如果是线性的,直接线性规划速度提升几百倍。
储能额定功率与充放电功率的耦合约束:
% 充放电功率不得超过额定功率 P_charge(k) <= P_rated; P_discharge(k) <= P_rated; % 充放电不能同时进行(同一时刻要么充电要么放电,要么都不动作) P_charge(k) + P_discharge(k) <= P_rated * 1.05; % 用线性松弛近似互斥最后这个"充放电互斥"约束,在实际研究中存在两种处理方式。一种是用二进制变量严格互斥,适合整数规划;另一种是允许同时充放电但加一个惩罚系数,效率更高但物理意义略弱。我在复现时用的是二进制变量,因为Intel的intlinprog在24维二进制变量下速度极快,没必要为了省这个变量引入物理失真。
4. 经济性分析不能只算IRR:全生命周期成本和系统效益的量化口径
4. 经济性分析不能只算IRR:全生命周期成本和系统效益的量化口径
储能参与调峰的经济性分析,Outcome不能只是一张"配置了多少MW/MWh"的表,还必须包括这套配置对应的经济指标。这部分的写作和代码,直接决定了论文能否过审。
我见过太多复现代码在算经济性时只写了三行:总投资的年金化、年运行收益、算个回收期——然后结束了。这在EI论文审稿人眼里等于没做分析。一个完整储能调峰经济性评估框架至少要包含四个维度。
第一个维度:初始投资与全生命周期成本
储能系统的成本不是铁板一块。功率成本(PCS、变压器、安装)和容量成本(电芯、BMS、温控)要分开算。另外还有两个容易忽略的隐性成本——土地与土建成本,以及电站退役处理成本。我的经验系数是:锂电池储能系统的初始投资结构大致是,容量成本占60%-70%,功率成本占20%-30%,其他占5%-10%。在做代码注释时我会把这些比例写进去,让模型参数可解释。
全生命周期成本要算度电成本(LCOS),公式是:
%% 度电成本LCOS计算 % LCOS = (初始投资 + 运维现值 + 替换成本现值) / (全生命周期放电量 * (1-衰减率)) annual_discharge = sum(P_discharge) * 365; % 年放电量 LCOE_storage = (total_investment + om_pv + replacement_pv) / (annual_discharge * N * (1 - 0.02*N));注意那个0.02*N是年衰减率修正,锂电池储能每年容量衰减约2%,跑10年寿命末期容量只剩80%左右,如果不在LCOS里把这个算进去,算出的度电成本会过度乐观。
第二个维度:储能的三种收益来源
调峰储能的收益通常分三块:
一是能量时移收益,对应峰谷价差。这里的单位逻辑是:低谷充电每度电成本是低谷电价,高峰放电每度电收益是高峰电价。但和纯套利不同,调峰场景下储能执行的是系统调度指令,电价应使用调峰辅助服务补偿价格而非现货市场峰谷价差。
二是容量租赁或容量补偿收益。储能提供了调峰容量,减少了系统对新建火电或购买外来电的需求,这个容量价值要单独计算,通常按元/千瓦·年来算。
三是降低弃电的惩罚/收益。如果系统本来要弃风弃光,储能消纳这些电量并平价卖给用户,收益相当于"捡回来"的钱。
写代码时不要把这些全部混在电价一个变量里,要把每笔收益单独列表,方便审稿人和读者核验。我自己是这样组织的:
%% 年收益结构计算 % R1: 峰谷套利/能量时移收益 R1 = sum((price_peak - price_valley) .* discharge_valley_to_peak) * 365; % R2: 调峰容量补偿费 R2 = capacity_compensation * P_rated * 1000; % 元/年 % R3: 减少弃电收益(按弃电量的边际价值) R3 = (baseline_curtailment - with_storage_curtailment) * curtail_value * 365; total_annual_benefit = R1 + R2 + R3;第三个维度:系统级效益指标
这个维度前面也提过,但这里要说得更细:储能配置后系统的调峰率变化。调峰率定义为(1 - 最小负荷/最大负荷)。比如原始系统火电最小出力400MW、最大负荷1100MW,调峰率只有63.6%。配置100MW/400MWh储能后,通过低谷充电200MW、高峰放电200MW,有效最小负荷降为200MW、有效最大负荷降为900MW,调峰率提升到77.8%。这个指标在论文里是硬指标,很多EI论文会直接画"调峰率-储能配置容量"关系曲线。
第四个维度:敏感性分析
经济性模型最大的风险是参数假设不可靠,所以必须做敏感性分析。最常见的做法是让关键参数正负波动20%,看NPV和IRR怎么变。我的经验是至少做5个参数的敏感性:储能单位投资成本、峰谷电价差、年利用小时数(调峰次数)、折现率、循环效率。画出蛛网图之后,你就能一眼看出哪个参数是经济性的"命门"。
5. 代码实现中绕不开的四个雷区,以及我的排查方法
5. 代码实现中绕不开的四个雷区,以及我的排查方法
复现ER类储能调峰配置论文,代码层面有几个反复翻车的点,这里做一个完整排查链路的分享。
雷区一:SOC初值假设导致求解结果震荡
我遇到过这样一个情况:把SOC初始值设为0.5,算出来的最优配置结果是一组没啥规律的数字;改成0.1之后,配置结果突变成另一个极端。排查下来发现,问题出在"日内周期调度"约束没写完整——SOC必须日始日终相等,否则模型可以白嫖初始SOC去"免费放电",当然结果不稳定。
排查方法非常朴素:把SOC的最终值单独输出,看它是不是等于初始值。如果差得远,说明约束没生效。此外还要检查SOC的上下限是否和额定容量形成合理耦合。100MWh的储能配0.1-0.9的SOC范围,实际可用容量只有80MWh,这在经济性模型里必须按可用容量算收益,否则会有“虚胖”的问题。
雷区二:24维整数规划变量让求解器崩溃
有的储能规划模型会将"充放电状态"设为24个二进制变量,但引入了这个0-1变量后,linprog会直接报错退出。很多新手卡在这里,上网一搜全是遗传算法、PSO教程,最后用启发式算法强行求解。
正确的做法是换用intlinprog,Matlab自带的混合整数线性规划求解器,24个整数变量规模太小了,毫秒级就能出解。如果你嫌麻烦,至少也要用ga(遗传算法)加patternsearch做局部修正。我的代码里默认用intlinprog,设定如下:
%% 混合整数线性规划求解 intcon = 25:48; % 假设1-24是连续功率变量,25-48是充放电状态0-1变量 options = optimoptions('intlinprog', 'Display', 'iter', ... 'MaxTime', 300, 'IntegerTolerance', 1e-4); [x, fval, exitflag] = intlinprog(f, intcon, A, b, Aeq, beq, lb, ub, options);这里MaxTime设300秒是我刻意留的余量,实际求解通常几秒内完成。设置IntegerTolerance太大会得到非整数的"伪调度",所以保持默认值范围内就好。
雷区三:电网潮流约束被省略
严格来说,储能参与调峰还应该考虑节点电压和线路潮流约束。但EI论文复现阶段,绝大多数模型是"单节点系统模型"(single-bus model),也就是不考虑网络拓扑,只考虑功率平衡。这个是合理的——因为文章标题的关键是"配置方案和经济性分析",不是"选址定容潮流计算"。
但如果你把潮流完全丢掉,审稿人可能会挑刺。我的折衷方案是:在MATLAB程序里预留一个grid_constraints开关,默认设为false表示忽略潮流,同时增加一行注释说明"扩展至多节点系统时仅需修改此处",并附上牛拉法潮流计算函数接口。这既不增加复杂度,又给论文留了“后续工作”的扩展空间。
雷区四:多目标变成单目标后权重设置拍脑袋
储能配置其实有两个目标:经济性最优、调峰效果最好。多数论文做法是设一个权重系数把两个目标合成一个。这个权重如果拍脑袋取0.5,结果出来后会发现调峰率只提升了几个百分点,经济性却是负的,这不是模型错,是权重没扫。
我的做法是做一个权重扫描脚本,把储能经济收益目标权重从0到1按0.1步长扫描,画出Pareto前沿,然后在拐点处取"性价比最高"的配置。这个扫描只要9次求解,几分钟就出结果,但对论文的贡献非常大。
6. 复现结果怎么呈现:三张图和一张表,让审稿人一眼看懂配置方案
6. 复现结果怎么呈现:三张图和一张表,让审稿人一眼看懂配置方案
代码跑通之后,最重要的事情就是结果可视化。EI论文级别的储能配置研究,结果呈现部分通常需要三张核心图和一张参数汇总表。
第一张图是储能充放电功率时序曲线。横轴24小时,纵轴功率,正值为放电、负值为充电。同时叠加上负荷曲线和火电出力曲线。这张图要让读者直观看到:储能是在哪个时段充电、哪个时段放电,火电出力是否被"削峰填谷"拉平了。
画图时有个细节:同一个坐标系里放三条曲线,线型要区分清楚,颜色庄重。Matlab默认的配色有时候过艳,我一般用深蓝、暗红、墨绿这种搭配,并加粗关键曲线:
figure('Position', [100, 100, 800, 400]); plot(hours, load_profile, 'b-', 'LineWidth', 2); hold on; plot(hours, P_thermal, 'r--', 'LineWidth', 1.5); bar(hours, P_discharge - P_charge, 0.6, 'FaceColor', [0.2, 0.6, 0.4], ... 'EdgeColor', 'none'); legend('原始负荷', '优化后火电出力', '储能充放电功率'); xlabel('时刻/h'); ylabel('功率/MW'); grid on;第二张图是SOC状态变化曲线。SOC曲线要显示储能“充得满、放得完”的日循环特征。这张图暴露了许多代码Bug,例如SOC超出边界、SOC不连续、或SOC曲线在充电时段出现平顶,说明储能闲置严重,配置偏大了。
第三张图是调峰率随储能配置容量变化的曲线。横轴是储能额定容量(MWh),纵轴是系统调峰率。这张图最有说服力,它能清楚展示边际调峰效果递减的规律:容量从0增加到200MWh,调峰率快速上升;从200增加到400MWh,上升速度明显放缓;到500MWh之后,曲线接近饱和。这就是经济性拐点,"最優配置"通常就在拐点附近。
参数汇总表则要涵盖:储能额定功率、额定容量、SOC范围、初始投资、年运行成本、年收益、净现值、IRR、回收期、LCOS、调峰率提升幅度。这张表是论文结论的直接支撑,所有数字都必须是前面代码运行出的结果,严禁手工填入“看起来合理”的数值。
7. 参数敏感性分析和边界条件:不懂这步,换一组数据结果可能就崩
7. 参数敏感性分析和边界条件:不懂这步,换一组数据结果可能就崩
做完主模型和结果呈现,直接写结论是初学者最常见的做法。但只要是做过真实调峰项目的人,我相信都有这个共识:参数一变,结论就翻盘。所以经济性分析论文的核心价值不是给出"最优配置是多少"这个点,而是回答"这个最优配置在什么条件下成立"。
以储能单位投资成本为例,目前行业范围大约在1500-2500元/kWh之间。如果在2000元/kWh下算出的最优配置是100MW/400MWh,那么当投资降到1400元/kWh时,最优配置可能跳到150MW/600MWh。为什么?因为现在储能更便宜了,让系统配更多储能仍然划算。反之,如果上升到2600元/kWh,最优配置可能直接降到60MW/240MWh。
代码里我这样实现敏感性分析:
%% 敏感性分析:储能单位容量成本 cost_range = 1400:200:2600; % 元/kWh optimal_capacity = zeros(size(cost_range)); optimal_power = zeros(size(cost_range)); for i = 1:length(cost_range) % 修改成本参数并重新求解 c_invest_energy = cost_range(i); [solution_i, cost_i] = solve_storage_config(load_profile, system_params); optimal_capacity(i) = solution_i.E_rated; optimal_power(i) = solution_i.P_rated; end这里需要注意,很多教材会把敏感性分析做成“只改参数、不求最优解”,直接把原来的容量配置代入新经济参数算NPV——这个做法是错的。因为规划问题是决策问题,你换成本参数,决策也会变,必须重新求解才是真实响应。很多复现代码在这个细节上偷懒,导致敏感性曲线偏差很大。
边界条件同样重要。我常设置的边界条件是:
- 调峰率下限:比如系统要求调峰率不低于75%,小于这个值的配置方案直接判定不可行。
- SOC边界:禁止过充过放,前面讲过,不再赘述。
- 储能日循环次数上限:为了防止储能寿命衰减过快,一天最多一个完整充放循环(充电时长+放电时长不超过8小时等效)。这个约束在论文里常写成"日等效循环次数≤1"。
代码里加一个判断:
% 循环次数判断 equivalent_cycles = sum(P_discharge) / E_rated; if equivalent_cycles > 1.1 error('日循环次数超过上限,建议增大额定容量或减少调度次数'); end这个边界条件的物理意义要理解:储能的寿命不是按"年"算的,而是按"循环次数"算的。你让一个100MWh的储能每天满充满放两次,电池衰减速度翻倍,全生命周期的度电成本就完全不是模型算出来的那个数。审稿人最反感的就是无限度调用储能、把寿命成本不当钱的模型。
8. 从"复现代码"到"独立创新":三个可以顺手加分的扩展方向
8. 从"复现代码"到"独立创新":三个可以顺手加分的扩展方向
代码全部跑通、论文复现完成后,如果想要进一步延伸到自己的研究或毕设,我根据自己的项目经验给出三个扩展方向,这三个方向都是在原模型上做小改动就可以实现、但创新点非常明确的方向。
扩展方向一:把"锂电池储能"替换为"混合储能",比如“锂电+液流”或“锂电+飞轮”
原标题的储能配置方案默认是单一种类,比如锂电池储能。但实际情况是,调峰需要的是长时能量转移,而调频需要的是短时快速响应,锂电池片面的做成"大容量、小功率"的设计在低成本区间并不好用。你可以把模型改成两种储能并联,锂电负责能量型调峰,飞轮或超级电容负责功率型快速响应。决策变量从(P_rated, E_rated)变成(P_lithium, E_lithium, P_flywheel, E_flywheel),目标函数增加一个混合储能联合调度约束。
这个扩展方向的好处是:文献检索时"混合储能参与调峰"是近几年的热点方向,比单纯"储能参与调峰"更容易出创新点。代码改动量也不大,核心就是多两组变量和两组SOC约束。
扩展方向二:把"确定性模型"升级为"考虑新能源出力不确定性的鲁棒优化/随机规划"
原模型的负荷曲线是确定性曲线,但实际风光出力有强烈的随机性。你可以把新能源出力设为一个区间或一组典型场景,用鲁棒优化的方法求解“最坏情况下的最优质配置”。这个方向对审稿人吸引力很强,因为它意味着配置不仅在某一天最优,而是在整个可能的风光出力范围内都不差。
代码实现上,最简单的方式是引入3-5个典型场景,每个场景分配一个概率,目标函数变成期望成本最小化;或者更高级一点,用鲁棒优化的方法,目标函数变成最坏场景下的成本最小化。两种情况都只需要在原目标函数基础上增加场景索引维度。
扩展方向三:把"经济性分析"升级为"碳收益分析"
现在越来越多的EI期刊关注双碳目标、碳排放约束。储能参与调峰减少了火电深度调峰的煤耗,除了省钱,还省碳。在模型里增加一个碳排放约束或碳排放成本项,目标是"在系统碳排放不超过某一上限的前提下,配置成本最低"。需要改动的部分主要是增加一个碳排放成本因子,并把火电出力映射到碳排放量上。
这三个方向的代码框架都在原复现模型基础上扩展,不用从零写起,但对论文的贡献度提升非常明显。尤其是如果你准备投一篇相关主题的EI会议或期刊,单一复现是肯定不够的,至少要在其中一个方向上做出原创性改进。
最后,分享一点长期做这类研究的个人感受:储能配置与经济性分析这类题目,很多论文看着花哨,背后的优化逻辑其实都很朴素。Matlab复现过程最耗时间的环节,永远是数据口径的统一和参数的合理化标定,而不是算法本身。你在做配置方案时,不妨把80%精力放在"这个参数取值有没有依据、这个约束条件符不符合物理实际"上,模型本身反而不容易出问题。多请教电力系统方向的前辈,多读几篇典型论文的附录参数表,比多跑十几个算法要管用得多。