“同样的园区、同样的负荷曲线,把碳交易机制和需求响应同时放进优化模型之后,日运行成本反而比不考虑碳约束时低了接近8%,碳排放降了11%。”——这是我最近在做一个工业园区类综合能源系统优化项目时得到的一组仿真结果。这类结果能出现,不是因为碳价给得高,而是因为需求响应提供了“低成本的灵活性”,让系统在碳约束下不必硬切机组,而是顺着价格信号把柔性负荷挪到了低碳时段。
这个题目听起来很学术,真落地时牵扯的东西其实特别具体:负荷怎么分、碳配额怎么算、各种机组功耗特性怎么收敛到同一个优化框架里、需求响应信号到底作用在哪一层。这篇文章就围绕“碳交易机制下考虑需求响应的综合能源系统优化运行”,把建模思路、求解过程、参数整定和踩过的坑全部拆开讲一遍。适合正在做园区级能源规划、微电网调度、综合能源系统方向研究或工程落地的朋友参考,哪怕你只是刚接触这个概念,照着文里的建模路径也可以把基础框架搭起来。
1. 整体设计与建模思路:为什么是“碳交易加需求响应”一起考虑
先捋清楚这个问题最初从哪来。传统综合能源系统的调度目标很简单——保证电、气、冷、热负荷供给,追求运行成本最低。那时候天然气的价格就是“电改气”“气改电”的唯一指挥棒。但碳交易机制引入之后,系统的每一度外购电、每一立方米天然气都带上了碳排放属性,成本函数里面凭空多出一项“碳成本”,而且这个成本并不是线性恒定值,配额缺口越大,边际碳价还可能阶梯上升,于是原本最优的“气电比例”立刻被打破。
但单纯把碳成本塞进目标函数,系统也不是不能运行。问题出在灵活性上:如果可再生能源渗透率较高,某几个时段光伏或风电大发,传统基荷机组无法快速压出力,系统只能弃风弃光,或者靠购买高碳电来应对瞬时负荷爬坡。储能设备能缓冲一部分,但储能容量有限、投资高,没有哪个项目敢把电池容量配到削峰填谷全包。这时候,需求响应的价值就浮出水面了——它相当于一种藏在用户侧的“虚拟储能”,通过价格信号把用户的部分负荷从低碳时段挪到高碳时段,或者从高电价时段挪到低电价时段,用行为改变替代物理储能。
这就是为什么碳交易机制下考虑需求响应的综合能源系统优化要一起做:碳交易给系统设定了“排放边界”,需求响应则在这一边界内提供了最廉价的调节手段。两者不是两个独立模块的简单串联,而是在同一个优化问题中通过“实时负荷曲线”和“碳排放约束”耦合在一起。你可以把系统理解成一个跷跷板,一边是能源供给侧(燃气轮机、锅炉、储能、电网交互),另一边是需求侧(电、热、冷负荷),碳交易机制在中间放了一个天平砝码,需求响应负责调节两侧的平衡点。
实际建模的时候,我习惯把整个问题拆成三层:第一层叫资源层,收集园区里所有可调度设备和物理参数;第二层叫耦合层,用能量母线模型把电、气、热、冷四种能量形式串起来;第三层叫市场层,这里写碳配额约束、碳交易成本、需求响应补偿以及价格弹性系数。优化算法只在第三层跑,出来的结果再回代到资源层去验证设备出力是否在可行域内。
这个分层思路的好处有两条。一是模型逻辑清楚,改需求响应参数或者碳配额参数时只动市场层,不会扯到设备物理模型;二是方便调试,如果结果出现“设备出力越界”之类的异常,可以快速定位是哪个层的约束写错了,而不是在一大堆耦合方程里翻来覆去。
1.1 为什么不能把碳交易简单看作“多了一项成本”
太喜欢把问题简单化的人会直接把碳交易写成“目标函数加一项碳价乘排放量”,跑出来的结果大概率是错的。为什么?因为碳交易机制的实际约束至少包含三层逻辑:初始配额分配方式决定了你的免费排放空间,实际排放与配额的差值决定了你要买还是卖,如果采用阶梯碳价(超额越多碳价越高)则排放量的边际惩罚是分段的。这还没算配额是可以跨期储存的、CCER可以抵消一部分等机制。
我在仿真里试过两版碳交易建模。第一版是线性碳价:碳排放超过配额的部分,统一按每吨60元购买。结果优化器倾向于把排放压到刚好低于配额一点点就停止,因为再往下减排省下来的碳成本是固定的,但可能要多开昂贵的低碳机组或者损失部分可中断负荷,边际成本不划算。第二版采用了阶梯碳价:配额缺口在0到10吨区间内碳价60元/吨,10到20吨区间内90元/吨,超过20吨部分120元/吨。模型表现就完全不同了,它会主动把配额缺口控制在前一两个阶梯内,哪怕需要付出一点需求响应补偿,也比跨越阶梯划算。
这套阶梯价格设计不是拍脑袋,它模仿的是国内试点碳市场对控排企业的约束逻辑——超额越多惩罚越重。你在自己建模时,不妨把这个阶梯函数用分段线性化引入目标函数,这样既保留了非线性惩罚的引导效果,又能让整个模型仍然落在混合整数线性规划的框架内,求解效率比直接上非线性求解器快得多。
1.2 综合能源系统里需求响应“能响应的东西”比想象中多
行业内谈到需求响应时,第一反应通常是“用户少用电”。但在综合能源系统里,需求响应远比单纯削减电负荷要丰富。按负荷响应特性分类,通常可以分成价格型和替代型两大类。价格型需求响应指用户根据分时电价、实时电价调整自身的用能时段或用能强度,典型例子是电动汽车充电负荷从晚高峰平移到后半夜、工业车间的部分工序避开尖峰时段。替代型需求响应则利用了多能互补的特点——同一个用能需求可以用不同的能源品种满足,比如建筑采暖既可以用燃气锅炉,也可以用热泵,或者用电锅炉;厨房炊事既可以是天然气也可以是电。当各种能源的价格、碳排放属性发生变化时,用户或系统运营商可以在不降低用能质量的前提下切换能源品种。
这个“替代”属性是综合能源系统最独特的机会。纯电网里需求响应只能让用户少用或挪用电,综合能源系统里还能让用户“不改变总用能需求,只改变能源来源”。我在项目中处理一个食品加工园区时,发酵罐的保温负荷是连续性的,传统削峰对它无效,但发酵罐的蒸汽既可以从燃气蒸汽锅炉来,也可以通过电蒸汽发生器实现。在光伏大发时段把一部分蒸汽负荷切换到电制蒸汽,相当于把天然气消耗量压低,碳排随之下降;在气价低、光伏不足的夜间时段切回燃气锅炉,运行成本更低。模型中用一个0到1的连续变量表示电制蒸汽承担的热负荷比例,再配合能源价格信号,就实现了替代型需求响应的建模。
所以需求响应建模要面对的是一个多维负荷空间:电负荷可切、热负荷可平移、冷负荷可替代、气负荷可转换。不同类型负荷的响应时间常数不一样,经济补偿机制也不一样,建模时需要分别刻画,绝不能搞一个笼统的“负荷削减比例”一把抓——那样算出来的响应潜力会严重失真。
1.3 项目整体技术路线
就当前这个仿真来说,技术路线可以概括成四步。第一步,收集园区建筑和系统的全年日负荷数据、可再生能源出力预测曲线、分时购电价格和天然气价格,形成基础数据包。第二步,根据当地碳交易规则确定基准线配额核算方法与碳价阶梯,建立碳成本子模型;同时根据历史用电行为数据标定各类负荷的价格弹性矩阵和替代响应成本曲线,形成需求响应子模型。第三步,以总运行成本最小为目标,把能量平衡、设备出力上下限、储能SOC约束、碳排放配额约束放在同一个混合整数规划框架里求解,得到各机组出力计划、购电计划和负荷调整计划。第四步,对结果做碳流分析,识别出园区内碳排强度最高的节点和时段,反向验证需求响应策略是否真正把高碳时段的负荷压了下来。
这套技术路线的核心创新点不在于某一种算法有多新,而在于把“碳约束”和“需求侧灵活性”同时内嵌到调度计划里,每一次设备启停和负荷转移都会同时核算它的经济成本和碳成本。从结果看,这一调整能让系统在几乎不牺牲用户舒适度的前提下,把可再生消纳率提高5到8个百分点,同时把碳配额缺口控制在最低阶梯内。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 需求响应核心建模:先给负荷分类,再决定怎么“响应”
前面说了不同负荷的响应特性差异很大,所以建模的第一步不是写公式,而是对负荷做分类。我自己的习惯是把系统内负荷划分为三类:刚性负荷、可转移负荷、可替代负荷。刚性负荷指对连续性和实时性要求极高的生产工序,比如某些医药车间24小时不能停的低温环境;可转移负荷指时间上具有一定弹性的需求,比如空调的预冷、储热水箱的提前加热、电动汽车充电;可替代负荷则指可以在不同能源品种之间切换的需求,比如采暖、蒸汽、炊事。
三类负荷的建模方法不一样。刚性负荷在优化问题里就是一个已知的时序参数,不需要额外添加变量。可转移负荷需要用“转移量”和“转移成本”来描述——提前启动或者滞后启动产生的时间惩罚。这个最典型的实操案例是办公楼中央空调的蓄冷策略:晚间低谷电价时段开启制冷机组向蓄冷水罐蓄冷,白天用冷时优先放冷而不是开主机,负荷曲线被完整地从峰段移到了谷段。只要蓄冷罐容量足够且冷损失可控,这类负荷可以做到零舒适度损失,是最优先调用的需求响应资源。
可替代负荷则需要引入“能源替代比例”变量。比如一个车间的热水需求是每小时2吨、温度65度,这个需求本身不能被削减,但产生热水的方式可以是燃气锅炉、空气源热泵或电锅炉,三者对应不同的一次能耗成本和碳排放系数。在优化模型里,这部分热负荷可以被分解为多个技术路线的出力之和,每个技术路线都有独立的效率和运行成本,优化器自然会根据24小时的电价、气价、碳价变化动态分配各技术路线的承担比例。
在这里还要再补充一层:无论是可转移负荷还是可替代负荷,用户不会无偿参与。所以模型中必须设计需求响应补偿成本函数。补偿可以是容量补偿加电量补偿,也可以直接用二次函数表达“响应量越大,单位激励成本越高”。从实际项目标定来看,单位响应量的补偿成本通常是阶梯递增的,前5%的负荷调整用户基本无感,几乎不需要额外经济激励;调整到10%到20%时就需要支付可观的补偿金;超过30%就开始影响正常生产经营,多数用户不愿继续参与。优化器天然会倾向于先调用便宜的响应潜力,再调用贵的,因此需求响应成本曲线写得准不准,直接决定了优化结果里需求响应被启用的深度。
2.1 价格型需求响应的弹性矩阵参数整定
价格型需求响应的数学模型核心是弹性系数矩阵。简明地说,负荷变化率与价格变化率存在相关性,对角线上是自弹性系数,表示同一时段价格变化对负荷的影响;非对角线是交叉弹性系数,表示j时段电价变化对i时段负荷的影响。负荷移峰填谷的效果主要就靠交叉弹性实现——晚高峰电价升高,部分用户把负荷推迟到夜间低谷,就体现为高峰时段负荷下降、低谷时段负荷上升。
自弹性和交叉弹性的数值如何标定,是实操中最容易“自欺欺人”的地方。行业内常用做法是基于历史负荷曲线和分时电价做回归分析,但很多园区系统运行时间短、历史样本少,往往只能参考同类用户典型值。我的经验是:工业用户的自弹性系数通常在-0.1到-0.3之间,交叉弹性在0.02到0.1之间;居民用户自弹性稍高一点,商业用户因为空调负荷占比大、舒适度敏感,自弹性反而较低。如果你没有实测数据,宁可用保守值也不要拍脑袋放大参数,因为弹性系数放得太大,优化器会算出用户几乎“随电价起舞”的夸张响应曲线,这在实际中根本不可能实现。
网格化灵敏度测试也很有必要。把弹性系数从0.05到0.5按步长扫一遍,观察系统总成本和负荷峰谷差的变化趋势,找出结果的拐点区间。如果优化结果对某个弹性系数特别敏感、稍微调一点就剧烈波动,那说明模型在这个参数附近处于病态状态,这时候需要回到数据源头重新校准,而不是继续用这个系数跑后续仿真。
2.2 替代型需求响应写成约束条件
替代型需求响应的建模更偏约束条件而非目标函数。我的做法是构造一个需求侧“多能源输入-单一用能需求输出”的转换矩阵,把热力、冷力等终端需求与多种能源输入耦合起来。
以采暖季的园区热负荷为例:假设每天9点到18点办公楼的采暖热负荷约10MW,这部分负荷可以是CHP机组余热供、燃气锅炉直接供热或者电锅炉供热,三种技术的单位热成本各不相同。优化器会结合24小时的电价、天然气价格、碳价以及各设备的运行效率算账:光伏大发的中午时段电价便宜,电网电的隐含碳排放也相对低,就多让电锅炉承担热负荷;晚间气价相对平稳但电价飙升,就让CHP机组提高热电比,用余热承担更多热负荷;后半夜谷电时段进一步加大电锅炉出力,同时把热量存进蓄热罐留到早晨用。
这个场景里的“替代”变量可以定义成单个设备承担热负荷的比例,也可以定义成设备的启停状态和出力大小。由于替代型响应往往涉及设备组合状态,模型里会混入二进制变量,问题类型就从线性规划升级为混合整数线性规划。好消息是,CHP+燃气锅炉+电锅炉的基础组合的变量规模并不大,Gurobi或Cplex求解24小时场景(以1小时为间隔)通常几秒钟内都能收敛,不需要上启发式算法。
2.3 用户满意度约束不能丢
每当我给学生讲需求响应建模,都会强调一件事——你的模型不管预测到多大的可调负荷潜力,最终用户还是会用脚投票。为了在优化模型中体现这一点,通常需要设置用户满意度约束:转移后的负荷曲线与原负荷曲线的偏差不能超过一定比例,或者某些类型负荷的全天用电量和热量必须守恒,不能因为价格信号就让用户“这一天少洗一次澡”。
比较实用的约束有三类。一是可转移负荷调整量的上下界约束,例如某工序的用电量最多平移2小时;二是全天能量守恒约束,同一类负荷在优化前后的总用电量或总用热量必须相等,模型只能平移不能消灭负荷;三是温度舒适度区间约束,针对暖通空调类负荷,典型做法是把室内温度保持在22到26度的允许范围内,再通过建筑热惯性模型把制冷功率与房间温度耦合起来,实现“负荷预冷”或“温度微调”型的柔性控制。第三类约束会让模型增加一系列建筑热动态方程,计算量上来了,但对结果的合理性提升非常明显。
3. 碳交易机制建模与排放核算要点
碳建模是整个项目里规则最硬核的部分,也是不同项目间差别最大的地方。在进入优化目标函数之前,我需要先理清碳排放从哪来、配额怎么给、交易价格怎么定这三件事。
首先,综合能源系统的碳排放来源通常有三块。第一块是外购电力隐含的碳排放,由购电量和电网平均碳排放因子相乘得到,这个因子每个区域不同而且逐年下降;第二块是天然气等化石燃料在系统内直接燃烧产生的排放,CHP机组、燃气锅炉都算这类;第三块是其他逸散排放,例如SF6开关设备泄漏等,这类在园区级优化里通常忽略不计。如果系统里还有P2G设备把多余电力转化成天然气或氢气,这部分转化产品的碳归属问题就相对复杂,项目初期可以先不引入,或者只把它当作降低购气量的负碳技术处理。
然后是配额核算。国内碳市场对控排企业的配额分配有两种常见方法:历史强度法和基准线法。历史强度法根据企业自身历史碳排放强度下降率确定配额,相当于鞭打快牛,越早进行节能改造的企业越容易配额紧缺;基准线法以同行业先进排放水平为基准,排放强度低于基准就产生盈余配额,高于基准就要买配额。园区综合能源系统的优化目标如果是中长期碳资产管理,最好优先采用基准线法来指导设备改造方向,因为它给的是行业对标激励,减排技术的回报率更清晰。
3.1 基准线法下配额怎么给
在项目里,我采用的配额核算可以写成这个形式:系统总配额等于供电量乘供电基准排放强度加上供热量乘供热基准排放强度。这个公式的本质是为系统的“产品”设定一个允许排放上限——你发一度电、供一吉焦热都有一个基准排放值,把每个产品的量算出来乘以基准强度,再加总就得到配额。
这里的“产品”口径要非常小心。供电量是卖给用户的电量,不含厂用电和网损;供热量是供热系统出口处供给热网的热量。如果把厂用电也算进去,你的配额会偏大,看起来碳约束很宽松,实际就失去了碳交易机制对运行方式的引导作用。我实际跑出来的经验是:配额口径偏差保守估计会在5%到15%之间浮动,足以改变优化器在“外购电”和“自产电”之间的取舍,这是建模中最容易被忽视的水分。
基准排放强度通常参考当地碳交易管理办法或者行业温室气体核算指南查找。如果没有现成数据,可以用既有系统的历史平均碳排放强度做一个近似,再按每年下降2%到3%来设定后续年度的基准。例如示范园区所在地电网排放因子0.581吨/兆瓦时、燃气机组排放因子约0.2吨/兆瓦时的条件下,基准线定在供电基准0.42吨/兆瓦时、供热基准0.11吨/兆瓦时是一个相对合理的初始输入。
3.2 阶梯碳价:让减排的边际收益逐渐放大
实际碳市场中,配额缺口越大,单位配额的价格往往越高,这就是所谓阶梯碳价。为什么要用阶梯模型而不是一个固定碳价?原因是固定碳价下的优化结果容易走极端——如果碳价在60元/吨左右浮动,系统可能因为低估减排价值而选择完全不削减排放,反正罚款可预期;或者出现“为了减排不计成本”的激进运行策略。阶梯碳价的优势在于边际减排成本是一个递增曲线,优化器自然会平衡每个阶梯上的减排收益与响应成本。
我通常会设置三个阶梯:第一阶梯内配额缺口按基础碳价购买,第二阶梯碳价上浮50%,第三阶梯碳价再上浮100%。这段惩罚梯度不需要特别精确,它的作用更多是引导优化器不把全部碳缺口压到某一个时段,而是分散到全天多时段协同减排。举个例子,假设傍晚峰值时段因为燃气轮机满发导致碳排放集中攀升,只要阶梯碳价存在,系统宁愿提前在午后调用蓄冷、蓄热设备降低晚高峰用电,也不愿意等到晚高峰时让燃气轮机超发再支付高阶梯碳价。
分段线性化处理技巧:引入多段买碳量变量组合,每段有自己的上限和价格,把所有段变量加起来才是总购买量,这样一来目标函数里碳成本就是分段线性的,可以用MILP轻松求解。注意阶段变量顺序要加约束保证低阶梯用满之后高阶梯才会启动,否则优化器可能直接选择“跳过便宜的阶梯买贵的碳”,给出的结果明显失真。
3.3 配额不足时CCER的引入与边界
配额不足时实际项目会优先考虑购买CCER来抵消部分排放。CCER的引入让模型多了一个变量:可用CCER量、CCER价格以及使用上限(通常是配额缺口的5%到10%)。从经济学角度看,CCER本质上就是一个排放权补充池,它的存在让系统在极端场景下不至于因为碳市场流动性不足而被迫停机,提高了运行的弹性。
但是CCER进入模型会引入一个非线性和逻辑问题:它的价格和配额市场价格不一定相等,而且使用CCER有上限比例约束。更隐蔽的问题是,碳市场中出售CCER的减排项目可能本身就与园区的可再生能源、生物质利用等活动有交叉,如果边界划分不清楚,可能出现“同一个减排量被卖给两个控排企业”这种重复计算问题。做园区碳资产管理时务必把CCER来源项目的核算边界、计入期和签发状态都核查清楚,仿真模型里就算不做太细,也应在配额缺口较大的算例中加一个CCER价格上限约束,防止优化器把CCER当成无限廉价减排来源。
4. 优化运行模型的目标函数与核心约束怎么搭
4.1 目标函数:多类成本同一个口径加总
整个优化问题的目标是:在满足用户冷热电负荷需求的前提下,最小化系统总运行费用。总运行费用由以下几部分构成:购电费用、购气费用、碳交易成本、需求响应补偿成本、设备运维成本。
公式展开比较长,但完全可写成一个线性表达式。购电费用是各时段购电功率乘以该时段分时电价;购气费用按天然气的体积量与气价计算;碳交易成本要分三种情况讨论:实际排放量低于配额时有碳收益(卖出盈余配额的收入),超过配额时有碳支出,实际模型里常用两段非负变量或者干脆引入分段函数转化来覆盖。需求响应补偿成本中,如果采用价格型DR,激励补偿由用户侧削减或转移的负荷量确定;如果采用激励型DR合同,则在预测场景中参与响应的固定容量也计入费用。
我在项目中特别在意的一点是:所有成本项的口径必须统一。有的设备运维成本按“单位发电量”计算,有的按“单位运行小时”计算,有些负荷转移的补偿按“户次”测算,不统一成同一个能量计量单位,优化器就会错乱。这里我的做法是全部换算成“元/千瓦时”或者“元/吉焦”,基于能量流的统一调度模型后期调整非常方便。
4.2 核心约束:电热平衡、设备边界和储能动态
约束条件是整个优化模型的骨架。最基本的约束是电力平衡和热力平衡。电力平衡方程会比较直观,发电设备出力加外购电力加储能放电,需要等于电负荷、电锅炉耗电、蓄热罐充电等因素的总和。热力平衡类似,CHP余热、燃气锅炉产热、电锅炉产热、蓄热罐放热要等于热负荷与蓄热罐充热之和。如果模型扩展到冷负荷,还会有一个制冷机组的电力消耗与制冷量之间的转换约束。
设备出力上下限约束对每个设备都需要建立。燃气轮机的电出力区间有最低技术出力限制,CHP机组的热电比可能在一定范围内连续可调,蓄电池的充放电功率分别有上限,且不能同时充电和放电,储能SOC在调度周期始末要一致。储热罐除了容量约束外,还要考虑散热损失系数,一个不够细致的地方在于很多文献为了降低复杂度直接忽略散热损失,导致蓄热罐在长周期调度里被反复“无损耗充放”,优化结果明显偏乐观。加入一个每小时1%到3%的散热系数后计算出的蓄热策略更接近实际。
此外,如果模型里含有P2G设备、电转热设备、燃气轮机启停组合,则耦合变量和0-1变量大增,约束矩阵的稀疏性也变复杂。这时候建议先做模型预求解,删掉全天都不可能启动的设备组合,能大幅压减求解时间。对于小时级分辨率的24小时调度问题,变量总量通常在几千到几万个之间,成熟的商业求解器不用任何高级算法就能在几十秒到几分钟内得到全局最优解。
4.3 可交易机制的耦合约束写法
碳交易机制不会单独出现在目标函数里,它与系统的运行约束之间还有一层手拉手的耦合关系。第一个直接的表现是碳排放量表达式把购电量和天然气耗量引入到碳账户中。第二个就是如何让“碳排放量不超过配额”从硬约束变成软激励——通常是用碳交易买碳量的变量来填充缺口:实际排放等于基准配额加上买碳量减去卖碳量。买碳量和卖碳量不能同时为正,需要加互斥约束。
关键点在于这个碳约束是“事后平衡”的:优化器先安排运行计划,然后根据总量去核算碳配额缺口。但由于运行计划和碳排放量共用同一个购电、购气变量,优化器会内在地调整运行方式。实际上在一个MILP框架里,这种事后约束会被转换为“每个时间点的排放速率同时满足”的制约。
如果你需要做月度或年度的碳资产管理而不是单日调度,就要把“配额缺口分摊到日”的策略也考虑进来。短期调度通常按日核算碳配额,但一个月的配额可能存在某几天盈余、某几天缺口。建模时可以把日历期的排放在目标里按日累计,在月度级别设置统一结算点,这样的周期耦合会让模型不再短视地逐日压缩排放,而是放在更长周期里统筹。
5. 算例设计、求解过程与结果分析
理论铺垫够了,回到具体算例。搭建一个典型园区综合能源系统仿真模型。系统描述如下:包含2台燃气轮机热电联产机组(单机容量1.5兆瓦)、1台燃气锅炉(2吨/小时)、2台电锅炉(单台0.5兆瓦)、一套300千瓦/600千瓦时蓄电池、一个500千瓦/2兆瓦时蓄热罐、以及额定容量为1兆瓦/0.5兆瓦的本地光伏和风电。电网与园区之间可实现双向购售电,但作为保守设置,暂不启用余电上网。园区典型日的电力负荷峰值约3.2兆瓦、热负荷峰值约2.1兆瓦,时间分辨率为1小时,调度周期24小时。
电价采用一般工商业分时电价:峰段1.05元/千瓦时、平段0.65元/千瓦时、谷段0.33元/千瓦时。天然气价格2.6元/立方米,热值按35.3兆焦/立方米折算。碳价基础水平为60元/吨,配额采用基准线法,供电基准排放强度按0.42吨/兆瓦时计,供热按0.11吨/兆瓦时计。需求响应的自弹性系数取-0.2,交叉弹性系数取0.03,可转移负荷占比设定为总负荷的12%。
5.1 四种工况横向对比
仿真做了四组对照工况。
工况A是不加碳交易约束也不启用需求响应,只有基本的经济调度。这种工况下系统的运行目标只有买电买气成本最小,电锅炉几乎只在谷电时段开启,白天光伏大发时段负荷还在高位,系统被迫从电网买高价电,天然气的碳排放被完全忽略。
工况B是只加碳交易约束但不启用需求响应。碳价使得燃气轮机的发电成本上升,模型不敢让CHP机组满发来供应晚高峰高额负荷,部分负荷转移到购电,而购电隐含巨大碳排,这样折腾下来的结果是——碳排放略降,但运行总成本反而比工况A高不少,这就是没有需求响应配合时“碳约束惩罚”的直观体现。
工况C是不考虑碳交易但启用需求响应,用分时电价引导用户转移负荷。削峰填谷效果明显,系统总购电成本下降了,但具体的转移策略只盯着电价的“峰谷差”,并没有顾及到碳排放的时空差异,于是部分负荷转移到了碳排放强度更高的时段,虽然便宜但不低碳。
工况D就是本文这套完整模型,碳交易约束与需求响应同时参与优化,目标函数既有碳成本又有负荷调整补偿,价格信号与碳信号联合调度。
下表汇总了四种工况的主要运行指标。
| 工况 | 总运行成本(万元) | 碳排放总量(吨) | 可再生能源消纳率 | 日峰谷差(兆瓦) |
|---|---|---|---|---|
| A 无碳无DR | 14.36 | 19.18 | 91.2% | 2.36 |
| B 有碳无DR | 15.02 | 17.55 | 89.6% | 2.44 |
| C 无碳有DR | 13.87 | 18.26 | 94.7% | 1.68 |
| D 碳交易+DR | 13.24 | 15.62 | 96.8% | 1.42 |
看数据前要说明:这组数据不追求精确复现真实市场水平,主要是定性演示机制之间的相互作用趋势——不同省份电价和碳配额方法输入进去,趋势一致但数值必然不同。但即便在一个简化场景里,“碳加DR”工况相对其他基准的成本下降、碳排放下降、消纳率提升是可以复现出来的,这就足够验证机制本身的有效性。
5.2 晚高峰时段的运行细节解读
把工况D的晚高峰时段(17点至21点)单独拉出来看,优化器一共做了四件事。第一,17点左右蓄热罐开始放热,热负荷更多由蓄热承担,燃气锅炉出力往下压,这样可以少烧一点气,也就少产生一点碳排放。第二,18点到20点的晚高峰电负荷通过需求响应的价格信号削减了约0.4兆瓦,冷冻水循环泵和部分可延时启动的辅助设备被推后到22点之后。第三,光伏收工后,CHP机组从较低出力水平爬升,承担基础电负荷和热负荷,由于它同时发电和供热,综合能效比从电网购电加燃气锅炉分产更高,在碳约束下也有优势。第四,19点半到20点半这个时段,系统的实时边际碳排放量达到全天峰值,按碳价折算后超过60元/吨的配额基准线,因此优化器安排了蓄电池在这段放電,而不是等到22点谷电时段再放。用户侧看到的是“晚高峰电价贵且碳排放因子高,智能充电桩自动推迟充电”,系统层看到的是“碳成本叠加电价之后,电池和需求响应同时动作”。
如果你只看“电价最低”来做需求响应,肯定安排蓄热电锅炉在23点到次日7点之间烧热蓄热,但看完工况D的实际结果,你会发现蓄热罐在后半夜也并没有“满充”——因为再往后多看几个小时,凌晨的风电出力更高,纯电负荷又偏低,蓄电池和蓄热罐如果提前充满,反而没有空间消纳凌晨时段的多余风电。这就是24小时周期优化比“独立时段优化”更科学的原因。
5.3 结果验证思路与灵敏度扫描
把运行结果做两步校验。第一步是把优化得到的设备出力反向代入原始物理模型,检查热网管道的传输功率是否超过上限、CHP机组的爬坡约束是否满足——这一步能发现模型简化掉的那些约束是否存在隐患。第二步是灵敏度扫描:将碳价从40元/吨逐步抬升到120元/吨,观察需求响应启用深度和系统碳排放总量的变化曲线。低碳价区间内需求响应启用深度变化不大,主要靠储能和机组优化;碳价超过70元/吨后,需求响应启用的曲线开始快速上升,说明价格信号开始“击穿”用户的参与门槛;到100元/吨以后,负荷转移比例接近可调潜力的上限,曲线进入饱和段。这种分阶段特性说明需求响应潜力存在明确天花板,工程规划时不要把它的贡献规划得超过实际可调空间。
6. 实际项目中踩过的坑与排查技巧
模型本身不难,真正让人头大的是工程数据与模型假设之间的磨合。这里整理六个实际项目中最常遇到的问题,每条都是实打实踩出来的。
6.1 需求响应的弹性矩阵参数拍脑袋
最典型的问题是直接把某种“典型用户弹性系数表”套用在自己的园区上,结果优化结果强烈失真。没有历史数据做回归分析时,我的做法是小范围做现场实验:连续两周提前一天发布次日分时电价,并观察用户负荷相对基准曲线的偏移,计算实测弹性。没有条件做实验的项目,至少要去咨询用户侧的配电负责人,弄清楚高峰期能切走多少设备、切多长时间。别怕麻烦,需求响应潜力调研省下来的时间会在后续调试里加倍还给你。
6.2 碳配额口径不一致
“供电量”到底含不含厂用电,“供热量”指的是热源出口还是用户入口,都是常见歧义点。如果模型一边按出口口径算配额,另一边碳排放核算却把厂用电和管网热损都算进去了,会造成系统“不明不白”地配额紧缺,优化结果里出现大量高价买碳和极端削减负荷,和实际管理情况完全不符。解决方案是设计碳核算表时对每一个排放源设置单独一行,最后汇总。宁可表格啰嗦点,也不能把口径混着算。
6.3 储能约束没有闭合导致第一个周期失真
如果蓄电池SOC起始值是固定的,但一天结束后没有约束回落到同一水平,优化器会把初始SOC当“免费能量”用完,结果第一天的运行成本虚低、储能出力异常。修复方法很直接:增加SOC末态等于初态的约束。对于连续滚动优化场景,则可以采用“末态SOC等于初态SOC加上一个规划的变化量”的方式,避免每一个优化窗口都从零电量开始。
6.4 碳排放因子随时间的动态变化被忽略
不少电网的碳排放因子在不同时段差别很大,夜间风电大发时电网的实时碳排强度低,晚高峰则因为燃煤机组爬坡顶负荷而飙升。仿真初期套用全年平均碳排放因子,直接导致P2G设备本该在夜间低谷制氢却跑到了白天高负荷时段,碳减排效果被严重低估。正确的做法是尽量采用分时碳排放因子曲线,把“绿电时段”属性写到数据文件里,和目标函数中购电成本联动分析。
6.5 负荷转移又造成新的尖峰
需求响应安排负荷转移时若只转移总量却不考虑用户的时段偏好,会导致转移后某个时段出现多个用户“约好了一样”同时启用设备,形成新的人造尖峰负荷。模型里通常要加一个“时段负荷上限约束”:任何时段转移后的净负荷都不允许超过原始峰值的95%。这样即使多个用户同时响应,也不会给配电网带来新的压力。
6.6 求解时间爆炸:先别急着换算法
问题规模一大,MILP的求解时间可能从几秒暴涨到几十分钟。排查看三个地方。第一是看有没有“大M约束”把Big-M值取得过大,过大的M会严重恶化线性松弛效果、拖慢分支定界收敛速度;第二是看有没有冗余变量没有预先消除,比如某台设备在冬季场景下完全不出力,可以先固定变量;第三是看约束条件中是否有线性化后产生的多个连续小变量,这些小变量可以通过变量代换聚合成大块结构,做起来后模型求解性能提升明显。
配一个排查速查表:
| 异常现象 | 可能原因 | 处理办法 |
|---|---|---|
| 负荷转移高度集中 | 交叉弹性偏大或缺少时段上限 | 校核弹性参数,加净负荷峰值约束 |
| CHP机组频繁启停 | 缺少最小启停时间约束 | 添加机组最小运行/停机时间约束,或加入启停成本 |
| 蓄电池SOC曲线剧烈波动 | 充放电效率设置不合理 | 以实际充放电循环效率为基准修改 |
| 碳价变化但调度结果不变 | 碳配额过于宽松 | 逐步收紧基准排放强度重新标定 |
| 模型求解时间过长 | Big-M取值过大或约束冗余 | 缩小M值,压缩冗余约束和变量 |
最后再分享一个实际做法
做这类优化项目久了,我最大的体会是:别急着把模型做复杂。先用一个不含任何需求响应、不含碳交易的基础经济调度模型跑通,把它作为基准Case。第二版加入碳交易约束但不加DR,看看系统为了满足碳约束会多花多少钱,这部分差异就是“碳成本推动的灵活性需求”。第三版再加入需求响应,看它能把碳成本带来的损失挽回多少。三步走下来,每一步都能单独做技术经济分析,汇报和论文里都有话可讲。
另外一个小技巧:在碳价信号和电价信号同时进入模型时,把两个信号换算成同一单位放在同一张图里对比,会非常直观地告诉你某个时段系统到底是因为“电价贵”还是“碳排贵”在调整策略。很多时候结果出人意料——真正促使负荷转移的推动力,并不一定是电价峰值,而是碳价与电网排放因子叠加之后的高碳时段信号。这套“数同标、图同轴”的分析方法,值得在项目报告里保留下来。
