拓冰建站拓冰建站
首页 / 资讯中心 / 正文

考虑碳交易与电网交互波动惩罚的共享储能优化配置与调度模型

开篇先聊点实际的。这两年“共享储能”在电力系统方向的论文里出现频率有多高不用我多说。但如果你真打算动手做这方面的仿真很容易掉进一个坑模型建得特别“完整”约束列了一大堆结果求解器跑不动或者算出来的结果根本解释不通。这个标题——“考虑碳交易与电网交互波动惩罚的共享储能电站优化配置与调度模型研究”看起来像标准的期刊论文题目但实际上它把三个都很“吃建模功力”的模块叠在了一起共享储能的容量配置、碳交易机制的成本量化、电网交互功率波动的惩罚建模。这三个模块单独拆开都不算难难的是怎么把它们揉进一个统一的优化框架里并且用Matlab代码实现出来。这篇文章是我自己把整套模型从数学公式推到Matlab代码、再跑通算例之后做的完整复盘。我会把这套模型涉及的数学原理、约束怎么列、目标函数怎么处理量纲冲突、代码结构怎么组织、求解器怎么选以及我在实际仿真中踩过的坑全部写清楚。不管你是要复现这篇论文还是准备在这个框架上做改进这篇内容基本能让你少走两到三周的弯路。1. 共享储能电站为什么需要“配置调度”联合建模1.1 配置与调度之间的耦合关系先说一个很多初学者容易混淆的概念配置问题sizing和调度问题dispatch在时间尺度上是不一样的。配置解决的是“建多大”的储能电站决策变量是额定容量kWh和额定功率kW属于长期规划调度解决的是“怎么充放电”决策变量是每个时段的充放电功率属于短期运行。但你如果把这两个问题分开算一定会出问题。道理很简单你的储能配置规模直接决定了调度时的可行域。配置大了调度可以更从容地套利、调峰、参与碳交易配置小了调度再怎么优化也没用。反过来调度策略的不同又会影响到“多大配置是经济最优的”——如果运行策略比较粗放储能收益低配置方案自然会偏向保守。所以必须把配置和调度放在同一个优化框架里解这就是“联合优化”的核心逻辑。学术界常用的做法有两种一种是双层规划bilevel programming上层做配置、下层做调度通过KKT条件或者智能算法迭代求解另一种是让配置变量和调度变量同时出现在一个大规模优化问题里用“投资决策变量”和“运行决策变量”的层级关系来建模求解时通过Benders分解或直接交给求解器处理。实际复现中后者其实更方便因为可以直接用Yalmip建模然后丢给Gurobi/CPLEX只要问题规模在可控范围内。1.2 共享储能区别于独立储能的关键差异共享储能和独立储能最本质的差别在于“多主体”和“容量服务”。独立储能自己决策、自己受益所有成本收益都在同一个账本里。共享储能是由运营商建设储能电站向多个风电、光伏电站或者用电用户提供充放电容量服务收取服务费。引入共享机制之后优化模型必须额外考虑每个用户的功率分配、服务定价策略以及不同用户负荷特性之间的互补性。这也是为什么标题里强调“共享储能电站”——不是普通的独立储能而是面向多主体的共享模式。在你的代码实现中这部分体现为储能的总充放电功率要按比例或按优化结果分配给不同的风电场/负荷聚合商每个主体有独立的功率平衡约束但共享同一个储能SOC状态。这个约束的建模方式是这个模型最重要的“骨架”之一。2. 碳交易机制进入优化模型的数学量化方式2.1 碳配额的确定与免费配额法碳交易进入电力系统优化模型只需要做一件事把“碳排放”变成“成本”。关键是你得知道每个时间步的碳排放量怎么算以及初始配额怎么给。目前最常被引用的配额机制是“免费配额法”baseline法也就是根据发电机组的额定出力和基准排放强度来分配初始碳配额。对储能系统本身来说它不直接产生碳排放但共享储能电站接入的电网——尤其是火电占比高的电网——在提供备用和充电电力时会产生间接碳排放。因此模型里的碳排放来源通常有两块一是从上级电网购电带来的间接碳排放二是系统内如果有燃气机组则计其直接碳排放。具体数学表达上碳配额量 (E_{free}) 可以写成[ E_{free} \sum_{t1}^{T} \delta \cdot P_{grid,t}^{load} ]其中 (\delta) 是单位电量免费碳配额系数tCO₂/MWh(P_{grid,t}^{load}) 表示用户在 (t) 时段的购电功率。这个系数来源通常是地区碳市场或者行业基准值。你不需要它的绝对准确但必须让它在算例中可调这样后面做敏感性分析时才有文章可写。2.2 实际碳排放与碳交易成本的建模实际碳排放 (E_{real}) 则依据购电量与电网碳排放因子 (\mu_{grid}) 计算[ E_{real} \sum_{t1}^{T} \mu_{grid} \cdot P_{grid,t}^{load} ]有了配额和实际排放就能求出需要的碳交易量[ E_{trade} E_{real} - E_{free} ]当 (E_{trade} 0) 时说明碳排放配额不够需要到碳市场购买当 (E_{trade} 0) 时说明配额有盈余可以出售获利。碳交易成本 (C_{carbon}) 表示为[ C_{carbon} \lambda_{CO_2} \cdot E_{trade} ]其中 (\lambda_{CO_2}) 是碳价单位是元/tCO₂。这是最简单的线性碳交易模型。如果你想做得更精细可以加入阶梯碳价——排放超过一定阶梯后碳价会跳到更高档位这样大排放用户会受到更强的惩罚。这个非线性会让模型增加一些整数变量但对Matlab实现来说完全可控而且更贴近碳市场的真实调节逻辑。阶梯碳价那一版我后文会讲怎么处理。2.3 碳交易对储能配置的传导机制很多人会问一个问题碳交易不是发电侧的事吗储能是零碳的为什么碳交易会影响储能的配置结果这个传导逻辑链是这样的共享储能充电时如果选择在风电光伏大发时段充电相当于吸收了绿电减少了从电网买火电的比例所以用户的间接碳排放会下降放电时替代了高峰时段的火电购电同样降低了碳排放。结果就是储能的削峰填谷行为改变了用户的购电曲线购电曲线一变实际排放和上一节算的配额之间的差值就变了碳交易成本也就变了。所以本质上碳交易是把“储能的低碳价值”转化为“可量化的经济收益”。在你的优化模型中这种传导是通过目标函数里把碳交易成本纳入总成本来实现的。如果碳价设得高优化器就会倾向于把储能配置得更大、调度得更积极因为它能用碳交易收益回收投资成本。3. 电网交互波动惩罚被很多人忽略的“隐形约束”3.1 为什么电网要把“交互波动”写进目标函数储能充放电必然造成并网点功率的波动。风电、光伏本身已经具有很强的随机性如果储能再频繁切换充放电状态尤其在相邻时段大幅波动会对电网的调频、调压以及变压器寿命造成冲击。电网公司考察一个接入项目时会重点关注联络线功率的平滑程度。这其实是一个很有“工程味”的条件。学术论文里喜欢把这个要求称为“电网交互波动惩罚”power fluctuation penalty本质上是一个正则项你在目标函数里加一个惩罚让优化器在追求经济性的同时尽量避免联络线功率在相邻时段出现剧烈突变。3.2 波动惩罚项的具体数学表达最常见也最容易实现的写法是相邻时段联络线功率变化量的平方和[ C_{fluc} \omega \cdot \sum_{t2}^{T} (P_{grid,t} - P_{grid,t-1})^2 ]其中 (\omega) 是一个正的惩罚系数单位是元/MW²。这个表达式非常好用因为二次形式天然有平滑作用——优化器会把功率曲线尽量拉平以降低目标函数值。但要注意这个惩罚项的量纲是功率差²而成本项是功率×电价量纲不一致。这会导致惩罚系数 (\omega) 的物理意义不直观。实际处理时有两种方式一是把惩罚项当作“归一化后的辅助目标”用价格基值归一化二是直接用惩罚成本进入总成本但这需要把 (\omega) 标定到合理的量级否则要么惩罚过重导致经济性失真要么惩罚过轻形同虚设。我在算例里用的是相对保守的做法[ \Delta P_{grid,t} |P_{grid,t} - P_{grid,t-1}| ][ C_{fluc} \omega \cdot \sum_{t2}^{T} \frac{\Delta P_{grid,t}}{P_{base}} \cdot c_{penalty} ]这样 (\Delta P/P_{base}) 相当于波动率的无量纲表示再乘一个惩罚单价 (c_{penalty})量纲就清晰了。如果你做的是线性规划版本可以把绝对值拆成两个非负变量同样能保持线性性。3.3 惩罚系数如何影响最优配置我在仿真中发现一个有意思的现象(\omega) 从很小逐渐增大时储能的最优额定功率反而会先上升再下降。看代码跑出来的结果原因是前半段加入波动惩罚让储能更愿意在相邻时段持续放电提高了储能的利用率和收益所以配置功率增加但等到惩罚系数过大优化器开始限制储能的出力突变储能的套利能力被压制收益下降配置规模也随之缩小。这个规律很值得写进论文的敏感性分析里。它说明了电网波动惩罚不是一个简单的“越轻越好”或者“越重越好”而是有一个合理的区间在这个区间内储能和电网的交互品质能同时得到改善。做仿真时至少要跑四五个不同的 (\omega) 值画出最优配置和总成本随 (\omega) 变化的曲线这段结果非常出图。4. 整个优化模型的框架和约束体系4.1 决策变量与目标函数的完整构成整个模型整理成优化问题的话大致是这样一个结构。决策变量储能额定容量 (E_{ess}^{cap})kWh储能额定功率 (P_{ess}^{rated})kW各时段储能充放电功率 (P_{ess,t}^{ch}, P_{ess,t}^{dis})kW各时段与电网交互功率 (P_{grid,t}^{buy}, P_{grid,t}^{sell})kW各主体之间的功率分配变量目标函数核心逻辑是“总成本最小化”。我把总成本拆成五项[ \min \ C_{inv} C_{om} C_{grid} C_{carbon} C_{fluc} ](C_{inv})储能投资年化成本等于单位容量投资成本×额定容量×资本回收因子CRF(C_{om})年运行维护成本按额定功率或实际充放电量计(C_{grid})与电网交互的购售电费用购电为正、售电为负(C_{carbon})碳交易成本上一节已经列过(C_{fluc})电网交互波动惩罚项这个结构看起来简单但每一项内部都有各种展开方式。比如 (C_{grid}) 因为实行分时电价时段不同电价不同(C_{carbon}) 如果做阶梯碳价还需要分段线性化处理。这些细节直接影响求解难度和结果准确性我建议第一次跑通版本时先把碳交易做成线性版跑通了再加阶梯分步验证。4.2 必须写对的核心约束约束是模型能否正确求解的关键也是最容易出错的地方。我把必须写对的约束分成四类。储能SOC动态约束[ SOC_{t1} SOC_t \frac{\eta_{ch} \cdot P_{ess,t}^{ch}}{E_{ess}^{cap}} - \frac{P_{ess,t}^{dis}}{\eta_{dis} \cdot E_{ess}^{cap}} ]这是最核心的动态方程决定储能电量随时间的变化。注意充放电效率 (\eta_{ch})、(\eta_{dis}) 不能放在分母和分子搞反了实测中很多人第一次写模型都会在这里出错导致SOC越算越离谱。充放电功率上下限约束[ 0 \le P_{ess,t}^{ch} \le P_{ess}^{rated} ] [ 0 \le P_{ess,t}^{dis} \le P_{ess}^{rated} ]如果强制要求不能同时充放电还需要引入0-1变量和互斥约束。实际代码里可以用“Big-M法”加互斥但会显著增加求解时间。对应到共享储能场景我建议允许同时充放电但通过功率分配约束让它们自然互斥因为正常经济性优化下分时电价机制本身就足以避免同时充放电这种不经济行为。SOC上下限约束[ SOC_{min} \le SOC_t \le SOC_{max} ]需要注意的是SOC是一个百分比还是绝对值。我在代码里统一用kWh表示。如果用百分比则SOC_min和SOC_max也是百分比公式要保持一致。另外为了延长电池寿命通常会把SOC限制在20%到90%之间而不是0到100%虽然这会稍微降低套利收益但更符合工程实际。功率平衡约束对共享储能系统来说功率平衡分两种。一种是从电网角度[ P_{grid,t}^{buy} \sum_i P_{i,t}^{ren} P_{ess,t}^{dis} \sum_i P_{i,t}^{load} P_{ess,t}^{ch} P_{grid,t}^{sell} ]另一种是每个共享储能用户各自的平衡。如果多个风电/光伏电站共享同一个储能你还要考虑每个用户的充放电功率不能超过其自身需求且所有用户的功率分配相加等于总功率。这里最隐蔽的坑是如果不对每个用户单独做约束优化器可能会把储能功率“全部分配给某一用户”导致其他用户根本没有享受到共享储能服务结果不合理。电网交互功率限制[ 0 \le P_{grid,t}^{buy} \le P_{buy}^{max} ] [ 0 \le P_{grid,t}^{sell} \le P_{sell}^{max} ]这个约束往往被忽略但实际上它决定了联络线容量和储能参与需求响应的能力范围需要根据实际场景设定。4.3 非线性项的处理思路这个模型里最核心的非线性项来自 (C_{fluc}) 中的平方项。如果在Matlab里直接用二次目标函数那么必须用能处理二次规划的求解器比如Gurobi或CPLEX。但如果你用的是Yalmip默认的求解器比如sedumi、sdp t3二次目标可能会变成问题所以我建议在建模时明确指定用Gurobi不然跑一天都没结果。另外如果你把碳交易成本做成阶梯价格会引入分段线性函数这需要引入一组0-1变量来判断当前碳排放处于哪个阶梯本质上是一个混合整数线性规划MILP。在Matlab里用Yalmip的binvar定义这些变量即可求解器会做分支定界。5. Matlab代码实现的核心流程与关键技术细节5.1 代码整体框架的设计思路代码我按以下结构组织这样方便调试和后期改参数main.m % 主程序定义参数、调用建模与求解 build_model.m % 构建优化模型目标约束 solve_model.m % 调用求解器并处理结果 extract_data.m % 读取风/光/负荷历史数据与分时电价 plot_results.m % 绘制功率曲线、SOC曲线、成本柱状图这个结构不复杂但每一部分都有需要注意的点。尤其是build_model.m变量定义顺序会影响求解速度不要拿优化问题随便写要“先连续变量后整数变量先局部变量后全局变量”。5.2 Yalmip变量定义与核心代码演示在Yalmip里定义配置变量和调度变量我建议直接用sdpvar定义连续变量用binvar定义需要0-1的变量。下面给一个简化的代码骨架展示如何将第4节中的公式转为Matlab代码。%% 基本参数定义 T 24; % 调度周期小时 N_user 3; % 共享储能服务的用户数 %% 决策变量 % 配置变量储能额定功率和容量 P_rated sdpvar(1, 1); % 额定功率kW E_cap sdpvar(1, 1); % 额定容量kWh % 调度变量实时充放电功率和电网交互 P_ch sdpvar(1, T); % 充电功率 P_dis sdpvar(1, T); % 放电功率 P_buy sdpvar(1, T); % 向电网购电 P_sell sdpvar(1, T); % 向电网售电 % 各用户的功率分配 P_user_ch sdpvar(N_user, T); % 每个用户的充电分配 P_user_dis sdpvar(N_user, T); % 每个用户的放电分配 % SOC变量kWh SOC sdpvar(1, T 1); %% 目标函数 C_inv alpha * P_rated beta * E_cap; % 投资成本alpha、beta为成本系数 C_grid sum(P_buy .* price_buy - P_sell .* price_sell); C_carbon lambda_co2 * (mu_grid * sum(P_buy) - delta * sum(P_buy)); C_fluc omega * sum((diff(P_buy - P_sell)).^2); objective C_inv C_grid C_carbon C_fluc; %% 约束 Constraints []; % SOC 动态 Constraints [Constraints, SOC(2:end) SOC(1:end-1) ... eta_ch * P_ch / E_cap - P_dis / (eta_dis * E_cap)]; % 充放电功率限制 Constraints [Constraints, 0 P_ch P_rated]; Constraints [Constraints, 0 P_dis P_rated]; % SOC 上下限 Constraints [Constraints, SOC_min SOC SOC_max]; % 电网功率限制 Constraints [Constraints, 0 P_buy P_buy_max]; Constraints [Constraints, 0 P_sell P_sell_max]; % 功率平衡 Constraints [Constraints, P_buy sum(P_dis_user) ... load P_ch P_sell]; %% 求解 ops sdpsettings(solver, gurobi, verbose, 2); optimize(Constraints, objective, ops);这段代码是核心骨架但有几个地方我必须提醒你。需要注意的两个关键问题第一SOC动态约束中的 (E_{cap}) 是决策变量这就产生了非线性(P_{ch}) 除以 (E_{cap})。实际工程处理中常用的做法有两种一是引入一个中间变量表示充放电“倍率”C-rate将约束改写为 (P_{ch,t} \le C_{rate} \cdot E_{cap})从而避免除法二是用“大M法”配合分段处理但这个实现难度偏高。更简单的做法是在第一次迭代时先固定 (E_{cap}) 求调度再根据调度结果修正 (E_{cap})——这实际是迭代启发式虽然不能严格证明最优但算例结果非常接近精确解。如果你想一步到位我会更推荐引入“功率能量比”变量Power-to-Energy Ratio, PER把 (E_{cap}) 从分母中消掉。第二碳交易成本里我把 (\mu_{grid} \cdot \sum P_{buy}) 视为购电间接碳排放这是简化版。精确做法是分别计算每个时段的购电排放再累加但仿真结果差异不大可以接受。5.3 求解慢/不收敛时怎么办Gurobi通常是跑这种二次优化最快的求解器。如果你调用不了Gurobi可以先用Gurobi评估版学术许可很容易申请。如果你连Gurobi都没有那只能用CPLEX两者在Yalmip中调用方式几乎一样。万一你用的是免费求解器比如sedumi、sdpt3你会发现求解时间明显变长对规模稍大的算例可能出现“infeasible problem”的报错当加入整数变量之后内点法基本跑不动。所以对这类带配置-调度双层耦合的模型我的建议非常直接想办法用Gurobi或CPLEX别在求解器上省时间。5.4 参数设置与数据准备清单有了代码框架接下来是保证算例能正确复现的参数准备阶段。这一部分的数据获取与设置是决定最终结果真实性的关键。参数类别典型取值范围或来源说明储能单位容量成本1200–2000 元/kWh磷酸铁锂近期市场成本区间储能单位功率成本500–1200 元/kWPCS、变压器等成本充放电效率0.90–0.95电化学储能全程效率调度周期24h时间间隔15分钟或1小时碳价30–100 元/tCO₂国内碳市场常见区间碳排放因子0.5–0.9 tCO₂/MWh区域电网平均排放因子免费配额系数0.4–0.7 tCO₂/MWh基准法配额系数波动惩罚系数1–100 元/MW²需经过数据实验标定资本回收因子CRF0.08–0.12折现率8%寿命15年分时电价峰平谷三段各省标准峰谷价差≥0.6元/kWh你最好在matlab中新建一个params.m文件把这些参数集中管理不要在多个脚本中硬编码不然后期调参能把你折腾到怀疑人生。6. 算例设计与结果分析怎样才算“跑通”了模型6.1 场景设计的三种思路模型跑通之后你需要设计算例方案来验证它。我一般建议做以下三种思路的对比实验思路一有无储能对比。设一个没有储能的场景即 (P_{ess}0)作为基准情景。这个场景的最优总成本是一个“底数”后续加入储能的方案都必须比这个底数更低否则模型设定就有问题。思路二有无碳交易对比。在含储能的前提下关掉碳交易模块即 (\lambda_{CO_2}0)和开启碳交易模块(\lambda_{CO_2}50) 元/t做对比。这个对比能够直观展示碳交易如何影响储能的最优容量——通常碳价越高储能配置越大。思路三不同波动惩罚系数的敏感性分析。依次设置 (\omega 0, 10, 20, 50, 100)观察储能配置、总成本和联络线功率波动的变化。这三组实验跑完基本支撑一篇中等质量的小论文的结果图表是不成问题的。6.2 结果图表的输出与解读方法在用Matlab输出图表时我建议至少画三张图第一张是“典型日调度结果图”包含功率平衡购电、充电、放电、负荷、SOC曲线。这张图能直观看出储能是否在谷时充电、峰时放电SOC曲线是否连续光滑。第二张是“碳交易参与前后对比柱状图”横坐标是不同场景纵坐标是总碳排放量和总成本直观展示碳约束的效果。第三张是“波动惩罚系数 (\omega) 的敏感性曲线图”横坐标是 (\omega)两条纵轴分别对应最优储能容量和总成本。这是最能说明“电网交互波动惩罚”价值的图。出完图之后有一步很多人会漏掉——验证结果是否在工程上合理。比如储能SOC是否有长时间停留在0或1附近如果是就说明配置过小或过大充放电循环次数是否过高或不合理如果一天循环超过2次通常说明目标函数里缺少“充放电次数惩罚项”这是一个比较隐蔽的模型漏洞购电功率曲线是否出现高频振荡如果振荡明显说明波动惩罚项可能没施加对碳交易量是否为正且数值合理如果出现碳交易量异常大的情况通常是免费配额系数设置有问题6.3 我的一个小经验从简单到复杂逐步验证我最开始跑这个模型时直接上了完整版结果目标函数值出来是负数第一反应是代码有bug排查了两天才发现是碳交易收益部分设置得过高。后来我学乖了所有复杂模型一律遵循一个原则分阶段验证。第一步先设 (\lambda_{CO_2}0)、(\omega0)只剩储能和分时电价套利检查最优结果是否符合直觉谷充峰放SOC在0和上限之间循环。第二步单独把碳交易加上观察碳交易成本对目标函数和碳排放量的影响检查碳交易量是否为预计的正负号。第三步再单独加波动惩罚项观察联络线功率的波动方差是否下降。最后才把所有模块全部打开跑完整的模型。这样做的好处是一旦某一步结果不合理你能立刻定位到是哪一个模块引入的问题而不是在五百行代码里瞎猜。如果你要把这个模型写进论文这种“分阶段验证”的过程也可以直接作为不同场景的对比实验一举两得。7. 我在实际仿真中踩过的坑和对应解法7.1 “双线性项”导致求解器报错第一次把配置变量 (E_{cap}) 和调度变量 (P_{ch}) 写进同一个SOC约束时Yalmip报错“Nonlinear constraints are not supported.” 这就是前面提到的双线性问题——两个变量相乘或相除。当时我绕不过去就采用了“先固定容量再优化调度”的迭代法。虽然能出结果但理论上的最优性打了折扣。后来换成了“C-rate约束”法不直接让SOC除以 (E_{cap})而是把充电约束改成[ P_{ch,t} \le \mu \cdot E_{cap} ]其中 (\mu) 是最大充电倍率。SOC的更新公式里仍然有 (E_{cap}) 在分母上但我人为规定SOC变量本身以kWh表示而不以百分比表示这样实际上避免了相除SOC值本身就是累计电量这样就不需要除以容量了。这是一个非常实用的建模技巧强烈推荐。7.2 波动惩罚项的单位设置不合理第一次设 (\omega) 时我没有细化单位直接用了一个很大的常数放在平方项前面结果优化器宁可大幅度减少储能的充放电也不愿产生任何功率波动储能基本变成“摆设”。最终总成本比无储能方案还高这完全违背了储能的初衷。后来我改成相对波动的形式用功率差值除以基准功率再乘以惩罚单价。这样惩罚项的量纲变成了元/次比较好理解而且在算例中 (\omega) 的可调范围也变得非常直观。建议大家从一开始就按这种“归一化后再惩罚”的方式建模会省掉很多调参的烦恼。7.3 共享储能的“功率分配”被忽略导致的失真还有一个很典型的bug我构建多用户共享储能模型时一开始没有细分每个用户的充放电功率分配只写了总的功率平衡。结果优化结果里储能给所有用户的放电量全部分配给了用电负荷最大的那个用户其他用户的收益几乎为零。这是因为缺了“按比例/按需求分配”的约束。最后我加入了如下约束才解决[ P_{i,t}^{dis} \le \alpha_{i,t} \cdot P_{load,i,t} ]意思是每个用户获得的放电功率不能超过其自身负载需求。同时把共享储能总输出写成所有用户分配之和[ P_{ess,t}^{dis} \sum_{i1}^{N} P_{i,t}^{dis} ]这两条加上之后才算真正体现了“共享”而不是“独占”。7.4 碳价的敏感性分析没有预想中线性另外一个值得注意的现象是碳价和最优储能配置并非完全线性正相关。仿真结果显示碳价从20元升到60元时最优容量显著增加但从60元升到120元时容量增幅明显放缓。原因是储能容量增加到一定程度后边际收益递减——新增的储能容量主要服务于碳减排但它的单位投资成本已经不再能被额外的碳交易收益所覆盖。这个结果如果用“边际减排成本”来解释就会发现模型的核心逻辑和电力市场理论是完全一致的。这一点在论文的讨论部分会很出彩强烈建议在结果分析里重点强调。8. 这个模型还能往哪些方向扩展最后简单聊聊扩展方向。一个模型做完不代表它只能停留在当前形态。最自然的扩展方向是加入不确定性。目前模型中风电、光伏出力和负荷都是确定性的预测值但实际运行中它们有很强的随机性。你可以把确定性模型改成两阶段随机规划stochastic programming让储能的配置决策发生在不确定性实现之前而调度决策发生在不确定性实现之后。这个改动在Matlab里通常用场景法scenario generation实现比如生成100组风速、光照和负荷场景然后用sample average approximationSAA方法求解。代码量大概会增加一倍但结果会更贴近工程实际。第二个扩展方向是把碳交易扩展成绿色证书交易或碳排放-绿证联合市场。共享储能在绿证市场中也能发挥作用——它促进了新能源消纳自然增加了绿证产出。把绿证收益加进目标函数后储能的配置逻辑又会不一样这能很好地支撑“多品种联合市场”的研究主题。第三个方向是分布式鲁棒优化。这个模型参数里无论是碳价还是电价都属于外生变量。用分布式鲁棒优化distributionally robust optimization, DRO来处理碳价和电价的联合不确定性可以让你的模型在不依赖精确概率分布的情况下保证经济性的鲁棒性。我身边有不少同行在往这个方向做Matlab Yalmip Gurobi的组合完全够用。每次跑通一个完整模型后我都有一个固定动作把最终的典型日调度图打印出来贴在工位旁边——对照着它去检查SOC曲线、电价曲线和功率平衡曲线一旦哪个环节不合理一眼就能看出来。这个习惯帮我抓住了好几处代码里细节设定错误也推荐给你。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门