ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

基于碳排放流理论的源-荷协调低碳优化调度详解

基于碳排放流理论的源-荷协调低碳优化调度详解 简介这是一份基于碳排放流理论的电力系统源-荷协调低碳优化调度学术论文面向电力系统低碳调度、需求响应及碳责任分摊领域的研究人员和工程师。论文发表于《电力系统保护与控制》2021年提出两阶段低碳优化调度模型先以经济调度为一阶段再基于Shapley值碳责任分摊定制阶梯碳价并引入以碳价为信号的需求响应利用负荷侧调节能力降低碳排放。算例在改进的PJM-5节点系统和IEEE-118节点系统中均得到验证覆盖全火电与含风电等典型场景。资源为单个PDF文件大小约990KB包含完整期刊论文全文可支撑模型复现、算例对照及综述引用。目前已有699人学习浏览是电力低碳调度方向值得精读的参考文献。1. 基于碳排放流理论的电力系统源-荷协调低碳优化调度先给每度电算清碳账在区域电网的低碳调度里最让调度员头疼的不是机组启停而是“负荷侧到底该为多少碳排放负责”。基于碳排放流理论的电力系统源-荷协调低碳优化调度就是把发电侧的碳排放按潮流路径分摊到每个节点和负荷让碳势像电价一样成为一个可感知的信号再让机组、可调负荷和储能一起优化。它适合做配网调度、园区能量管理和低碳规划的技术人员也适合刚入门的硕士生。这个方向的价值是把“减碳”从拍脑袋变成可计算、可复现、可校验。2. 碳排放流理论先搞清碳在电网里怎么流动新手最容易混淆的一点碳排放流不是直接测出来的而是从潮流结果里“按比例分摊”出来的。物理上负荷用的电来自多个发电机的混合没有哪一条线路是“纯火电”或“纯风光”。所以必须有一个规则把发电侧的碳排放量化地追到负荷侧。碳排放流理论做的就是这件事。2.1 从发电侧算碳到负荷侧算碳碳账为什么需要重新分常规核算方式很简单每台发电机乘上自己的碳排放强度得到全厂总排放。这个数用于上报很好但用来做调度诱导会失真。假设某个节点附近有一台风电和一台火电火电送出功率大部分被远方负荷用掉本地负荷反而主要由风电供给。按发电侧平均核算本地负荷会被记成“吃了不少火电”但实际上它附近的风电已经就地消纳。负荷侧的减排责任必须看它所挂节点的电是怎么组合的。这正是碳排放流理论要拆掉的黑匣子它把每一段支路的有功潮流都视为携带碳流支路始端碳势就是这条支路的“碳足迹”。碳排放流理论中节点碳势是所有注入该节点的支路碳流与本地机组碳流之和除以该节点注入的有功总量。这样任何负荷都能得到一个碳排放强度相当于“每度电的含碳量”。这个“碳势”同时受发电机排放强度和电网拓扑约束比单一排放因子多了一个空间维度。2.2 节点碳势与支路碳流密度的计算四步流程我一般不会先上复杂的交流潮流而是按直流潮流做完有功分配再做碳流追踪。流程分四步。第一步运行直流潮流得到各支路有功 (P_l) 和节点注入有功 (P_n)。需要发电机内网拓扑、线路电抗和负荷水平。第二步给每条支路定一个有向方向潮流为负就把首尾对调保证所有支路都有明确的上游和下游。第三步解节点碳势方程[ e_n \frac{\sum_{l \in N_n^{in}} e_u(l)\cdot P_l \sum_{g\in G_n} c_g\cdot P_g}{P_n^{in}} ]这里 (e_n) 是节点碳势单位 t/MWh(e_u(l)) 是支路上游节点的碳势(c_g) 是发电机组碳排放强度单位 t/MWh(P_n^{in}) 是所有进入节点n的支路功率和本地机组功率之和。第四步用 (e_n) 乘以节点负荷 (L_n)得到负荷碳流用 (e_u(l)) 乘以支路潮流得到支路碳流密度 (\rho_l)。这个方程组是线性的节点不多时用矩阵求逆或迭代求解都可以。我常用一个三节点辐射网自检节点A接常规火电100MW强度0.8 t/MWh节点B接燃气机组50MW强度0.2 t/MWh两条支路都送到节点C的150MW负荷。那么C节点碳势就是 ((0.8\times1000.2\times50)/1500.6) t/MWh。这个0.6正好反映“火电燃气混合供电”的客观比例。如果燃气机组因线路阻塞只送出20MW火电送出130MWC节点碳势会变成 ((0.8\times1300.2\times20)/1500.72)上升0.12。阻塞直接改变碳势分布这比传统发电侧核算敏感得多。2.3 网损、阻塞与环网会让碳势失真碳排放流最容易被质疑的是网损。如果不把线路损耗纳入碳流方程就会出现“碳泄漏”流出支路的碳流大于流入支路总碳量不守恒。处理办法是给每条有损支路增加一个虚拟负荷功率等于线损挂在下游节点或按比例分摊。否则下游节点碳势偏低会让调度错误偏爱长距离输电。环网会让碳势方程变成一个互相耦合的方程组不能用简单的“上游到下游”逐级推进。这时我会用稀疏矩阵直接解。另一个常见现象是阻塞使区域碳势阶梯拉大低碳机组被挡在线路一侧另一侧节点碳势明显上升。这个信号在优化调度里会成为需求响应的重要输入碳势高的节点负荷更愿意削减或转移。到这里碳势计算已经落地下一步看它怎么进调度模型。3. 源-荷协调低碳调度目标函数、约束与Python最小示例碳势不是算出来就结束它要成为调度决策的一部分。源-荷协调的关键是把“节点碳势”当成一个价格或约束信号让发电侧和用电侧同时去适应它。3.1 把碳势写进调度目标的三条路常见做法有三条。第一条是碳成本叠加在发电成本之外把负荷节点碳势乘以负荷电量再乘以碳价作为目标函数的惩罚项。第二条是碳势约束给每个节点设定碳势上限比如不超过0.4 t/MWh不满足就需要调整机组出力和负荷分布。第三条是运行信号把节点碳势发布给可调负荷和储能让它们在碳势低时多用电碳势高时少用。三条路不是互斥。我一般用第一条为主第三条作为辅助信号第二条只在区域考核时用。原因是第一条直接和经济性挂钩决策结果容易被业务方接受。第二条如果设得太严可能出现无解第三条如果缺少价格激励负荷侧根本不响应。3.2 优化模型骨架功率平衡、机组限值、负荷调节一个最小可用的低碳源-荷协调模型目标函数写成[ \min \sum_{g} C_g(P_g) \lambda \sum_n e_n L_n \sum_n \delta_n |\Delta L_n| ]第一项是发电成本第二项是碳排放流成本(e_n) 是节点碳势(L_n) 是该节点的用电负荷第三项是负荷调节成本(\Delta L_n) 是可调负荷相对基线的变化量。约束包括功率平衡、机组出力上下限、爬坡约束、负荷可调范围。这个模型看着简单但有一个容易翻车的点(e_n) 实际上依赖潮流结果而潮流又受调度影响。把它当成常数处理属于工程近似。如果要严格化需要把第2章的碳势方程也写成优化约束这就是第4章要说的线性化问题。3.3 Python PuLP 最小示例三节点低碳源-荷协调调度下面给一个可复现的最小示例。数据设定节点0火电边际成本30元/MWh碳排放强度0.8 t/MWh节点1燃气边际成本50元/MWh碳排放强度0.2 t/MWh节点2是负荷节点基线100MW可下调15MW、上调10MW。碳价100元/t负荷调节成本80元/MWh。节点碳势初值取0.5 t/MWh迭代3次更新。import pulp # 参数 lambda_c 100.0 # 碳价元/tCO2 e_gen {0: 0.8, 1: 0.2} # 机组碳排放强度t/MWh c_gen {0: 30.0, 1: 50.0} # 发电边际成本元/MWh pmin {0: 20.0, 1: 20.0} pmax {0: 100.0, 1: 50.0} load0 100.0 # 基线负荷MW down_ub 15.0 # 最大下调量MW up_ub 10.0 # 最大上调量MW rc 80.0 # 负荷调节成本元/MWh e_load 0.5 # 节点碳势初值 for it in range(3): prob pulp.LpProblem(LowCarbonDispatch, pulp.LpMinimize) p0 pulp.LpVariable(p0, pmin[0], pmax[0]) p1 pulp.LpVariable(p1, pmin[1], pmax[1]) dn pulp.LpVariable(dn, 0, down_ub) up pulp.LpVariable(up, 0, up_ub) ld pulp.LpVariable(ld, load0 - down_ub, load0 up_ub) # 目标发电成本 碳流成本 负荷响应成本 prob (c_gen[0]*p0 c_gen[1]*p1 lambda_c * e_load * ld rc * (dn up)) prob p0 p1 ld, power_balance prob ld load0 - dn up, load_response prob.solve() p0_s pulp.value(p0) p1_s pulp.value(p1) ld_s pulp.value(ld) # 更新节点碳势按两台机组出力加权 e_load (e_gen[0]*p0_s e_gen[1]*p1_s) / (p0_s p1_s) print(fiter{it}, p0{p0_s:.1f}, p1{p1_s:.1f}, load{ld_s:.1f}, e_load{e_load:.3f})这个模型里碳价固定为100元/t调节成本固定为80元/MWh。如果负荷下调15MW可节省碳成本约 (100\times0.6\times15900) 元但要付 (80\times151200) 元响应成本所以模型会在碳价和调节成本之间做权衡。实际运行时可以观察打印出来的 (e_load) 是否收敛通常3到5次迭代能稳定。代码逻辑说明第一轮按初值0.5决策算出火电和燃气最优比例第二轮用新的 (e_load) 重新决策相当于把上一轮的“碳账”代入目标第三轮再更新。这个方案不是严格的全局最优但对工程够用。更严格的做法是用KKT条件推导或在目标里把 (e_n) 设为变量并做线性化处理。参数说明碳价、碳排放强度、负荷调节成本是最关键的3个量。碳价越高系统越愿意下调负荷或开燃气燃气边际成本越高低碳机组优势被碳价抵消。调节成本设太高负荷侧“源荷协调”会形同虚设设太低负荷会过度响应在日内出现设备频繁启停。注意这个示例只写了功率平衡没有加入线路潮流约束。实际部署时至少要给目标加网络阻塞惩罚否则算出的碳势难以落地。4. 碳势约束的线性化与三个必调参数很多人在这一步卡住模型写好求解器却说不收敛。问题大多出在碳势约束的非线性上。如果严格把碳势作为变量 (e_n)那碳势方程右边会出现 (e_u(l)\cdot P_l)。优化变量同时包含 (e_u) 和 (P_l)它们相乘就是双线性项。这类问题在数学上是非凸的直接丢给求解器结果和初值关系很大调度曲线会突变。4.1 双线性项为什么是求解陷阱以最简单的两节点为例若下游节点碳势由上游碳势和支路潮流共同决定目标中的碳成本 (\lambda e_n L_n) 就同时含有 (e_n) 和 (L_n)而 (e_n) 又来自 (e_u P_l)。优化决策一变潮流就变碳势也变形成耦合的非线性关系。用求解器硬解经常出现“多开一台低排机组反而总碳成本升高”的伪优化结果。工程上常用三种处理。第一种是第3章展示的顺序迭代速度快但只能得到局部最优。第二种是McCormick下包络线性化把双线性项 (w x y) 的可行域用四个线性不等式包住。比如给定 (x\in [x_{lo}, x_{hi}])、(y\in [y_{lo}, y_{hi}])那么[ w \ge x_{lo} y x y_{lo} - x_{lo} y_{lo} ] [ w \ge x_{hi} y x y_{hi} - x_{hi} y_{hi} ] [ w \le x_{hi} y x y_{lo} - x_{hi} y_{lo} ] [ w \le x_{lo} y x y_{hi} - x_{lo} y_{hi} ]McCormick虽然会放宽可行域但求解稳定且能给出下界。第三种是把支路潮流离散化按典型运行方式预生成碳势表调度时查表。我一般按节点规模选200节点以内用McCormick大系统用顺序迭代或查表。4.2 三个必调参数碳价、响应成本、调度步长把调度结果调“活”靠的是参数整定。第一个必调参数是碳价 (\lambda_c)。它不能拍脑袋设我一般先看目标函数里碳成本占发电成本的比例调到5%~20%之间。比例太低低碳机组没有竞争优势比例太高负荷响应会过度出现电价曲线震荡。第二个必调参数是负荷调节成本 (\delta)。它反映可调负荷的实际激励成本要参考需求响应补偿价格而不是随意设。第三个必调参数是调度步长。碳排放流数据通常是小时级的如果用15分钟调度会出现“按小时碳势计算时15分钟段内反复调节”的抖动。我习惯把碳势信号按调度周期做一次线性插值同时给负荷变化加分钟级爬坡约束。参数之间还有联动关系。如果某节点碳势差 (\Delta e) 满足 (\lambda_c \Delta e \delta)负荷侧响应成本高于碳收益模型会选择不调节。如果 (\lambda_c \Delta e \gg \delta)负荷会接近满额响应可能造成系统低频或线路过载。所以调参时不要单独看一张表要看这对“碳收益-响应成本”的比值在典型时段是否合理。参数作用典型范围调参依据碳价 (\lambda_c)平衡碳成本与发电成本50~300元/tCO2碳市场行情与影子价格响应成本 (\delta)约束负荷调节力度40~120元/MWh需求响应补贴标准调度步长 (\Delta t)控制调节频率15min~1h碳势数据时间分辨率4.3 求解器选择开源还是商用如果只是验证方案用PuLP自带的CBC即可。要跑几百节点的区域电网CBC在MILP性能上会吃紧我会转用Gurobi或CPLEX它们在双线性处理和整数变量上要明显快。McCormick线性化会把问题变成MILP商用求解器通常能给出稳定下界方便判断迭代解离最优有多远。开源的SCIP也不错但配置和许可对生产环境不友好。下面的表是我个人对比经验求解器适合规模非线性支持生产注意CBC几十节点内弱免费但MILP慢SCIP百节点级中等开源参数多Gurobi/CPLEX百到千节点强商用许可需估算成本5. 避坑碳排放流调度落地的5个常见问题这些坑是反复出现的记录下来能省不少时间。每条我都按现象、原因、解决来写。5.1 问题1碳势迭代不收敛结果来回跳现象迭代了5次负荷响应量在第4次和第5次相差30%以上目标函数值波动。原因碳势更新没有阻尼而且负荷响应量与碳势存在正反馈碳势高导致负荷下调负荷下调改变机组出力又反过来改变碳势。如果每步都用最新值覆盖就容易震荡。解决更新碳势时用松弛因子(e^{(k)} 0.4 e^{calc} 0.6 e^{(k-1)})同时给负荷响应量加爬坡上限每次调整不超过10%的基线。这个血泪经验来自一次迎峰度夏调度仿真。5.2 问题2碳价调高了负荷侧却没有响应现象(\lambda_c) 从100调高到300节点负荷曲线基本没动。原因节点碳势差异太小比如全网都在0.55到0.58 t/MWh之间碳价再高不同时间的用电成本差距也不大。也可能是负荷可调范围设得太保守可调能力只有1%~2%调度自然没得选。解决先看各节点碳势极差。极差小于0.05说明电网已经高度互联、低碳电都能送到这时应缩小计算分区或加入线路阻塞约束而不是盲目加碳价。5.3 问题3节点碳势算出负值现象某节点碳势为 -0.02 t/MWh明显不合理。原因碳势方程要求所有支路都是“从上游到下游”的正方向。直流潮流结果里支路有功为负时如果没把方向对调负功率乘以正碳势就会产生负碳流再叠加方程就出现负碳势。解决在建模前先做一次支路方向归一化把所有支路都换成功率实际方向。这个方向处理干净后负碳势自然消失。5.4 问题4优化结果反而多开了高碳机组现象加入碳成本后燃气机组出力下降火电出力上升。原因把碳流成本只放在负荷侧没有给发电机组自身算碳账。如果低碳机组处于网络的碳势高负荷区增加它出力可能通过线路把高碳机组挤到更靠近重负荷节点反而抬高负荷碳势。换句话说源侧和荷侧需要同时核算。解决目标函数保留 (c_g P_g) 机组碳排放项再叠加负荷侧碳流成本形成“源-荷双侧碳成本”。这样机组不会因为网络位置而被错误激励。5.5 问题5模型规模一大就求解失败现象从33节点扩展到几百节点求解器跑了半小时都没出可行解。原因把碳势方程、潮流约束和全部0/1启停变量一股脑写进模型非线性项和整数变量爆炸MILP规模过大。解决用顺序分解。小时级调度用离线碳势表机组组合用MILP负荷响应用滚动更新。碳势表每天更新一次调度在线计算只在碳势表基础上做这样几百节点也能在分钟级求解。6. 从调度结果反推碳势校验与敏感度分析的三个技巧调度结果不能直接信要能“反推”。我常用的三个技巧能让模型暴露问题。6.1 用节点电表和绿电合同校验碳势选一个有大用户直供电的节点把节点碳势曲线和大用户每月绿电交易凭证对比。如果绿电比例高但节点碳势还是很高说明计算里没有把绿电的“零碳属性”正确分摊多半是支路损耗或合同路径与实际潮流不一致。这比看目标函数收敛更有说服力。6.2 画碳价-负荷响应敏感度曲线把碳价从50按20步长调到300记录每个值时负荷响应量和系统总碳排。正常应是一条递减的阶梯线。如果出现“小幅度震荡”或“倒U型”说明约束或参数有毛病。倒U型通常是响应成本设置过高负荷一开始不响应到某一个阈值突然大幅下调。6.3 用“电价-碳势叠加表”做运行决策把同一时段的节点电价和节点碳势排成一张表找“低碳低电价”时段把可调负荷、储能充电安排过去。这个技巧在园区微网里非常实用。比如下表是一个典型场景时段电价(元/MWh)节点碳势(t/MWh)建议动作01:002200.35充电/多用电19:004800.72削减/放电两个时段电价差一倍碳势差一倍“低碳低电价”同时出现时负荷响应价值最高。我现在的习惯是拿到任何调度方案先拉一张这样的叠加表。节点碳势分布对不上后面所有优化结果都是空中楼阁。希望帮到你。本文还有配套的精品资源点击获取
返回列表