☰
考虑柔性负荷的综合能源系统低碳经济调度:模型与工程实践
2026/10/1 23:16:39 网站建设 项目流程

调度员最怕的不是设备出故障,而是负荷猜不准。我在做园区综合能源系统项目时,最扎眼的问题集中在下午两三点:光伏出力开始往下掉,空调负荷还在往上顶,热电联产机组要留多少余量、储能什么时段放、什么时段充,全靠前一天排好的调度计划硬撑。这个问题的正式说法,就是今天要聊的“考虑柔性负荷的综合能源系统低碳经济调度”——柔性负荷不再是等着被喂电的“终端设备”,而是可以按调度指令削减、转移用能的调节资源;低碳经济调度,则是让整个系统在碳排放约束和用能成本双重压力之下,找到更优的运行轨迹。

这个方向适合三类人看:做园区、微电网、虚拟电厂能量管理的工程师,研究综合能源调度的研究生,以及想搞清楚“为什么现在的调度越来越难排”的运维人员。文章后面会依次拆解概念、数学模型、算例求解和实际踩坑,尽量做到看完能直接用起来。

1. 为什么调度问题突然变得“复杂”了

1.1 传统调度思路已经罩不住现在的系统

以前做调度,本质是“源随荷动”:负荷曲线是刚性的,先把明天每小时的用电量预测出来,然后安排机组出力和购电计划去追这条曲线。系统只有电源侧有调节手段,负荷侧就是一堆“只能看不能动”的刚性需求。

换成综合能源系统之后,事情变了。系统里同时有电、热、气多种能量流,热电联产机组发一度电会带出一定比例的热,燃气锅炉又要消耗管网天然气,光伏出力又受天气影响。这种电-热-气强耦合意味着,你不可能单独看电平衡或者单独看热平衡,必须把整个系统的运行状态放到同一个优化问题里一起算。

更麻烦的是低碳约束加进来了。前几年做经济调度,目标函数只有运行成本。现在要算碳,就得把购电对应的间接排放、燃气机组燃烧产生的直接排放全部纳入考量。如果系统参与碳交易,还要考虑配额、碳价、超额排放成本。这些因素全部进入优化模型之后,原来的“机组组合+经济调度”框架就不够用了,必须升级成带碳排放项的优化模型。

1.2 柔性负荷:从“服从指令”到“参与调节”

我在项目里经常被问到一个问题:柔性负荷到底柔在哪里?其实这个概念可以类比成一根弹簧。刚性负荷是铁棍,你怎么推它都不动;柔性负荷是弹簧,你推一下它会变形,松手之后还能恢复。调度系统要做的,就是在用户可接受的范围内,把弹簧的压缩量当成一种可用的调节资源。

柔性负荷的价值在于它把调节能力从电源侧扩展到了需求侧。传统调度里,如果下午出现高峰,只能靠燃气轮机加出力或者储能放电来顶住。有了柔性负荷之后,调度可以把一部分非关键用电挪到夜间,或者把空调负荷在短时间内压一压,源荷两侧共同发力。

这带来的计算复杂度是实打实的。负荷不再是给定的常数序列,而是带着上限、下限、总量守恒、时间窗等约束的决策变量。优化问题从单纯的电源分配,变成了电源和负荷联合优化。这也是为什么近年来相关研究大量出现——模型的维度和复杂性都上了一个台阶。

2. 概念拆解:柔性负荷与低碳经济调度的底层逻辑

2.1 柔性负荷的三种典型形态

柔性负荷不是一种东西,至少可以分成三类,建模方式完全不同。

可削减负荷:典型代表是空调和照明。夏天空调负荷占园区总负荷的20%-30%,把温度设定值上调1-2摄氏度,短时间内削减10%-15%的功率是完全可行的,室内温度还在人体舒适范围内。这种负荷的模型很简单:削减量从0到上限之间连续可调,代价是给用户一定补偿。

可转移负荷:典型代表是电动汽车充电桩、洗衣房、部分间歇性生产设备。这类负荷的特点是“总量不变、时段可变”——一天的用电量是固定的,但可以在允许的时间窗内灵活分配。比如电动车充电,只要第二天早上之前充满,具体凌晨几点充对用户影响不大。

可平移负荷:典型代表是工厂的大型批次设备,比如电窑、压缩机。这类负荷一旦启动,整个工艺曲线必须完整跑完,不能拆零散,所以模型上要引入二进制变量,表示“要么整体平移,要么不动”。

