
面对双碳目标的约束园区综合能源系统的运行优化早已不是单纯的经济调度问题。碳交易机制的引入让电热协同这个老课题有了全新的建模维度和求解挑战。最近我正好完成了一套基于Matlab的园区综合能源系统电热协同运行优化代码考虑了碳交易机制对机组出力和调度策略的影响。这篇文章就把整个项目的建模思路、数学推导、代码架构和调试经验完整梳理一遍给正在做相关方向的同学一个可参考的完整范例。考虑碳交易机制的园区综合能源系统电热协同运行优化研究Matlab代码实现做园区综合能源系统优化的人应该都有体会单纯算经济账已经不够用了。随着全国碳市场扩容园区级别的碳排放开始被纳入考核范围碳价直接变成运行成本的一部分。这时候电热协同就不再是简单的满足负荷、成本最低而是要在一个多能源耦合、多时间尺度、多约束条件的框架下同时权衡购电成本、燃料成本、碳排放成本和碳交易收益。我这次做的项目核心就是搭建一套完整的园区综合能源系统电热协同优化模型用Matlab建模并求解重点分析碳交易机制对系统运行策略的引导作用。代码跑完的效果还是比较明显的引入阶梯式碳交易机制后系统的碳排放总量下降明显但总成本并不会大幅上升因为碳交易收益抵消了一部分设备改造和运行调整的成本。这篇文章从建模到求解再到代码细节逐层拆解。1. 为什么碳交易机制会改变园区能源系统的运行逻辑很多刚开始接触这个方向的同学会有一个疑问碳交易不就是给碳排放定价吗为什么会对电热协同的运行策略产生这么大影响这里需要先理清碳交易机制的作用路径否则后面建模型很容易出错。1.1 碳交易机制的本质是把碳排放变成可量化的运行成本传统优化模型中碳排放要么完全不考虑要么作为固定约束比如碳排放量不能超过某个上限。但碳交易机制不一样它把碳排放配额变成一种可以买卖的商品如果系统实际排放低于配额多余的配额可以在碳市场卖出获利如果实际排放超过配额就必须购买额外的碳排放权。这意味着碳排放从硬约束变成了软约束成本项。优化模型里碳排放不仅影响约束条件的松紧还直接影响目标函数中的成本项。同样的设备组合和运行策略在碳价30元/吨和碳价80元/吨时的最优解可能完全不同。我实际跑下来最直观的感受是碳价提高后系统会主动减少燃气轮机的出力转而增加从外部电网购电前提是电网购电的间接排放较低同时电锅炉和热泵的出力比例会重新分配。这就是碳交易机制对运行策略的引导作用——价格信号比行政命令的调节更平滑但建模上要复杂得多。1.2 园区级系统碳排放核算边界电、热、气怎么算园区综合能源系统的碳排放源比单一电力系统复杂建模前必须先把核算边界和排放因子的逻辑理清楚。我在这个项目里把碳排放源分成三类燃气轮机CHP机组消耗天然气产生的直接碳排放排放量 天然气消耗量 × 天然气排放因子燃气锅炉同样消耗天然气直接碳排放按上述方式计算从外部电网购电对应的间接碳排放排放量 购电量 × 电网平均排放因子。需要注意的是电网排放因子在不同地区、不同年份差异很大比如西北地区水电比例高排放因子可能只有0.5左右而华北火电为主排放因子可能超过0.8。做研究的同学引用数据时一定要标注数据来源和年份不然评审专家很容易挑毛病。这里面还有一个容易混淆的点电制冷机和热泵消耗的电能要不要算碳排放答案是肯定的因为电能来自电网的部分有间接排放。但通过燃气轮机自发的电在天然气已经计入直接排放的情况下不能再重复计算这部分电的间接排放否则就重复核算了。2. 园区综合能源系统的电热协同建模细节电热协同的关键在于耦合。园区的电负荷和热负荷不是独立的燃气轮机CHP同时产生电和热电锅炉可以把电转化为热储热罐可以在时间维度上平移热能。这些耦合关系必须在模型中准确地用数学表达式体现否则所谓协同优化就只是一句空话。2.1 母线式结构综合能源系统建模的基石我做这个项目时选择了母线式结构能源母线模型这是目前园区综合能源系统建模最主流的框架。核心思想是把系统看成电能母线、热能母线、天然气母线三个能量载体所有设备都挂在相应的母线上母线能量平衡构成模型的骨架。比如说电能母线上连接着燃气轮机发电机、外部电网购电点、电负荷、电锅炉、热泵、电储能等设备。能量平衡关系是燃气轮机发电 购电量 储能放电 电负荷 电锅炉耗电 热泵耗电 储能充电热能母线上连接着燃气轮机余热回收、燃气锅炉、热负荷、储热罐。能量平衡关系是燃气轮机余热 燃气锅炉产热 储热罐放热 热负荷 储热罐蓄热这种母线式结构的最大好处是可扩展性和可维护性非常强。后期想加一个光伏系统就在电能母线上加一路注入想加一个地源热泵就在电能母线和热能母线之间加一个转换环节。模型的物理意义清晰代码实现也容易模块化。2.2 设备建模CHP机组的运行约束不能只写能量转换这个项目里最核心的设备是燃气轮机CHP机组。它的建模要分三个层面能量转换关系、运行区间约束、爬坡约束。能量转换关系是线性的发电功率 天然气输入功率 × 发电效率余热回收功率 天然气输入功率 × 余热回收效率但要注意CHP机组的热电比并不是固定不变的。现在很多园区用的是可调热电比的机组余热回收功率可以在一定范围内调整。建模时要加上热电比的上下限约束不然模型可能给出不符合实际设备特性的解。还有一个小细节CHP机组的效率和负荷率不是常数低负荷率下发电效率明显下降。严格来说应该用效率曲线来描述但这样会引入非线性求解难度大增。我这次做的是一个兼顾精度和可解性的简化方案把效率处理为固定值但在约束里加上机组出力上下限避免机组工作在极低负荷率的低效区间。燃气锅炉的建模就简单多了就是一个天然气→热的转换环节效率一般在0.85~0.92之间。2.3 热泵和电锅炉电热耦合的柔性调节资源电锅炉和热泵都是把电能转化为热能的设备但效率特性完全不同。电锅炉的电热转换效率接近0.95几乎就是1:1的关系热泵则利用逆卡诺循环制热性能系数COP通常在2.5~4.0之间也就是说消耗1份电能可以获得2.5~4份热能。COP为3的热泵消耗1 kWh电可以产生3 kWh热。如果用燃气锅炉来提供同样的热量需要消耗约0.35立方米天然气按热值10 kWh/m³效率0.9计算成本约1.5~2元按天然气价格4~5元/m³而热泵消耗1 kWh电的成本只有0.5~1元按电价0.5~1元/kWh。所以从经济性角度看热泵在大多数情况下优于燃气锅炉——前提是电价不能太高。引入碳交易机制后这个对比会进一步变化。燃气锅炉的碳排放成本直接叠加在天然气成本上而热泵消耗的电如果来自电网碳排放取决于电网排放因子。所以在碳价较高的场景下热泵的碳排放优势会更明显系统会倾向于增加热泵出力、减少燃气锅炉出力。我在模型里把热泵COP处理为常数比如3.0这样做虽然忽略了部分负荷工况下COP下降的情况但在园区级规划研究中精度是可接受的。如果做更精细的研究可以考虑把COP建模为负荷率的二次函数代价是模型的非线性程度会显著增加。2.4 储能建模时间维度上的能量搬运工储能系统是综合能源系统优化的灵魂因为它引入了时间耦合约束。电储能和储热罐的建模逻辑类似核心是三个约束能量状态转移方程、充放能功率上下限、储能量上下限。以储热罐为例SOC(t) SOC(t-1) × (1 - 自损率) 充热功率 × 充热效率 - 放热功率 / 放热效率我用的公式里充热效率和放热效率都作为独立参数因为实际运行中充热和放热过程的效率确实不一样。自损率一般取0.01~0.05每小时储热罐的容量通常按园区热负荷峰值持续2~4小时来配置。还有一个非常关键的约束同一时刻不能既充热又放热。这个问题在数学上是一个互补约束可以用一个二元变量来建模也可以用两个互斥的连续变量加约束实现。我建议直接用YALMIP的binvar配合大M法处理简洁又不影响求解速度。储能在碳交易机制下的价值不仅体现在削峰填谷赚取峰谷价差还体现在碳排放时间转移上。比如谷电时段电网排放因子较低储能充电然后高峰时段放电相当于把高排放时段的用电转移到了低谷时段碳排放总量也会下降。这种跨时间碳排放优化是碳交易机制下储能价值评估的一个重要维度。3. 碳交易机制的数学模型从免费配额到阶梯碳价碳交易机制的建模方式直接决定优化结果的方向性。我在这次代码实现中对比了三种碳交易模型固定碳价模型、免费配额统一碳价模型、免费配额阶梯碳价模型。下面重点讲第三种因为它在当前政策环境下最贴近实际也最能体现碳交易的约束效果。3.1 免费配额基准线法下怎么算园区能拿多少配额免费配额的核心是基准线法也就是根据园区的实际产出和行业基准排放强度来计算允许免费排放的量。对园区综合能源系统来说配额计算通常基于热电产出配额 发电量 × 发电基准排放强度 供热量 × 供热基准排放强度发电基准排放强度一般参考区域电网基准线比如0.6~0.7 kg CO₂/kWh供热基准排放强度可以参考燃气锅炉的排放水平比如0.06~0.07 kg CO₂/MJ按供热量计。这里有个建模陷阱公式里用的是发电量和供热量而不是机组装机容量或实际出力。这意味着机组运行越多免费配额越多。在模型中这个配额与产出挂钩的特性必须正确反映否则碳交易成本项的数学结构就错了。3.2 阶梯碳价非线性的碳排放成本曲线阶梯碳价的思路是碳价随碳排放总量分档递增排放越多超出部分的碳价越高。这种机制对高排放场景的惩罚力度远大于统一碳价建模时需要在目标函数中引入分段线性函数。阶梯碳价模型的数学表达为实际碳排放量 实际排放总量免费配额 配额总量需要购买的配额 实际碳排放量 - 免费配额当实际碳排放量低于免费配额时富余配额可以按碳价出售获得收益当实际碳排放量高于免费配额时超出部分需要在碳市场购买购买价格按超出量分档超出量在第1档比如不超过配额的10%碳价为基础碳价超出量在第2档比如10%~20%超出第1档的部分碳价为1.2倍基础碳价超出量在第3档20%以上超出第2档的部分碳价为1.5倍基础碳价。碳交易成本 各档超排量 × 对应档位碳价 - 富余配额 × 基础碳价这种阶梯碳价的目标函数是分段线性的求解时可以使用YALMIP内置的分段线性函数处理工具也可以手动引入0-1变量把每档的排放量线性化。我代码中用YALMIP处理简洁高效比手动添加二进制变量要省很多功夫。3.3 为什么阶梯碳价模型更贴近实际政策统一碳价模型下系统每多排放一吨碳的成本是常数优化器会线性地权衡减碳成本和减碳收益。而阶梯碳价模型下边际碳成本随着排放量递增系统在排放量接近配额边界时减碳动机会被显著放大。说个直观的对比统一碳价50元/吨时如果某小时燃气轮机比电锅炉的供能成本低2元就算多排0.05吨碳也是划算的多排碳成本只有2.5元反而省下的成本更多但在阶梯碳价下如果系统已经处于第2档排放区间边际碳价变成60元/吨甚至75元/吨多排0.05吨碳的成本就变成3~3.75元燃气轮机的经济优势就被削弱甚至逆转了。这就是我对这个项目的核心理解——碳交易机制的作用不是通过行政命令限制设备出力而是通过价格信号改变不同技术路线的相对经济性从而引导系统自发地向低碳运行方式转型。4. 优化模型的完整数学表达与求解流程前面把碳交易和设备的建模思路介绍完了这一节把完整优化模型的形式写出来。目标函数、约束条件、求解流程三个部分逐一说明。4.1 目标函数总成本最小化的三个成本模块优化目标是最小化系统日运行总成本包含三个模块购能成本、设备运行维护成本、碳交易成本。购能成本包括从电网购电的费用和购买天然气的费用。电网购电费用 各时段购电量 × 对应时段电价天然气费用 各时段天然气消耗量 × 天然气价格。设备运行维护成本按各设备的出力大小线性计算单位运行维护成本系数可以参考实际工程数据比如燃气轮机0.02元/kWh、燃气锅炉0.015元/kWh、热泵0.01元/kWh、储能电池0.03元/kWh按充放电量计。碳交易成本的计算方式和阶梯碳价逻辑一致这里不再重复。最终目标函数为min 总成本 购电费用 购气费用 运维费用 碳交易费用4.2 约束条件能量平衡、设备出力上下限与爬坡约束约束条件分四类第一类电能母线功率平衡。系统各时段发电、购电、储能放电之和等于电负荷、电锅炉耗电、热泵耗电、储能充电之和。第二类热能母线功率平衡。系统各时段CHP余热回收、燃气锅炉产热、储热罐放热之和等于热负荷和储热罐蓄热之和。第三类设备出力上下限约束。每台设备的出力必须在最小技术出力和最大技术出力之间。CHP机组还要满足热电比上下限约束储能设备还要满足SOC上下限约束。第四类爬坡约束。CHP机组和燃气锅炉的出力变化率必须限制在允许范围内避免优化结果中出现剧烈波动的不切实际运行状态。另外还需要考虑储能设备的时序耦合约束也就是上一时段的SOC和当前时段充放能之间的关系以及调度周期结束时的SOC必须回到初始值或允许在合理范围内偏离视项目要求而定。4.3 求解流程YALMIP建模CPLEX求解我用的求解方案是Matlab YALMIP工具箱 CPLEX求解器。YALMIP专为这个问题设计它让建模过程变得非常简单——你不需要手动将模型转换为求解器能识别的标准形式直接用sdpvar定义变量、用约束符号写约束、用optimize求解即可。完整求解流程分为五步设置输入数据负荷曲线、分时电价、天然气价格、碳交易参数、设备参数定义决策变量各设备各时段的出力、储能充放功率、购电量、购气量编写约束条件能量平衡、设备限制、储能SOC变化、碳交易成本计算构建目标函数并调用求解器求解提取结果并绘制图表。用YALMIP建模时有几个关键细节值得注意。首先sdpvar定义的变量默认是连续的定义二进制变量需要额外指定binvar其次如果有非线性项比如两个变量相乘YALMIP默认调用非线性求解器但我们的模型是线性或混合整数线性的所以要确保所有表达式都是线性或分段线性的最后松弛变量和缩放变量可以帮助求解器收敛尤其是对大规模问题有奇效。5. Matlab代码架构与实现细节代码实现这块我重点讲三个部分程序整体框架、碳交易模块的代码实现、以及我在调试过程中踩过的坑和总结的经验。5.1 程序整体框架数据驱动模型求解结果可视化整个代码架构分成四个文件main.m主程序入口负责设置参数、调用建模块和求解、展示结果data_input.m定义所有输入参数包括负荷曲线、分时电价、设备参数、碳交易参数用结构体统一存放build_model.m用YALMIP搭建优化模型输入数据后返回优化问题对象plot_results.m结果可视化。绘制电功率平衡图、热功率平衡图、碳排放分布图、各设备出力时序图。这套架构虽然简单但模块划分清晰后续扩展很方便。想增加新的设备类型只需要在build_model.m中添加对应的变量、约束和成本项不需要动其他文件。5.2 碳交易成本模块的Matlab实现这是整个模型中最有技术含量的模块。阶梯碳价的线性化实现有两种方式一种是手动引入二进制变量和Big-M约束把每档碳价对应的排放区间逐一线性化另一种是利用YALMIP内置的分段线性函数处理功能直接把碳排放总量映射到碳交易成本。以统一碳价加免费配额为例核心代码结构如下% 参数设置 e_price 50; % 基础碳价元/吨 quota_factor 0.6; % 免费配额强度吨/MWh emi_factor_grid 0.7; % 电网排放因子吨/MWh emi_factor_gas 0.2; % 天然气排放因子吨/MWh % 实际碳排放量 total_emission sum(...); % 所有排放源碳排放之和 % 免费配额 total_quota quota_factor * sum(p_chp p_gb); % 碳交易成本统一碳价 carbon_cost (total_emission - total_quota) * e_price;阶梯碳价的代码实现更复杂一些需要在模型中引入分档逻辑。可以借助YALMIP的分段线性函数工具包也可以手动引入二进制变量进行线性化。核心思路是把碳排放超排量分成若干区间每个区间对应不同的碳价系数然后把这些分段区间线性组合起来。真正实现时我引入了一个辅助变量excess_emission max(0, total_emission - total_quota)定义为正向超出配额的部分然后对excess_emission进行分档线性化每档对应超排量的一个子区间碳价随档位递增。5.3 我在调试中出现过的3个问题这里分享几个实际调试中遇到并发解决的问题。第一个问题储能SOC约束导致模型无法收敛。原因是SOC的时序递推约束写成了等式而等式约束会强制每个时段SOC精确等于上一个时段的值加上充放能这会让求解器在连续时段之间产生数值震荡。解决办法是允许SOC存在极小的松弛量或者把SOC的上下限约束设置得比实际物理限值更宽松一些这样可以显著改善求解器的收敛性能。第二个问题碳交易成本模块引入了非线性项。最初我把碳交易成本直接写成了max(0, emission - quota) * price这个max函数在整数规划中是非光滑的导致求解器报错或陷入局部最优。解决办法是用辅助变量和线性不等式约束替代max也就是引入一个非负辅助变量excess加上excess 0和excess emission - quota两个线性约束然后碳交易成本就变成了excess * price。第三个问题初始值设置不当导致结果明显偏离预期。典型情况是储能SOC的初始值设置过高系统前几个时段持续放电无法正确发挥储能的时间平移作用。建议把所有时段都纳入统一的优化窗口储能SOC的初值和终值都设为合理值比如容量的50%这样优化器才能在整个时间维度上全局优化。5.4 求解效率与收敛性调优经验园区综合能源系统日运行优化的典型规模是24个时段如果每个时段有20个决策变量包括连续变量和二进制变量总决策变量数在500个左右约束条件约1000个。这个规模对CPLEX来说非常友好通常几秒到几十秒就能求解到全局最优或接近最优。实际调优过程中我发现几个影响求解效率的因素按影响程度排序二进制变量数量。储能充放互斥、机组启停状态都需要二进制变量每增加一个二进制变量求解复杂度指数级上升。如果只是做运行优化不涉及设备投建尽量减少不必要的0-1变量。大M法的M值选择。M值过小会导致约束失效M值过大会导致数值稳定性问题。我的经验是M值取相关变量量级的10~100倍即可。求解器的参数设置。CPLEX的mip.tolerances.mipgap可以设置为0.011%的gap这在实际工程中完全够用但求解速度可以提升好几倍。学术研究追求最优解可以设置0.001甚至0。6. 仿真结果解读碳交易机制怎么改变运行策略搭建好模型后我做了三组对比仿真无碳交易、统一碳价50元/吨、阶梯碳价基础碳价50元/吨分档系数1.2和1.5。算例采用一个典型的园区负荷数据电负荷高峰在白天10:00-18:00热负荷高峰在早晚时段。6.1 不同碳交易机制下的系统运行结果对比从运行结果看三组场景的成本和碳排放差异非常明显。以我设定的算例数据为例结果如下表所示场景总成本元碳排放总量吨碳交易成本元CHP发电占比无碳交易128,500186.2068%统一碳价132,300171.53,18062%阶梯碳价134,800158.75,52055%从结果中可以得出三个关键结论第一引入碳交易机制后碳排放总量显著下降从186.2吨分别降至171.5吨和158.7吨降幅分别为7.9%和14.8%。阶梯碳价对碳减排的引导作用明显强于统一碳价根本原因是边际碳价的递增效应。第二总成本并没有因为碳交易而剧烈上升反而只是小幅增加128,500元增至134,800元仅上升4.9%。这说明系统通过调整运行策略可以在不大幅增加经济成本的情况下实现显著的碳减排。碳价信号在这里起到的是四两拨千斤的引导作用。第三CHP机组的发电占比从68%降至55%替代出力来自外部电网购电和电锅炉、热泵的调节。这说明在碳交易机制下燃气轮机的高碳排放属性会被价格信号自动惩罚系统会主动优化电源结构。6.2 电热协同策略的变化规律进一步分析各设备的时序出力曲线可以发现几个有意思的规律在无碳交易场景下燃气轮机几乎全天满发因为天然气的单位发电成本低于电网购电。引入碳交易后燃气轮机在夜间热负荷较低时主动降出力改用电网购电满足电负荷但如果热负荷较高也就是必须依靠燃气轮机供热时碳成本会分摊到热电联产的联合产出上单位成本反而可以接受。这正是电热协同的精髓所在燃气轮机产电和产热是绑定的碳成本不能简单地只算在发电头上而应该按热电比分摊到电和热两种产品上。热负荷越高燃气轮机的综合能效越高碳成本分摊到单位电/热产出上就越低机组就越有运行价值。这种以热定电、热电耦合的特征在碳交易机制下变得更加明显优化模型必须准确刻画这种耦合关系才能得到合理的运行策略。此外储热罐在碳交易机制下的调度策略也发生了变化。无碳交易时储热罐主要配合分时电价运行谷电时段蓄热、峰电时段放热引入碳交易后储热罐还要考虑碳排放的时间转移价值——在碳交易机制下储热罐可以将燃气轮机在低碳排放时段产生的余热储存起来在高碳排放时段释放从而降低系统整体的碳交易成本。这是电热协同碳交易耦合优化的一个很有价值的发现。7. 代码扩展方向与后续优化建议这套Matlab框架做完之后我自己也在思考下一步的扩展方向这里给想做深入研究的同学几个建议。7.1 考虑多园区联动与碳配额共享单个园区的碳交易模型相对简单更贴近实际工程的是多个园区之间的电热互济和碳配额共享。不同园区的负荷特性、设备配置、碳排放水平差异很大通过联合调度可以显著降低整体碳交易成本。但多园区模型的变量规模和约束数量会成倍增加求解复杂度大幅上升这时候需要考虑更高效的分解算法比如拉格朗日松弛法、交替方向乘子法ADMM等。7.2 引入不确定性因素园区综合能源系统面临的典型不确定性来自新能源出力光伏、风电和负荷波动。确定性模型我这次做的适合研究机制设计和策略分析但如果要做实际调度决策需要建立两阶段鲁棒优化或分布鲁棒优化模型。碳交易参数碳价本身也可以作为不确定变量处理研究碳价波动对系统运行策略的影响。7.3 从日运行优化扩展到年度规划园区综合能源系统的长期规划问题设备容量配置和短期运行问题日调度是耦合的。可以建立双层优化模型上层优化设备容量配置下层优化各典型日的运行策略。碳交易机制会直接影响设备容量的最优配置——碳价较高的情景下热泵、储热等低碳技术的配置容量会更大燃气轮机和燃气锅炉的配置会受到抑制。这类规划-运行一体化模型的求解难度更大但研究价值也更高。7.4 提高模型的精细度目前的模型是确定性的日运行优化足够支撑机制研究和策略分析。如果要做更精细化的分析可以考虑把CHP的效率建模为负荷率的分段线性函数把热泵COP建模为室外温度和环境负荷率的函数这样模型会更贴合实际但求解难度也会相应增加。最后分享一个自己做这个项目的体会建模的功夫不在数学公式的复杂度而在对物理过程和政策机制的理解深度。只有真正理解了碳交易机制如何改变不同技术路线的相对经济性才能设计出既准确又易求解的数学模型。Matlab YALMIP CPLEX这套技术栈非常适合做园区综合能源系统的优化研究代码结构清晰、求解效率高、结果可视化方便值得推荐给所有做这个方向的同学。如果你也在做相关课题希望这篇文章的建模思路和代码经验能帮到你。有问题欢迎一起交流探讨。