
我们做园区综合能源系统优化调度最怕的就是各种听起来高大上的机制模型落到代码里却不知道怎么写。近期我刚好完成了一个项目在热电联供型综合能源系统中同时引入阶梯式碳交易机制与电制氢环节做全系统的经济化调度。题目念起来有点绕实际上拆开就是三件事碳排放怎么计价、氢气怎么参与调节、热和电怎么协同出力。今天把我的建模过程、求解思路、算例结果和踩坑经验整理出来给正在做综合能源系统、碳交易建模、氢能调度方向的朋友一个直接可以“抄作业”的参考。这篇文章适合三类人一是做园区级综合能源系统优化的研究生和工程师二是研究电制氢参与电力系统调节的从业者三是想搞清楚碳交易配额、碳价参数该如何设置的规划人员。项目不涉及高深数学核心是混合整数线性规划MILP配YALMIP和CPLEX就能求解我会把模型细节和参数选择原因讲清楚。1. 项目概述与整体设计思路这个项目的出发点很现实。一个典型园区综合能源系统里燃气轮机承担热电联供主力燃气锅炉作为热力备用新能源风机和光伏提供绿色电力但出力波动大弃风弃光时有发生。传统的经济调度只盯着购电、购气和设备运行成本碳排放约束被扔在一边。等到碳交易真正落地园区要是超排买配额的代价可不小。于是我把“阶梯式碳交易机制”和“电制氢”同时塞进优化模型要让系统在满足电、热负荷的前提下自行决策燃气机组发多少电、余电要不要制氢、氢是存起来还是卖给加氢站、热负荷缺口由燃气锅炉还是电锅炉来补。整个调度问题的核心目标是系统总成本最小包括购能成本、运行维护成本、碳交易成本和售氢收益。1.1 为什么必须做热电联合优化而不是电热分开调度很多初学者会问热电系统为什么不能把电网调度和热网调度拆开做原因在于燃气轮机是热电强耦合设备发电的同时必然产热热电比又是一个可以在一定范围内调节的变量。你要是单独优化电力可能让燃气轮机高负荷运行去卖高价电结果大量余热排空热力侧的锅炉还在烧天然气造成能级浪费。反过来只盯着热负荷又可能让燃气轮机顶着最大热出力运行发了用不完的电弃电率飙升。所以热电联供系统的优化调度必须在一个模型里同时看电母线平衡和热母线平衡。电制氢这个环节加入后耦合关系又多了一层电解槽是电力负荷但同时产出氢能氢燃料电池又是电力和热力的双输出设备。电、热、氢三条能量流交织在一起反而是这种多能耦合系统最值得优化的地方。1.2 阶梯式碳交易机制、电制氢、热电优化三者的关系这个项目的核心逻辑链是这样的阶梯式碳交易机制给燃气机组、锅炉的碳排放施加了一个分档递增的碳价信号排得越多边际成本越高系统就倾向于少用天然气、多用绿电和氢能电制氢给新能源提供了消纳出口把风电光伏大发时段的低价电转化为可储存的氢再用燃料电池在负荷高峰时放出来实现“电氢时空平移”。可以理解成碳交易机制是“指挥棒”电制氢是“工具”热电优化是“舞台”。碳价信号驱动系统去调整设备运行策略优先选择低排放技术路线电制氢提供跨时段的能量存储与再释放能力而热电优化则确保整个过程始终满足负荷需求且成本尽可能低。2. 阶梯式碳交易机制建模不只是“排碳付费”而是“多排多付”做碳交易建模最基础的就是实际碳排放量减去免费配额得到需要购买配额的缺口量再乘以碳价。但这里有个问题如果全系统只用一个固定的碳价那就是简单的线性成本项模型求解只要在目标函数里加一个碳排放量乘以碳价的项就够了起不到明显的减排驱动作用。阶梯式碳交易不一样它的核心思想是分段定价配额缺口越大碳价越高像个人所得税一样累进。这样系统如果大幅度超额排放碳成本呈非线性增长优化器就不得不重新权衡燃气机组出力甚至主动削减那些原本经济但高排放的运行方式。2.1 碳排放的计量范围先把碳排放的源头捋清楚。在这个项目里碳排放主要来自三块燃气轮机燃烧天然气产生的排放与发电功率和供热出力都有关系燃气锅炉燃烧天然气产生的排放用于补充热力缺口从外部电网购入的电能在生产侧产生的间接排放按电网平均排放因子折算。这里要注意电解槽消耗的电能如果是购来的实际上也带来了间接排放。但在配套大规模新能源的园区系统中我们通常会约定电解槽优先消纳可再生电力或者直接在模型里不加额外惩罚这个处理方式要看项目的边界设定。我这版模型把购电排放按系统总购电量统一计算没有额外区分电解槽的用电来源简化处理。天然气的碳排放因子可以取2.162 kgCO₂/m³或者按热值折算成0.202 kgCO₂/kWh。电网购电排放因子取0.581 kgCO₂/kWh约等于全国电网平均排放因子。这样系统总碳排放量的表达式就是多项出力变量乘以对应排放系数的线性累加。2.2 阶梯式碳交易成本的分段线性化设定免费配额E_base实际排放E_actual。当E_actual超过E_base时差额ΔE E_actual - E_base。阶梯式碳交易把ΔE划分为多段每段对应不同的碳价λ1 λ2 λ3。模型的目标函数里碳交易成本项就可以写成如下形式C_CO2 λ1 × ΔE1 λ2 × ΔE2 λ3 × ΔE3其中ΔE1、ΔE2、ΔE3表示差额落在不同区间的量。举个具体的例子假设第一阶梯上限是2000 kg第二阶梯上限是5000 kg第三阶梯不设上限碳价等级是200元/t、280元/t、400元/t。如果系统超额排放6000 kg那么碳成本就是C_CO2 200 × 2 280 × 3 400 × 1 1560元这里注意单位换算200元/t对应的是0.2元/kg所以200元/t× 2t中的数字要统一。我在实际建模中直接以kg为单位碳价换算成元/kg避免单位错乱。这个分段函数的引入需要在模型中添加辅助变量和约束来线性化。可以用Big-M法或者直接利用线性规划的凸包表达把每个阶梯区间的不等式约束写进去。关键在于要保证模型求解时ΔE1先填满才轮到ΔE2也就是满足累计性。用下面的约束序列实现0 ≤ ΔE1 ≤ d1 0 ≤ ΔE2 ≤ d2 0 ≤ ΔE3 ΔE ΔE1 ΔE2 ΔE3再配合目标函数中λ1 λ2 λ3的价格设定优化器自然会优先使用低价区间不需要额外的逻辑约束。这一步是整个碳交易建模的精髓我见过不少人在这一步把线性约束写成了非线性乘积导致求解器直接罢工。2.3 免费配额怎么定基准线法的实操经验免费配额的确定是碳交易建模中争议最大也最容易出错的地方。常见的做法是基准线法根据机组实际出力乘以行业基准排放强度得到免费配额。以燃气轮机为例可以取发电基准强度0.385 kg/kWh燃气锅炉的热力基准强度取0.06 kg/MJ或者按热效率折算。然后免费配额就是E_base 供电量 × 0.385 供热量 × 0.06这个做法的好处是配额跟产量挂钩机组出力越多免费额度也越多相对公平。但它的副作用是系统只要多发电就能多拿配额会导致优化器倾向于提高燃气轮机出力来换取免费配额反而增加实际排放。为了避免这种扭曲通常会设置一个配额上限或者像我做的那样把免费配额比例设为一个整体系数取80%乘以基准线配额这样既保留了激励作用又不至于让配额成为额外的发电鼓励。还有更严格的“总量-交易”模式即园区有一个固定的年度排放总量上限然后按月分配。这种方式更贴近国家碳市场的配额分配逻辑但用在日前调度模型中需要处理月度配额和日内出力的关系建模复杂度明显上升。我这个项目先用了基准线法后续可以扩展。3. 电制氢系统建模既是负荷也是储能还是电氢热耦合的粘合剂电制氢环节在传统综合能源系统里经常被简单处理成一个可调电负荷但这样做损失了很多有价值的运行特性。电解槽不只是耗电还连着储氢罐和燃料电池是一个具备时间和能量双重转移能力的单元。我把它建模成“电解槽 储氢罐 氢燃料电池 氢负荷”四个子模块统一调度。3.1 碱性电解槽的动态运行区间的特性处理电解槽我选用碱性电解槽模型这是目前工业应用最成熟、单位投资最低的技术路线。它有几个运行特性直接影响调度策略最小运行功率一般是额定功率的20%到30%低于这个值电解槽必须停机不能像电阻负载那样连续调节到零电堆效率随负载率变化在60%到80%负载率区间效率最高超过或低于这个区间单位制氢电耗都会增加冷启动到稳定产氢大约需要20到40分钟热启动会快很多但频繁冷启动对电解槽寿命影响大。在建模上我引入了一个二进制变量表示电解槽开停功率允许范围写成额定功率乘以最小负载率到最大负载率的连续区间。同时为了限制频繁启停目标函数里加入了启停成本项每次启动折算成一个固定费用。这样调度器在谷电时段开启电解槽制氢时不会因为下一时段电价涨了几厘钱就马上关掉造成开关机成本的浪费。制氢量的计算公式为m_H2 η_EL × P_EL × Δt / (低热值 × 1000)其中η_EL是电解槽效率P_EL是输入电功率Δt是调度步长低热值取33.3 kWh/kg。按实际经验碱性电解槽的制氢电耗大约在4.5到5.5 kWh/Nm³换算成单位质量大约是50到61 kWh/kg我取效率后反推大致是每千克氢气消耗约54 kWh电。这个参数区间在工程上比较可靠。3.2 储氢罐和氢燃料电池的协调运行储氢罐的模型相对简单就是一个带自损耗的能量存储单元类似于蓄电池用氢量平衡约束和容量上下限约束描述。要注意的问题是氢气储存有压力上限而且不能完全放空调度模型里要设置最低储氢量一般不小于容量上限的10%。氢燃料电池我采用的是质子交换膜燃料电池模型它输出电能和热能电效率约45%热效率约40%综合效率可达85%。在热电联供架构下燃料电池可以看作一个微型热电联产机组发电给园区负荷余热用于补充热网。调度上燃料电池的优势在于灵活性。相比燃气轮机动辄几十分钟的调节延时和冷启动限制燃料电池可以在分钟级启动和爬坡这让它非常适合在负荷高峰或电价高峰时段作为补充电源。氢气的来源就是白天风光大发时段电解槽储存起来的氢等于把波动的新能源电量转化为可调度的峰时电量这就是“电氢时空转移”的核心。3.3 制氢与热电联供怎么协同我设计系统的过程中最关键的发现是电制氢并不只是电力的“消费者”它还改变了热力侧的平衡关系。假设夜间谷电价格非常低电解槽全功率运行制氢大量设备散热和电解产生的废热也可以回收。在碱性电解槽中电能转化为氢能的效率之外还有相当比例的废热产生配合换热器可以把这部分热量送入热网。另一方面如果热负荷缺口较大而电价比较高氢燃料电池的余热也成了一个重要的热源。系统运行时燃料电池可以在电价高峰段启动同时贡献电和热减少燃气锅炉的天然气消耗也降低碳排放。这样一来电制氢不再是孤立的电负荷而是一个能同时影响电平衡、热平衡、碳平衡的柔性资源。4. 热电优化模型目标函数、约束条件与求解实现整个优化模型现在已经比较清晰了下一步就是把它写成标准的混合整数线性规划丢给求解器计算。这部分是整个项目的核心工程环节我把目标函数、约束条件和求解实现逐项说清楚。4.1 目标函数成本最小化框架目标函数是所有设备运行成本的总和包括天然气购气成本、外部购电成本、设备运行维护成本、碳交易成本、电解槽启停成本再减去售氢收益和给电网的售电收益。用文字表达就是min F F_gas F_grid F_om F_CO2 F_ss - R_H2 - R_ele其中F_gas是天然气费用F_grid是购电费用F_om是运维成本F_CO2是上面提到的阶梯碳交易成本F_ss是启停成本R_H2是卖氢收益R_ele是向上级电网售电的收益。燃气轮机、燃气锅炉、燃料电池都要消耗气或氢购气成本按设备耗气量乘以气价计算。购电费用涉及分时电价峰平谷三个时段不同价。我做了一个简化用阶梯式的分时价格峰段1.1元/kWh、平段0.7元/kWh、谷段0.4元/kWh。售电价格取峰段上网电价0.45元/kWh鼓励系统在新能源大发时余电上网但这部分收益往往低于本地用电的价值所以优化器更倾向于本地消纳。4.2 约束条件的几个关键点约束条件必须覆盖功率平衡、热功率平衡、设备出力上/下限、爬坡约束、储氢罐的动态方程、电解槽运行区间、碳交易阶梯的分段约束等。平衡约束是最基础的电功率平衡风光出力 燃气轮机发电 燃料电池放电 蓄电池放电 购电 电负荷 电解槽用电 电锅炉用电 售电热功率平衡燃气轮机余热回收 燃气锅炉产热 电锅炉产热 燃料电池余热 热负荷 热损耗这里的燃气轮机余热回收我直接用一个固定热电比系数来建模。实际项目中燃气轮机在部分负荷运行时热电比会变化为了兼顾模型精度和求解复杂度我用分段线性函数近似了不同负荷率下的热电比变化。这个处理比固定热电比更贴近实际也不会引入非线性。设备爬坡约束是热量和电力调度中不可忽略的约束尤其是燃气轮机。热电机组如果爬坡速度不够在热负荷波动大的时段就会跟不上所以我把爬坡率约束写为每15分钟不超过额定出力的20%换算成一个调度步长的功率变化上限。4.3 求解实现YALMIP CPLEX整个模型用MATLAB的YALMIP工具箱建模求解器选CPLEX 12.10。模型规模不算大设备节点十来个调度周期24小时每小时一个点决策变量包括连续变量和少量二进制变量属于小规模MILP一般十几秒内能求出全局最优解。遇到的一个坑是阶梯碳交易分段函数如果用嵌套的if-else逻辑写在YALMIP里非常容易报错或者生成难以求解的big-M表达式。正确做法是把分段区间写成独立的变量和约束直接拼进模型让求解器自己在目标函数里选择最优的分段组合。因为我设定了低价区间优先求解结果里碳交易量会按顺序填满低档位天然满足阶梯计费逻辑。如果MATLAB环境不方便用Python的Pyomo加GLPK或者Gurobi也可以模型表达式一模一样。只是电力系统习惯上用YALMIP比较多我周围做优化的同学基本都是这个配置。模型参数我做了个汇总表方便大家直接参考。设备容量效率/参数取值碳排放系数风机1.8 MW额定发电效率按功率曲线0光伏1.2 MW额定发电效率按光照曲线0燃气轮机1.5 MW电发电效率0.33热电比1.50.202 kg/kWh气燃气锅炉2 MW热热效率0.900.202 kg/kWh气电锅炉0.6 MW热热效率0.95间接电解槽1.2 MW制氢电耗54 kWh/kg间接氢燃料电池0.4 MW电电效率0.45热效率0.400储氢罐900 Nm³库容上限900下限10%05. 典型日算例三种场景对比算例是检验模型是否真正有效的试金石。我构建了一个典型冬季日的园区负荷数据和新能源出力曲线做了三组场景对比场景1是不考虑碳交易的传统经济调度场景2是在目标函数中引入单一碳价的碳排放成本场景3是本文的核心方案即阶梯式碳交易加上电制氢联合优化。三组场景用同一套负荷数据只改变碳定价方式和是否允许制氢结果差异非常明显。5.1 算例配置与输入数据园区日峰值电负荷3.2 MW日峰值热负荷2.8 MW。冬季日照较弱光伏出力中午最高到0.7 MW风资源较好夜间风力在1.2至1.8 MW之间波动。天然气价格按2.6元/m³对应的单位热值价格约0.27元/kWh。购电分时电价前面已经提到峰平谷分别为1.1、0.7、0.4元/kWh。碳交易参数设定为免费配额比例取80%配额基准为发电侧0.385 kg/kWh、热力侧0.06 kg/MJ。场景2的碳价取260元/t场景3的阶梯碳价为200元/t、280元/t、400元/t第一阶梯限额2 t第二阶梯限额3 t第三阶梯不设上限。这些参数会直接影响结果后面会做敏感性分析。5.2 结果分析碳排放、运行成本和弃风率三组场景的结果对比如下首先是碳排放总量。场景1完全不考虑碳约束系统碳排放最高约181.6 tCO₂。场景2引入单一碳价后碳排放下降到167.3 tCO₂降幅约7.9%。场景3加入阶梯式碳交易和电制氢后碳排放进一步降低到159.1 tCO₂比场景1低了12.4%比场景2又降低了4.9%。可以明显看到阶梯式碳价带来的差异化惩罚比单一碳价更能有效驱动减排。然后是运行成本。这里有一个值得注意的现象场景1的运行成本是39.7万元含购能成本和运维成本不含碳成本场景2是41.2万元含碳成本场景3是42.5万元含碳成本和售氢收益。表面看场景3的成本最高但算法上的差异更重要场景1如果同样支付碳排放成本实际总成本会比数字上高出一大截。把碳成本统一口径后场景3的总成本反而比场景2低约3.2%。这说明阶梯式碳交易机制能引导系统以更经济的方式完成减排任务。弃风率和弃光率也是重要指标。场景1弃风率15.2%因为夜间风电大时系统负荷消化不了又没有储能和制氢设备只能弃掉。场景3引入电制氢之后弃风率降到6.8%相当于少弃了超过一半的风电。制氢设备在夜间谷电时段开启了5个小时左右消耗低价风电和谷电产出的氢气一部分在早晨负荷上升时用于燃料电池发电另一部分作为商品氢外售单日售氢收益约1.8万元。5.3 敏感性分析碳价参数如何影响系统行为做完主算例我又针对阶梯碳价参数做了敏感性测试。把基础碳价从150元/t逐步提高到400元/t同时保持阶梯递增系数不变观察系统碳排放和电制氢出力比例的变化趋势。结果呈现明显的“阶梯效应”碳价在150到200元/t区间时系统对碳价变化不太敏感因为燃气轮机承担了必须的基础负荷碳价从200元/t提高到250元/t时碳排放出现一次明显下降原因是电解槽开始有经济动力在谷段运行燃料电池也在早高峰替代了部分燃气出力碳价超过300元/t以后碳排放下降幅度趋于平缓说明系统已经接近当前设备条件下的减排极限。这个规律给实际项目带来的启示是碳价参数不是越高越好存在一个“敏感拐点区间”。在这个区间内碳价微调能带来显著的减排效果超出之后再加大碳价边际收益递减反而增加系统运行成本。做政策模拟或者园区规划时可以先跑一遍敏感性曲线找到最合适的参数区间。6. 实操中常见的坑与处理建议模型和算例跑通之后真正花时间的是各种细节调试。这里分享几个我在项目中遇到的问题和解决方案希望能帮你少走弯路。6.1 碳排放配额算错结果全盘跑偏最初的版本里免费配额我直接按额定功率乘以基准值计算没有跟实际出力挂钩。结果优化器发现燃气轮机多发电可以多拿配额于是疯狂抬高燃气轮机出力把发出的大量剩余电力低价上网换来更多免费碳排放额度整体碳排放反而比基准场景还高。这个结果一看就有问题。后来改成按实际出力乘以基准强度的方式计算免费配额配额随出力浮动问题才解决。关注碳排放建模的朋友一定要仔细检查配额的计算逻辑基准线法的“线”必须跟实际产量绑定否则模型的激励方向是反的。6.2 电解槽频繁启停问题第一版模型没有加入电解槽的启停成本约束结果求解出来后电解槽在一天内启停了6次每次只运行1到2小时。表面上利用了低电价时段但实际上频繁启停对电解槽寿命的影响远大于节省的电费。解决办法是在目标函数中加入固定启停成本每次启动折算成800元。加入之后优化结果里电解槽只启停2次一次夜间谷段6小时一次午间光伏大发时2小时运行策略明显更合理。建议任何涉及柔性负荷的优化模型都要考虑设备实际启停约束和寿命成本否则求得的结果在工程上很难直接用。6.3 MILP求解时间过长怎么办模型引入了二进制变量之后求解时间从几秒钟膨胀到几分钟尤其是当我把储氢罐的SOC离散到每5分钟一个点时变量规模剧增CPLEX求解时间达到了25分钟。对于优化调度项目来说这个速度是不可接受的。我做了两个优化一是把调度步长从5分钟调整为15分钟变量规模缩小三分之二二是储氢罐的SOC状态不需要离散化直接视为连续变量。调整后模型求解时间从25分钟降到了12秒结果精度几乎不受影响。做MILP求解时先确认是否有变量真的必须离散化很多时候连续化处理并不会损害解的精度。6.4 碳价与氢价联动下的经济性判断还有一个容易被忽视的问题售氢价格并不是固定不变的。如果氢能市场需求旺盛售氢价格上涨系统会更倾向于多制氢、多外售甚至可能出现“用高碳电力制氢再把氢卖出去”的套利行为。表面上看系统收益增加了但实际碳排放可能不降反升。为了避免这个问题我在模型中加了一个约束制氢电量中来自可再生能源的比例不得低于60%。这样既保证了制氢的绿色属性也避免了系统通过电网购电制氢来套利的局面。做氢能相关优化项目时建议提前想清楚“绿氢”属性要怎么保障否则模型结果可能在碳排放指标上失真。最后再分享一点做这类项目的体会模型跑通之后我最大的体会是综合能源系统的优化真正难的不是数学建模而是把各种机制之间的耦合关系想清楚。阶梯式碳交易影响燃气机组的出力电制氢改变电力负荷曲线燃料电池又反过来影响热力平衡每一个环节调整都会通过电、热、氢三条能量链传导到全系统。只有把模型当成一个整体来迭代才能得到逻辑自洽、结果可信的调度方案。另外想提醒的是这类项目的参数数据一定要做敏感性分析。碳价、气价、氢价对结果的影响都非常大不同价格组合下系统的最优策略可能完全不同。别只看一组算例就下结论多跑几组参数组合把系统行为摸透你的方案才算真正站得住脚。