在综合能源系统调度里,最常见的是可削减负荷和可转移负荷的组合。两者各有各的约束特征,削减负荷本质是对功率上限做文章,转移负荷则是对电量在时间轴上的重新分配做文章。建模时把这两类分开处理,问题会清晰很多。

2.2 碳交易机制下的“两本账”

谈低碳调度,很多人以为就是“少用电、多省钱”,这在工程上并不准确。低碳经济调度在碳交易机制下,其实要同时算两本账:一本是真实的物理碳排放,另一本是碳配额和碳价形成的经济账。

物理碳排放主要来自两块。第一块是外购电力对应的间接排放,因为电网里大量是火电,你买一度电,相当于在远端产生了一定量的碳排放;第二块是燃气轮机、燃气锅炉燃烧天然气产生的直接排放,这个按天然气消耗量和排放因子一乘就算出来了。

碳配额是另一回事。常见的分配思路有历史法和基准线法。历史法是按你过去几年的实际排放量打折给额度,逐年收紧;基准线法是按行业平均先进水平给定额,你用清洁技术,排放低于基准线就有富余配额可以卖,高于基准线就要掏钱买。

调度模型会把碳排放的“经济价格”放进目标函数。碳价一高,系统就倾向于减少外购电、多开燃气机组,或者多利用光伏和储能。实际项目里,碳交易成本占总运行成本的比例通常只有1%-3%,但它的边际影响一点都不小——它改变的是各设备之间的相对竞争力。碳价上涨5倍,调度结果中购电量可能下降10%-15%,这种敏感性在算例里看得很清楚。

2.3 低碳与经济:一对需要平衡的指标

低碳和经济在很多场景下是冲突的。为了降低碳排放,你可能要牺牲一部分经济性,比如多开效率并不高的本地机组来替代煤电占比高的网购电;反过来,如果只看成本,碳排放大概率会超标。所以低碳经济调度本质是一个双目标优化问题。

处理双目标有几种常规做法。最简单的是加权求和,把成本乘以权重、碳排放乘以权重然后合并成一个目标;常用的是碳排放成本化,即通过碳交易机制把碳排放自动折算成成本;还有一个思路是约束法,给定一个碳排放上限,在这个硬约束下最小化运行成本。

我个人的建议是:工程上直接用碳排放成本化,因为它最自然,也最好向用户解释——“你参与了碳交易,超过配额的部分要花钱买,省下来的配额还能卖,所以系统会自动权衡。”如果是在做研究或者规划方案,需要输出Pareto前沿,那就要用ε约束法或者多目标进化算法,比如NSGA-II,把不同碳排水平下的最优成本曲线透出来。

3. 调度模型搭建:目标函数、约束条件与参数整定

3.1 目标函数怎么表达“低碳又省钱”

调度模型的目标函数说穿了就是“一天的总花费最小”。这里的花费包括五项,每一项都要明确建模:

购电成本:分时电价乘以每个小时的购电量。峰谷平三个阶段电价差异很大,这一项通常是成本大头。

购气成本:天然气单价乘以每小时消耗量,包括热电联产机组和燃气锅炉两部分。

运维成本:各台设备的单位运维成本乘以对应出力。光伏很便宜,储能因为有循环损耗,运维成本要舍得给高一点。

碳交易成本:碳排放总量减去免费配额,差值乘以碳价。如果系统排放低于配额,这一项就是负值,相当于卖碳收入。

柔性负荷补偿成本:用户让你削负荷、转移负荷,不能白白配合。通常按削减或转移的电量给补偿,补偿单价要介于峰谷价差和用户舒适度代价之间,定太高了不划算,定低了用户不接受。

目标函数写出来大致是这样:

[ \min \ C_{total} = \sum_{t} ( \lambda_{buy,t} P_{buy,t} + \lambda_{gas} F_{t} ) + \sum_{t} \sum_{i} c_{om,i} P_{i,t} + \lambda_{CO2} ( E_{total} - E_{quota} ) + \lambda_{flex} L_{flex,t} ]

其中 (\lambda_{buy,t}) 是分时电价,(P_{buy,t}) 是购电功率,(\lambda_{gas}) 是气价,(F_t) 是燃气耗量,(c_{om,i}) 是设备运维成本,(E_{total}) 是总碳排放,(E_{quota}) 是免费配额,(\lambda_{CO2}) 是碳价,(\lambda_{flex}) 是柔性负荷补偿单价,(L_{flex,t}) 是参与调节的负荷量。

注意 (\lambda_{CO2}(E_{total}-E_{quota})) 这一项很关键。如果只写“碳排放最小”而不给它定价格,求解器根本不知道怎么在成本里权衡碳排放;给了碳价之后,碳排放就变成了一个有价格信号的经济量,模型自动会去比较“多买一度电的排放成本”和“多用一方气的排放成本”。

