ARTICLE DETAIL

资讯详情

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

综合能源系统优化运行:碳交易与需求响应协同建模实践

综合能源系统优化运行:碳交易与需求响应协同建模实践 先说下背景。前两年接了园区综合能源系统优化运行的课题甲方当时提了两个硬指标一是对外购电和天然气消耗要算清账二是碳排放要有可审计的台账。调研一圈下来发现纯做经济调度已经不够看了真正让问题变复杂的是两个“市场机制变量”碳交易机制给每吨二氧化碳标了价需求响应让负荷曲线不再是给定不变的输入。这两个变量一个作用于供给侧的成本结构一个作用于需求侧的曲线形态而综合能源系统的优化运行恰好要把这两股力量同时放进同一个数学优化问题里。这篇博文就把我这段时期的探索思路整理出来从设备建模、机制建模到优化求解再到落地实施会遇到的实际问题尽量把逻辑和坑一并讲清楚。1. 一套能同时描述电热冷耦合的设备模型是地基1.1 模型里必须包含的六类设备综合能源系统这个名字听起来大落到数学优化里其实就是一堆设备约束的集合。我做的园区级系统里最常见的是下面几类光伏PV、燃气轮机热电联产GT、燃气锅炉GB、电锅炉/热泵EB/HP、吸收式制冷机和电制冷机、电储能/蓄热罐/蓄冷罐。每一类设备的建模方式差别很大但共同点是都归结为“输入能量-输出能量”的转换关系外加若干运行边界条件。设备类型输入输出关键约束光伏太阳辐照预测电出力上限随辐照变化无启停约束燃气轮机GT天然气电热热电比、最小启停时间、爬坡率燃气锅炉GB天然气热出力上下限、效率电锅炉/热泵电热转换系数COP、容量上限电制冷机/吸收式制冷机电/热冷COP、容量上限电储能/蓄热/蓄冷电/热/冷电/热/冷SOC递推、充放速率、容量光伏建模相对简单把辐照预测折算成功率曲线直接作为净负荷的负项。但燃气轮机和储能这两类设备建模时如果不加“最小运行时间”和“SOC边界”后面求解出来的调度曲线在现场根本没法执行。以燃气轮机为例如果允许每小时随意启停优化器完全可能为了赚峰谷电价差而让机组频繁启停现实中燃机一次启停的热应力损耗和燃料浪费远不是模型里那几十块钱能覆盖的。所以我在模型里一律加上最小连续运行时间和最小连续停机时间约束哪怕这意味着问题规模变大一些也值得。1.2 能量平衡方程是连接所有设备的骨架园区综合能源系统的优化运行第一步就是把电、热、冷三个网络的平衡关系写清楚。电平衡是所有电出力与用电负荷的等式P_pv P_gt P_es_discharge P_buy P_load P_eb P_hp P_ec P_es_charge P_sell热平衡要同时考虑燃气轮机余热、燃气锅炉、热泵、蓄热罐这几股来源H_gt H_gb H_hp H_hs_discharge H_load H_hs_charge冷平衡相对独立但要注意吸收式制冷机和电制冷机的能流来源不同C_ec C_ac C_load这三个等式写入优化模型后系统才算真正“耦合”起来。燃气轮机发的电和余热必须同步产生这就天然形成了一种约束电力需求高的时候余热可能过剩热需求高的时候发电可能过剩。多出来的热可以进蓄热罐也可以直接驱动吸收式制冷机变成冷量。这也是综合能源系统相比单纯“电-气”互补要复杂得多的根本原因。储能设备的建模是另一个容易出问题的地方。蓄电罐的SOC状态转移方程是SOC_t SOC_{t-1} η_c × P_ch × Δt / E_cap - P_dis × Δt / (η_d × E_cap)蓄热罐和蓄冷罐逻辑类似但热损系数更大长时间闲置时每小时可能有2%到5%的热量散失这是在电储能里忽略不计的项在热储能里不能忽略。如果忽略了热损优化模型会倾向把蓄热罐当作“免费仓库”充满实际现场运行时热损会让调度曲线偏乐观。设备效率的取值也要小心。很多文献直接把效率当作常数比如燃气轮机效率35%、锅炉效率90%。工程上效率曲线通常是非线性的在低负荷率区间效率明显下降。严格做法是分段线性化把负荷率分成3到4段每段给一个区间斜率。对于日运行优化的精度来说分段线性化已经足够而且不会破坏MILP结构。2. 碳交易机制进优化框架的三种姿势与参数敏感点2.1 从碳税到基准线配额目标函数里该写什么碳交易机制进模型不同文献写得差异很大。我梳理下来主流的建模方式其实就三种复杂度递增适用场景也完全不同。方式一是“碳税/固定碳价”模式直接按单位排放量乘以碳价把碳成本加进目标函数。公式很简单C_co2 λ × E_actual这里的λ是碳价元/吨E_actual是系统实际碳排放量。这种方式的优点是实现成本低适合做碳价敏感性分析缺点是没有反映“配额”这个核心机制——在真实碳市场里企业拿到的是配额超额部分才需要购买盈余部分可以出售。方式二是“基准线配额”模式也是目前应用最广的C_co2 λ × (E_actual - E_allowance)E_allowance是系统获得的碳配额可以由政府按历史排放法或行业基准法核定E_actual - E_allowance代表配额缺口或盈余。缺口为正时需要买碳为负时可以卖碳获得收益。当E_allowance取0时此模型退化回方式一。这个模式在数学上只是目标函数里多了一个常数项-λ×E_allowance但这个常数项会直接改变优化问题的经济边界配额充裕时系统有动力多排放以换取更多的发电收益配额紧张时系统会主动降低高碳出力。方式三是“阶梯碳价”即超额排放越多碳价越高采用分段线性函数表达。这更接近部分试点碳市场对超额排放的惩罚机制但需要在模型中引入0-1变量来标记超额区间求解复杂度上升。三种方式的对比可以看这张表建模方式目标函数写法适用场景对模型复杂度影响固定碳税λ×E_actual碳价参数敏感性分析无额外变量基准线配额λ×(E_actual-E_allowance)碳市场下的日运行优化无额外变量阶梯碳价分段线性函数惩罚机制明显的碳市场增加0-1分段变量我实际做的课题里最终采用方式二因为它最接近国内试点碳市场“免费配额市场交易”的现状同时没有过多增加求解压力。如果业主所在行业配额发放规则更复杂可以考虑三层模型上层决策配额使用策略中层做运行调度下层做碳交易结算。但在一篇研究导向的框架里方式二的性价比最高。2.2 碳价怎么改变设备优先级一道小学算术题看清机制碳交易影响运行策略的本质是给每一度电、每一立方米天然气赋予了一个“碳成本标签”从而重新排列设备的优先顺序。不理解这一点后面所有优化模型都会变成盲调参数。碳排放量的计算口径是非常重要的前提。系统的实际碳排放来源主要有两块E_actual E_buy E_gasE_buy P_buy × EF_grid外购电折算碳排放 E_gas V_gas × EF_gas天然气直接燃烧排放其中EF_grid是电网购电的碳排放因子通常单位是kgCO₂/kWhEF_gas是天然气碳排放因子单位是kgCO₂/Nm³或tCO₂/MWh。这里有一个极容易踩的坑电网排放因子有两种口径一种是区域电网平均碳排放因子另一个是边际碳排放因子。平均因子反映全网发电结构约0.58 kgCO₂/kWh左右边际因子反映负荷每增加1kWh时实际启用的边际机组碳排放在高峰时段往往高于平均因子在低谷时段可能低于平均因子。用哪个口径会显著影响优化结论这一点后面专门讲。举一个简单的算例来理解碳价的经济作用。假设一个时间段本地燃气轮机发电的边际成本是0.55元/kWh碳排放强度是0.6 kgCO₂/kWh此时外购电的价格是0.65元/kWh电网平均排放因子是0.4 kgCO₂/kWh碳价按80元/吨计。那么燃气轮机每发1kWh电的“碳后成本”是0.55 0.6 × 0.08 0.598元/kWh外购电的“碳后成本”是0.65 0.4 × 0.08 0.682元/kWh可见在碳价80元/吨时本地燃气轮机反而更有竞争力。但如果把外购电价调到0.58元/kWh外购电的综合成本就是0.58 0.032 0.612元/kWh燃气轮机的优势就消失了。这就是碳价在供给侧的“排序重构”作用碳价越高高碳机组的相对经济性越差低碳机组的竞争力越强。2.3 参数敏感性是必须做的“保命”分析碳价不是一个稳定参数。试点碳市场曾经出现过从二三十元每吨到上百元每吨的波动区间配额松紧程度也在逐年调整。如果模型结果只针对某一个固定碳价得出汇报时很容易被决策者一句话问住“碳价跌一半怎么办”所以我强烈建议把碳价、配额量、排放因子全部参数化做成可扫描的输入变量。碳价按20、40、60、80、100元/吨扫描配额按基准值的0.8倍、1.0倍、1.2倍扫描输出的是成本-碳排放的帕累托前沿或者不同场景下的设备出力占比变化曲线。这项工作一举多得既验证模型鲁棒性也能让业主直观看到结论的适用范围。3. 需求响应建模价格弹性与激励补偿两条路线以及冷热负荷的特殊性3.1 两条主流的DR建模路线需求响应在优化框架里的角色不同研究里差异很大。有些模型把DR当作外生场景直接修改负荷曲线这样省事但失去了“协同优化”的价值更规范的做法是把DR作为决策变量嵌入到优化模型内部。我采用的主流路线有两条价格型DRPrice-based DR和激励型DRIncentive-based DR。价格型DR建立在电量-电价弹性矩阵基础上。用户对电价变化做出响应本质是需求量的相对变化率与电价相对变化率之间满足弹性关系ΔL_i / L_i e_ii × Δρ_i / ρ_i Σ e_ij × Δρ_j / ρ_j其中e_ii是自弹性系数表示本时段电价变化对本时段负荷的影响通常为负e_ij是交叉弹性系数表示其他时段j的电价变化对时段i负荷的影响通常为正反映负荷在不同时段之间的转移。例如某个用户在峰时电价上涨20%时其峰时用电量下降4%那么自弹性系数就是-0.2。同时谷时电价下降10%导致该用户在峰时的用电量多转移了0.5%那么峰谷之间的交叉弹性系数可以反推出来。这个矩阵的取值直接决定价格型DR的效率后面会讲到如何获取。激励型DR建模更直接。可中断负荷IL允许系统在未来某时段切除一部分负荷但需要支付单位补偿价格模型里设置每个时段的最大可中断量可转移负荷TL允许把某些时段负荷平移到前后时间窗内总用电量保持不变但增加了负荷平移时间窗口约束。3.2 综合能源系统的DR不止是“电”这是很多初学者最容易忽视的地方。综合能源系统里的需求响应绝不仅仅是把电负荷曲线削峰填谷那么简单。热负荷和冷负荷同样具备响应潜力而且由于热惯性它们的柔性往往比电负荷更大。典型的热负荷响应路径有两种。第一种是通过蓄热罐直接充放热在谷时电价时段多烧锅炉或热泵蓄热在峰时电价时段放热减少燃气锅炉和燃气轮机的供热出力。第二种是直接利用建筑热惯性供热系统的回水温度和室内温度在短时间内有“蓄冷蓄热”能力允许供热功率在基准值的90%到110%之间波动只要持续时间不超过一到两个小时用户体感几乎没有变化。冷负荷与此类似依靠空调设定的温度死区比如24到26摄氏度完全可以实现一定量的削峰。把这些柔性负荷建模为区间约束0.9 × H_load_base ≤ H_load_t ≤ 1.1 × H_load_base实际优化中热/冷负荷的柔性区间会给系统带来意想不到的效果。热负荷允许小幅波动时蓄热罐的容量要求可以相应降低冷负荷柔性配合电制冷机和吸收式制冷机的出力调节可以让整套系统在峰时段的购电需求进一步下压。综合能源系统的DR优势就体现在这个地方——多个能源网络的柔性可以互相补充形成一个比单纯“只调电”更宽的调节空间。3.3 弹性系数从哪来弹性系数矩阵是价格型DR建模里最让新手头痛的参数。实话实说初期没有用户历史数据的时候只能用文献里常见的典型值峰谷自弹性系数-0.1到-0.3交叉弹性系数0.02到0.1。但这种做法只能算“先跑起来”不能直接拿去做项目报价。有历史负荷数据和分时电价记录时可以通过回归方式直接拟合弹性系数。简单思路是把历史数据按“峰、平、谷”三段分成多个样本点对每一段做线性回归模型形式为ΔL_i / L_i e_ii × Δρ_i / ρ_i 常数项 误差项更成熟的做法是把用户按负荷行为做K-means聚类分成“高弹性工业用户”“刚性商业用户”“柔性园区用户”等几类每类用户单独估计一组弹性和响应基线。这个工作看起来增加了一步但对优化结果的准确度提升非常明显。同一套设备模型下用典型弹性值和用户实测弹性值算出来的DR收益可以差出3到5个百分点。所以数据工作一定不能省。4. 三个模块收拢成一个MILP问题目标函数、约束与求解器选型4.1 把经济、碳、DR成本写进同一个目标函数做完了前面的工作现在把碳交易和需求响应的模块与设备模型整合成一个可解的优化问题。目标函数采用“总运行成本最小化”框架包含六个部分min F C_buy C_fuel C_om C_storage C_co2 C_dr - R_sellC_buy是购电成本C_fuel是天然气燃料成本C_om是设备运维成本C_storage是储能充放带来的折旧损耗成本C_co2是碳交易成本按第二节的基准线配额模型计算C_dr是激励型需求响应补偿成本R_sell是余电上网收益。值得强调的是价格型DR并不直接出现在目标函数里它通过修改负荷约束来间接影响优化结果而激励型DR必须作为补偿成本写进目标否则系统会在每个时段都切负荷得不到真实的经济折中。如果要做多目标优化比如同时最小化运行成本和碳排放量可以引入权重系数将双目标线性加权为单目标或者先用帕累托前沿方法求出一组非劣解再根据业主偏好选点。4.2 约束体系的四类约束目标函数之外整个模型的核心是约束体系。我把约束分成四类第一类是能量平衡约束即第一节里的电、热、冷三个守恒方程这是把系统“绑”成一个整体的骨架。第二类是设备运行约束包括各类设备的出力上下限、爬坡约束、燃气轮机最小启停时间、储能SOC递推与充放边界。设备出力区间用线性不等式表示0-1变量负责启停状态。储能还要加“同一时段不能同时充放”的约束否则优化器会让储能同时充放来刷数据。第三类是DR有关的约束。价格型DR的响应结果体现在负荷曲线上下浮动范围内比如DR后负荷与原始负荷的偏差不能超过设定比例激励型DR则要写可中断量的上限、可转移负荷的总能量守恒以及时间窗口约束。基线负荷数据在这个环节被固定为模型输入参数不允许优化器随意修改。第四类是碳排放计算约束。外购电量和天然气消耗量通过排放因子折算为碳排放总量再与碳配额比较得到碳交易成本项需要的数据。碳排放因子在模型中是常数参数不参与优化。4.3 求解器选型与实际求解体验模型规模按一个典型园区算96个调度时段设备数量10台以内0-1变量主要来自燃气轮机启停、储能充放状态、可中断负荷投切。这样规模的MILP问题变量数大约在2000到4000个约束数在3000到5000个。我常用的求解路径是MATLAB下用Yalmip建模调Gurobi或Cplex求解器单场景求解时间从几秒到几十秒不等。如果设备数量超过20台、调度周期扩展到8760小时做年运行模拟求解时间会非常可观需要用滚动窗口、时段聚合或Benders分解来做降阶处理。求解器模型规模求解时间备注Gurobi/Cplex96时段10台设备0.1~30秒商业求解器许可收费CBC/SCIP同上几分钟开源可免费使用精度略差启发式算法大规模非线性不定无最优性保证不推荐做MILP替代有人问我为什么不直接用遗传算法或粒子群。我的观点很明确只要问题能写成线性约束和线性目标就应该用MILP才能拿到全局最优解和可验证的最优性gap。启发式算法适合那些包含非线性、非凸约束、无法线性化的问题。日运行优化在工程尺度上几乎都可以线性化你去用启发式就是自己给自己找麻烦。5. 参考算例碳价和需求响应究竟能挤出来多少收益5.1 假设一个园区场景为了把前面几节的机制讲明白我构造一个参考算例参数取自多个园区项目的典型值不代表任何具体项目但数值比例和结论方向有代表性。园区配置如下光伏装机10MW燃气轮机5MW燃气锅炉容量8MW电锅炉3MW热泵2MW电储能2MW/4MWh蓄热罐容量6MWh电制冷机2MW吸收式制冷机2MW。典型日电负荷峰值约12MW热负荷峰值约8MW冷负荷用夏季典型日数据。碳排放相关参数电网平均排放因子0.58 kgCO₂/kWh天然气排放因子2.0 kgCO₂/Nm³碳配额按历史排放基准法核给碳价取80元/吨。需求响应方面设定两条DR路径同时起作用电负荷中约10%属于可转移负荷窗口前后各2小时热负荷允许在基准值上下浮动10%蓄热罐可配合调整。5.2 三种典型运行策略的结果对比为了看出每个机制的贡献我设计了三种对比方案方案A不考虑碳交易也不做需求响应只做经济调度方案B只引入碳交易不做DR方案C同时引入碳交易和需求响应。结果按相对值列在下表方案相对运行成本相对碳排放峰时购电削减比例A经济调度基准1.001.00—B仅碳交易1.03~1.060.85~0.905%~8%C碳交易需求响应0.92~0.970.78~0.8512%~18%这个结果释放了两个关键信号第一只引入碳交易时碳排放确实明显下降但成本会小幅上升因为系统被迫用更贵的低碳出力组合替代高碳机组第二碳交易叠加需求响应后总成本反而低于纯经济调度基准说明DR削峰带来的购电成本下降和碳配额盈余收益足以抵消碳交易带来的成本压力。这也就是“机制耦合红利”的实际体现。需要再次强调这些数字是示例性质受碳价、弹性系数、负荷曲线形状影响非常大。不同园区跑出来的幅度可能翻倍或者减半但方向基本一致。5.3 为什么需求响应能帮碳交易省钱DR对碳交易的辅助作用有两个逻辑路径。第一峰时段的电网排放因子通常更高因为高峰时期电力系统会启动更多高碳边际机组DR削峰直接削减了高峰购电量折算出的碳排放量下降比谷时段削减同样电量更显著。第二削峰后燃气轮机和燃气锅炉的高峰出力需求降低天然气消耗量随之下降直接减少了系统碳排放。两个路径叠加使得“碳交易DR”方案里碳配额盈余量增加盈余配额在市场上卖出后形成额外收益进一步压低总成本。6. 从模型到现场数据的口径问题比算法本身更磨人6.1 碳配额这件事模型里不能写死模型跑得再漂亮落到真实项目里第一个碰到的就是配额口径问题。不同试点碳市场对不同行业的配额核定方法并不统一有的是历史排放法有的是行业基准线法还有的是逐年递减的“配额收紧”方案。一旦配额规则变了整个优化模型的碳交易成本项就必须跟着改。我在实际项目中把配额量做成外生参数由项目方按自身行业和所在地域填写而不是在模型里硬编码成一个固定公式。这样换一个区域、换一个行业时模型主体不用动只改碳配额输入文件就能复用。6.2 需求响应“基线”认定是结算时最容易扯皮的地方需求响应的收益能不能兑现很大程度取决于“响应基线”怎么定。这是真实项目里最容易引发争议的环节。举一个非常典型的场景某园区某天下午2点参与削峰响应配合切掉了200kW可中断负荷。但如果事前确定的基线是“前5个正常工作日同时段负荷的平均值”而园区这几天本身就在减产负荷一直往下走即便企业实际没有配合响应按滑动平均基线算也会被认定“响应了”150kW。反过来如果前几天负荷一直在涨企业真实切了200kW按基线算法可能只算响应了几十千瓦。这种扯皮在DR结算里极其常见。所以我在优化模型里坚持一个原则基线输入与核查口径保持一致。模型内用的基线数据和事后结算用的基线数据必须是同一套算法生成的否则优化出来的“最优削峰量”与结算时的“响应收益”会对不上。做项目提案时建议业主提前跟电网公司或聚合商确认基线的具体算法把口径写进合同。6.3 模型输出与现场执行之间隔着一套MPC静态MILP优化算出来的是一条参考调度曲线但现场执行时光伏出力随云层变化、负荷随生产节奏波动实时数据和预测值之间总会有偏差。如果直接把离线优化结果下发给设备执行往往运行不了几个小时就会出约束越限。我在现场项目的处理方式是把离线MILP改造为滚动优化每5到15分钟用最新预测数据重新求解一次未来4小时到24小时的调度问题但只执行第一个时段的指令下一次滚动刷新。这就是模型预测控制MPC的经典思路。结构上仍然是前面建立的MILP框架只是把预测数据更新和求解流程做成闭环。这样做的好处是碳交易和DR的所有建模工作在离线优化中完全有效滚动求解只是重复调用同一套模型不用重写。6.4 给做落地项目的同行三点建议第一把碳价、弹性系数、排放因子这些参数全部做成可扫描的输入模块汇报时展示的是不同场景下的收益区间而不是单个固定数值。模型结论如果被“某一组的参数”绑架说服力会大打折扣。第二先在小规模系统上验证机制再放大规模。很多团队一上来就建模天府新区级的多园区互联系统变量几十万个模型调参困难最后连收敛都费劲。先把单园区模型跑透再往区域级扩展效率高得多。第三针对业主汇报时把结论表述成“在XX碳价、XX需求响应参与率条件下该项方案相对基准方案可降低总成本X%”而不是直接说“能省多少钱”。这类项目受机制参数和外部条件影响太大任何绝对化的收益承诺都是给自己埋雷。最后再分享一点个人体会。这几年做下来我发现这类项目的技术天花板往往不在算法精度上而在对“机制参数”的理解深度上。碳配额发放规则、电网排放因子口径、需求响应基线认定每一样都比求解器选型更容易左右最终结论。先花时间把这些参数的来源和敏感度摸清楚再去优化模型少走很多弯路。
返回列表