3.2 约束条件:热-电-气耦合里最容易出错的地方

目标函数负责指引方向,约束条件负责圈定可行域。综合能源系统调度里,约束特别容易翻车,翻车点往往在耦合环节。

电功率平衡:任意时段,购电、光伏出力、CHP电出力、储能放电之和,必须等于基础负荷加转移负荷增量减去削减负荷。这个约束不含糊,漏任何一项都会导致电量不平衡。

热功率平衡:CHP回收热、燃气锅炉产热、蓄热罐放热之和,要能满足热负荷。这里特别要注意CHP的热电耦合关系。很多简化模型直接写“热出力等于1.2倍电出力”,这句话只在一部分运行区间成立,工程上最好把CHP的可行域画出来,用电-热出力可行域约束替代固定比例约束,模型可信度会高很多。

储能约束:电池SOC递推方程、充放电功率上下限、初始与终端SOC一致性。蓄热罐同理。我见过最典型的错误是只约束了容量,没约束SOC的终端状态,结果优化结果里电池总是在最后时段把电放光,看起来很“划算”,实际第二天没法继续运行。

柔性负荷约束:可削减负荷不能无限削,要有上限比例;连续削减时间要有上限,比如空调削减连续不超过3小时;可转移负荷要满足总量守恒,即所有时段转移量的累加和为0,同时每个时段的转移量不能超过该时段原始负荷的一定比例。这些约束如果没有,优化结果很容易出现“把所有负荷在午夜集中到同一小时”的极端情况。

碳排放计算约束:碳排放等于购电量乘电网排放因子,加上燃气耗量乘燃气排放因子。如果碳排放是通过辅助变量计算的,记得把这个等式放进约束集,别漏。

3.3 关键参数取值逻辑

模型建完之后,参数取多少直接决定结果靠不靠谱。几个核心参数我说一下经验值:

  • 分时电价:一般工商业用户典型三段式,峰时1.0-1.1元/kWh、平时0.6-0.7元/kWh、谷时0.3-0.35元/kWh。实际应从电费单反推,别套别人地区的电价。
  • 天然气价格:工业用气约2.6-3.0元/立方米,热值按9.8 kWh/立方米折算。
  • 购电排放因子:不同地区电网差异很大,0.55-0.7 tCO2/MWh都见过,取数时要用电网公司公布的最新因子。
  • 燃气排放因子:约1.9 kgCO2/立方米,相对稳定。
  • 碳价:全国碳市场目前大致在80-120元/吨区间。做方案时建议做敏感性分析,看碳价高低对调度策略的影响有多剧烈。
  • 弃光弃风惩罚系数:要高于峰时段购电价,否则模型会在高电价时主动弃光,这不符合实际运营逻辑。

还有一点容易被忽视:单位统一。功率用MW、电量用MWh、气量用m3、成本用元、碳排放用t,五套单位混在一起,不提前统一量纲,会导致目标函数里某些项数量级悬殊,求解器精度完全被吃掉。我一般会把成本和碳都折算到“万元/日”,再检查一遍各项系数是否都在同一个数量级。

4. 算例实操:一个园区IES的日前调度全流程

4.1 系统结构与原始数据整理

用一个典型工业园区做算例。系统包含2 MW光伏、2.4 MW热电联产机组、2台2 MW燃气锅炉、1 MW/2 MWh电池储能、2.5 MWh蓄热罐。园区日最高电负荷5.8 MW,日用电量约105 MWh,日热负荷约45 MWh。分时电价取峰时1.05元/kWh、平时0.63元/kWh、谷时0.32元/kWh,天然气2.6元/m3,碳价80元/t。

设备关键参数如下:

设备关键参数数值
光伏装机容量2 MW
CHP机组电出力范围0.6-2.4 MW
CHP机组热电比1.2
燃气锅炉单台热出力上限2 MW
电池储能功率/容量1 MW / 2 MWh
蓄热罐容量2.5 MWh
购电排放因子电网平均0.7 tCO2/MWh
燃气排放因子天然气燃烧1.86 kgCO2/m3

基础负荷曲线按典型工作日取:夜间2.6-3 MW,早晨爬坡,午后最高5.8 MW,晚间回落。光伏出力按晴天典型数据,日发电量约10 MWh。柔性负荷设定可削减比例上限15%,可转移负荷总量8 MWh,单时段转移量不超过基础负荷的15%。

4.2 MATLAB+Yalmip建模与求解过程

这类日前经济调度,我首选MATLAB+Yalmip+Gurobi的组合。Yalmip是建模层,Gurobi是底层求解器,专门解混合整数线性规划和二次规划,速度和稳定性都远好于免费的求解器。

核心建模代码示意如下:

%% 决策变量 Pbuy = sdpvar(1, 24, 'full'); % 购电功率 Pchp = sdpvar(1, 24, 'full'); % CHP电出力 Hgb = sdpvar(1, 24, 'full'); % 燃气锅炉热出力 Pess = sdpvar(1, 24, 'full'); % 储能出力,正为放电 Esoc = sdpvar(1, 25, 'full'); % 电池SOC Lcut = sdpvar(1, 24, 'full'); % 可削减负荷 Psh = sdpvar(1, 24, 'full'); % 可转移负荷变量 %% 约束 Constraints = []; % 电功率平衡 Constraints = [Constraints, Pbuy + Ppv + Pchp + Pess == Lbase - Lcut + Psh]; % 热功率平衡 Constraints = [Constraints, 1.2*Pchp + Hgb + Hts_dis == Hload]; % CHP运行区间 Constraints = [Constraints, 0.6 <= Pchp <= 2.4]; % 储能SOC递推,初始0.5,终端回到0.5 Constraints = [Constraints, Esoc(2:25) == Esoc(1:24) - Pess/1]; Constraints = [Constraints, -1 <= Pess <= 1]; Constraints = [Constraints, Esoc(1) == 0.5, Esoc(25) == 0.5]; Constraints = [Constraints, 0 <= Esoc <= 1]; % 可削减负荷:不超过原负荷15% Constraints = [Constraints, 0 <= Lcut <= 0.15*Lbase]; % 可转移负荷:总量守恒,单时段转移不超15%基础负荷 Constraints = [Constraints, sum(Psh) == 0]; Constraints = [Constraints, -0.15*Lbase <= Psh <= 0.15*Lbase]; %% 目标函数 Objective = sum(tou.*Pbuy) + gas_price*sum(Fchp + Fgb) ... + sum(cost_om.*abs(Pess)) + co2_price*(Etotal - Equota) ... + flex_price*sum(Lcut); %% 求解 ops = sdpsettings('solver', 'gurobi', 'verbose', 1); optimize(Constraints, Objective);

这段代码简化掉了机组启停的二进制变量和CHP耗气量的非线性折算关系,真实项目里还需要加上运行状态约束。但骨架就是这样:决策变量定义清楚、平衡约束写全、目标函数把每一项成本都放进去,剩下的交给求解器。

建模时有个经验:先把所有约束写好,跑一版“无柔性负荷、无碳约束”的纯经济调度做基准。这个基准模型如果都跑不通,后面加了柔性负荷和碳成本只会更复杂。基准模型能解出来,再一层一层加约束,出了问题也能快速定位。

4.3 四种情景的结果对比与解读

分别按四个情景做对比:

  • S1:无柔性负荷参与,不考虑碳交易,纯经济调度;
  • S2:有柔性负荷参与,不考虑碳交易;
  • S3:无柔性负荷参与,考虑碳交易成本;
  • S4:有柔性负荷参与,同时考虑碳交易成本。

计算结果如下:

情景总运行成本(万元/日)碳排放(t/日)柔性负荷削减量(MWh)购电量(MWh)
S16.5368.1063.0
S26.2465.95.258.5
S36.6163.4057.8
S46.3861.26.855.3

从表里读出来的信息比单纯看成本有意思得多。S2对比S1,柔性负荷参与后,约5.2 MWh的高峰负荷被转移到谷时段,购电成本下降,总成本下降了约4.4%。同时碳排放也降了3.2%,原因是峰时购电减少,谷时购电增加,而峰时电网的碳排放因子通常比谷时高。

S3对比S1,加入碳交易成本后,碳排放从68.1降到63.4,降幅约6.9%,但总成本反而比S1高了0.1万元。这说明减碳是有代价的,系统牺牲了一部分经济性来降低碳排。

S4是综合效果最好的方案,碳排放61.2吨,比S1降了10.1%,成本6.38万元,介于S3和S2之间。关键是S4比S3便宜了2300元/日,碳排放还更低。原因很简单:柔性负荷给了系统更大的调节空间,让它在响应碳价格信号时不用走极端,而是通过削峰填谷和调整设备出力结构来平衡成本和碳排。

还有一个不错的分析习惯:把碳价从0、40、80、120元/吨做敏感性扫描,看系统碳排放量和总成本的变化曲线。你会发现碳价从0涨到80时,碳排放下降非常明显;但从80涨到120时,边际减排效果显著减弱。这个拐点往往就对应着“现有柔性负荷容量和电源结构下,进一步减碳需要付出更高代价”的位置。有了这个分析,后续是做节能改造、加储能容量还是扩柔性负荷规模,决策依据就清楚了。

5. 常见问题与排查技巧实录

5.1 求解不收敛、无可行解怎么办

这个坑我在项目里踩过不止一次。模型参数看着都没问题,但求解器报出来的现象五花八门:有的提示“Infeasible problem”,有的干脆陷入超时。排查顺序很重要,分享一套我现在固定的排查流程:

第一步,先跑最简单的基准模型。只保留电功率平衡、设备出力上下限、储能SOC递推,把柔性负荷、碳成本、热平衡全部暂时拿掉。如果这个模型都无解,说明基础数据有问题,优先查负荷曲线是不是某时段填错了、设备出力区间是不是设反了。

第二步,把热平衡和CHP耦合约束加回去。此时要重点检查蓄热罐和燃气锅炉的参数。一个典型错误:热负荷峰值大于CHP最大热出力加锅炉最大出力之和,无解是必然的。

第三步,加柔性负荷约束。查一下可转移负荷的总量守恒是不是和时段上限约束冲突了。比如转移总量设定8 MWh,但单时段转移上限只有0.7 MWh,24小时最大只能转移16 MWh,这倒不会冲突;但如果时间窗被额外限定在4小时内,那最大转移量只有2.8 MWh,小于总量约束要求的8 MWh,必然无解。

第四步,如果模型有二进制变量,看求解日志里的gap值。长时间不下降,多半是M参数设置不当或者Big-M量级太大。把大M值从十万缩到几百,求解速度往往能提升一个量级。

5.2 柔性负荷“伪转移”和新峰谷倒置

柔性负荷参与调度之后最讽刺的一个现象就是:把高峰负荷搬到谷时,结果在谷时形成了新的负荷高峰,这就是“峰谷倒置”。我第一次跑算例时,优化结果把所有可转移负荷一股脑排到了凌晨3点,因为那个时段电价最低,完全合理但完全没有实操性——变压器容量受不了,用户也受不了。

解决办法有两个层面。第一是约束层面,给每个时段的转移负荷设上限比例,这个比例通常取10%-15%,防止负荷在单一时段过度集中;还可以给可转移负荷限定可用时间窗,比如办公园区的充电桩只允许在10:00到次日8:00之间分配,不允许出现凌晨4点给会议室充电这种无意义安排。

第二是价格层面,在目标函数里加一个“用户舒适度/不便度”惩罚项,转移量越大,惩罚单价越高。这样做的好处是模型自动会在省电费和产生不便之间找平衡,不会出现为省几块钱把负荷安排在最不舒服时段的极端结果。实际工程里,柔性负荷补偿单价的设置直接影响用户响应率,定得太低用户不响应,定得高优化模型又倾向于少用柔性负荷,需要反复试算。

5.3 模型从“论文”走向“工程”的几个扩展方向

前面讲的都是日前调度,假设预测数据是准确的,但在实际运行中,光伏出力预测到第二天下午就可能有明显偏差。所以工程上更常见的是“日前计划+日内滚动修正”:先做一次日前调度拿到基准计划,然后每隔15到30分钟基于最新的光伏、负荷预测数据重新求解未来4小时内的调度方案。这个思路本质上就是模型预测控制的滚动优化。

另外,单体园区的柔性和储能终究有限。如果把多个园区、多个楼宇的负荷聚合起来,让它们在虚拟电厂平台上统一参与调度,柔性负荷的调节潜力会被放大很多。这也是目前比较热的方向——多主体协同调度、各自隐私保护下的分布式求解,比如ADMM算法,值得深入做。

还有一点容易被论文忽略但工程上绕不开:储能电池的寿命损耗要放进目标函数。按充放电循环次数折算折旧成本,每度电的充放成本大概是电池系统投资除以寿命循环容量。如果这个成本不给,模型会让储能每天满充满放,表面好看,实际上电池两年就报废了。调度模型不能只服务算例,要能扛住三年五年的真实运行。

我做园区项目最大的体会是,柔性负荷和碳约束不是给调度“添麻烦”,而是让调度真正从“被动追负荷”升级成了“主动管资源”。模型再漂亮,最后还是要落到每一个小时的功率平衡上。建模型时多想想约束背后的物理意义,遇到无解别急着调参数,回头看看是不是约束本身就打架了。这个行业没有银弹,把基础模型跑扎实,比追任何时髦算法都重要。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询