ARTICLE DETAIL

资讯详情

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

综合能源系统低碳经济调度中的柔性负荷建模与求解实践

综合能源系统低碳经济调度中的柔性负荷建模与求解实践 综合能源系统低碳经济调度这几年几乎成了每份答辩材料和申报书里的标配词。可如果你真拿一套实际数据去算就会发现大部分现成模型只解决了电怎么发、气怎么买而对负荷侧几乎是硬约束处理固定曲线按需供能。柔性负荷在这样的模型里通常只是个名词没有真正的参与机制。这个课题把柔性负荷和低碳经济调度放在一起核心工作其实就三件事第一把综合能源系统的多能流数学化第二把可调的负荷资源建模成可优化的决策变量第三在运行成本和碳排放成本之间找到一个可计算的平衡点。本文不打算重复课本推导而是把我在搭建这套模型、跑仿真、调参数过程中遇到的真实问题和取舍讲清楚。适合正在做IES调度、需求响应建模或者双碳方向研究的同学也适合想从零开始落地一套调度程序的工程师参考。1. 为什么这个课题值得做传统调度模型的三块短板1.1 综合能源系统的多能互补优势到底在哪我在很多项目里看到这样的现象综合能源系统IES的设备清单列得很全——风机、光伏、燃气轮机、电锅炉、吸收式制冷、蓄电、蓄热——但调度策略还是电热分开、各调各的。能源站内部的电力平衡靠外购电兜底热平衡靠燃气锅炉硬烧冷平衡全交给电制冷。这种拼盘式运行方式说白了只是把设备摆在了一个站房里并没有发挥多能互补的本质。IES调度的核心价值在于通过能量耦合设备把一种能源的冗余转化为另一种能源的补充。燃气轮机发电后的余热可以供热吸收式制冷机又可以把热转成冷电锅炉可以在低谷电价时段把电转化成热能储存。耦合的结果是系统在某个时段可能不再需要单一能源的峰值供给而是通过跨能源的转移来削峰填谷。对这部分能力的数学化表示就是设备级的能量平衡方程和能效模型。1.2 柔性负荷被算法习惯性忽略的优质资源很多传统调度模型把负荷当作不可调度的刚需理由通常是用户用电有自己的计划我们不能干预。但在园区级系统里这个假设正在瓦解。园区里的空调、照明、充电桩、冰蓄冷装置、可中断的生产线天然就有相当大的调节余地。把负荷从固定值变成区间约束的变量相当于在调度模型里白送了一批虚拟储能资源。柔性负荷的价值在价格信号明显的时段会被放大。比如夏季午后的光伏大发时段如果可转移负荷能挪过来就能少向电网倒送或减少弃光。而冬季晚高峰如果可削减负荷让出一部分功率就能推迟需要扩容燃气机组或外购电的时刻。这个逻辑并不复杂难的是怎么把负荷的柔性边界用约束语言描述清楚同时不让用户舒适性崩掉。这也是后面第三章展开的重点。1.3 低碳不等于低效碳约束如何改变最优解的形状“低碳”和“经济”在直觉上有冲突感减排往往要加设备、加投入怎么还可能经济实际做优化时会发现两者不完全是反方向。碳排放成本一旦进入目标函数模型会自动调整机组的运行区间——让高碳的燃气轮机少在低效低负荷区运行让电转热设备在绿电充沛时段多出力让储能承担起更多的时移作用。很多所谓的低碳调度最终算出来的运行成本甚至更低因为碳交易成本和燃料成本在方向上往往同向效率提升本身就同时减了碳。关键在于怎么把碳成本写进模型。用固定排放因子乘以能耗是最粗糙的做法进阶一点是引入碳交易配额和阶梯碳价排放量在配额内不计成本超出部分按逐级升高的价格计费配额盈余还可以卖出获利。这样目标函数就不是省电费单目标而是一个运行成本碳交易成本的双重账本最优解也会从单纯追求低电价转向对机组利用率和负荷曲线的整体优化。提示先说清楚一个容易踩的坑——不要一上来就追求低碳目标先把经济运行跑通再叠加碳账本。碳约束的加入会显著改变解的结构如果基础模型本身不可靠后面调碳价参数时你会分不清是碳价的问题还是模型的问题。2. 物理模型搭建先把园区级综合能源系统的家底盘清楚2.1 典型的园区级IES拓扑结构与能量流走向我采用的拓扑是一个常见的楼宇/园区型IES电网和天然气网作为外部能源入口内部包含光伏和风电两类可再生电源燃气轮机承担热电联产燃气锅炉是热力备用的兜底设备电锅炉用于电转热吸收式制冷机与电制冷机并行承担冷负荷电池储能与蓄热罐分别负责电、热时移。这个拓扑不算新但足够把电、气、热、冷四种能量流全部覆盖也方便后续加碳捕集、氢能等扩展模块。调度时步长取1小时优化周期24小时。之所以取1小时而不是15分钟是因为园区级系统的主要设备时间常数都在分钟到小时量级1小时可以兼顾计算效率和结果的工程解释性如果要做精细化需求响应再改成15分钟但模型的变量数和求解时间会成倍增加。2.2 设备级建模发电机、储能与耦合设备的状态方程设备模型不追求物理仿真级别的精度而是面向调度优化的准稳态模型。以燃气轮机为例三个关键公式是电出力与天然气输入的能量平衡、发电效率与负荷率的关系、以及余热回收功率等于输入燃气能量乘以热电比再乘以回收效率。实际编码时我会把效率-负荷率的非线性关系用三段线性化处理既保留了低负荷率效率下降的特征又不至于引入非线性目标导致求解困难。储能设备是另一类需要小心处理的对象因为它们引入了时间耦合变量。电池储能需要同时跟踪荷电状态SOC、充放电功率、充放电状态0-1变量和充放效率。其中最关键的是SOC递推方程上一时刻的SOC乘以自损系数加上本时刻充电量乘充电效率再减去放电量除以放电效率。蓄热罐的建模本质和电池一样只是能量形式不同。这种同构不同源的特性在代码里最适合封装成统一函数再传入不同参数。2.3 负荷侧建模的边界条件与基础数据需求负荷数据是整个模型的基础。我通常先拿到园区一年的电、热、冷负荷曲线按季节和典型日分类。不要拿平均值直接建模平均值会抹掉峰值信息而调度的核心恰恰在峰值时段。典型日选取时我会看电负荷的日峰谷差、热负荷的早晚峰值、冷负荷的午后峰值挑出来的典型日要能覆盖系统最紧张的场景。另外提醒一下数据对齐的问题如果电负荷来自关口表热负荷来自供热计量冷负荷来自空调分项计量它们的统计口径和时间戳可能不一致需要先做缺失值补全和时间对齐。单位换算也很容易出错——特别是燃气体积与热值的换算标准状况下天然气的热值取37.0 MJ/m³还是35.6 MJ/m³对结果影响很大前后必须一致。3. 柔性负荷的三类画像可削减、可平移、可转移的数学化表达3.1 可削减负荷功率弹性与最小舒适度约束可削减负荷是最容易建模的一类柔性负荷比如空调设定温度上调、照明亮度调低、部分非关键设备暂时关停。它的特点是原计划功率是P_base(t)实际功率可以低于这个值但削减幅度在某个区间内。对应约束就是P_cut(t) P_base(t) - P_real(t)且0 ≤ P_cut(t) ≤ ΔP_max。同时为了不让用户受不了整体削减时长和时间段都要限制比如一天最多削减4小时单次连续削减不超过2小时削减比例不超过基础负荷的20%。这类负荷不要求补偿与电量挂钩但模型里要计入需求响应补偿成本通常按削减功率乘以补偿单价。注意一点可削减负荷的激励如果按电量给用户会倾向于多削减如果按次数给用户则更愿意在关键时刻参与。建模时我倾向用功率型补偿因为它和实际调用资源的大小直接挂钩更容易在目标函数里反映价值。3.2 可平移负荷整体连续运行的时间窗口约束可平移负荷典型代表是工厂流水线、洗衣机、洗碗机、配电变压器的计划检修。这类负荷的特征是一旦开始运行就必须连续运行完整个工序整个工序的功率曲线形状不改变但可以整体平移。建模需要引入0-1整数变量工序开始时刻的指示变量以及一系列的连续性约束。具体而言工序的启停窗口要落在允许范围内工序内每个时段的功率等于常规功率乘以是否处于运行状态同时用开始标志变量保证工序不能被拆分。这个约束写起来有点绕但它带来的调度空间很大。一个功率200kW、运行4小时的平移负荷放在光伏大发的中午和放在晚高峰对系统净负荷的影响是完全不同的。正是这一差异让柔性负荷的价值得以实现。3.3 可转移负荷电量守恒与离散时段分配可转移负荷比如电动汽车充电、蓄冷空调制冰特征是总耗电量在一定周期内不变但每个时段的功率可以自由分配或受限于最大功率。建模的核心是电量守恒约束所有时段功率之和等于总所需电量。再加入时段功率上限就可以让模型自己在低谷时段或者可再生能源富余时段安排用电。有意思的是可转移负荷如果完全自由分配求解器会把所有电量堆到最便宜的时段结果可能形成新的尖峰。所以实际建模时还要加峰时段最小用电比例或者连续用电约束来防止形成反高峰这一点很多初版模型会漏掉。3.4 需求响应补偿成本让负荷侧听话的经济杠杆既然用户让渡了部分用能自主权就必须获得补偿。补偿成本是柔性负荷参与调度的前提需要在目标函数里按类型分别计算可削减负荷按削减功率×单价×时长可平移负荷按参与次数结算可转移负荷按转移电量×容量单价。各类补偿单价需要事先确定一般参考电网公司需求响应补贴标准也可以根据用户意愿调查标定。实践中补偿单价不能拍脑袋。价格定低了用户不参与模型算出的柔性全部到达边界退化为刚性负荷定高了调度又会过度使用负荷侧资源导致运行成本反而上升。合理的做法是先把补偿单价跑几个敏感性场景看最优解中柔性负荷的利用率变化再跟用户方谈判确定最终费率。4. 低碳经济调度的核心目标函数里的碳账本与约束集里的紧箍咒4.1 运行成本函数的具体组成与计算逻辑目标函数的第一部分是运行成本。具体包括向电网购电的费用分时电价×各时段购电功率向气网购气的费用天然气价格×耗气量包括燃气轮机和燃气锅炉各设备的运行维护成本按出力比例折算以及需求响应补偿成本。所有项都以1小时为周期做累加得到单日总成本。这里特别说下购电和购气的边界处理模型假设园区可以和外部市场自由购能但设置了购电功率上限和购气流量上限防止求解器利用无限购能替代内部设备。分时电价在算法里是一个分段常数函数低谷、平段、峰值三个价差如果波动足够明显储能和柔性负荷的时移价值就会被激活。4.2 阶梯碳交易机制配额、基准线与边际碳价碳排放核算主要考虑两大类外购电力对应的间接排放以及天然气燃烧的直接排放。间接排放采用电网平均排放因子直接排放采用天然气排放因子×机组耗气量。碳排放总量减去无偿配额之后得到实际需要交易的部分。我一直推荐用阶梯碳交易而不是线性碳价因为阶梯结构更贴近真实碳市场的价格发现机制。阶梯碳价的定义是先把排放量分成若干档每档对应一个碳价碳排放超配额的幅度越大边际碳价越高。这样目标函数中碳成本就呈现分段线性结构配合二进制变量可以把这种分段线性结构转化为混合整数线性规划的标准形式。举个例子更容易理解假设配额免费给了8吨碳价基准为60元/吨超过配额的部分第一档0-3吨仍按60元计第二档3-6吨按90元计第三档再往上按120元计。这样排放越多不光总量多单价还更高模型自然会尽量把排放压低在配额附近。实际项目里配额的设置应该基于行业基准或当地试点市场的规则。4.3 必须盯紧的约束集功率平衡、爬坡、储能SOC与购能上限约束这一块是模型能不能跑出合理解的关键。我通常把它们分成四组第一组是能量平衡约束。每个时段的电、热、冷平衡都必须满足发电光伏风电购电蓄电放电电负荷电锅炉电制冷蓄电充电可转移负荷热负荷由燃气轮机余热、燃气锅炉、电锅炉、蓄热罐共同承担冷负荷由电制冷和吸收式制冷共同承担。这里要特别注意正负号一致电锅炉和电制冷在平衡约束中的位置非常容易写反。第二组是设备运行约束包括出力上下限、爬坡速率、最小启停时间。爬坡约束对燃气轮机尤为重要因为园区负荷波动大时燃气轮机频繁调整出力不仅折旧快还会损失效率爬坡约束设置得过松求解器就会让机组在相邻时段剧烈跳变。第三组是储能约束即SOC递推、充放电功率限制、同一时刻只能充或只能放的互斥约束、以及调度周期始末SOC相等。最后这条始末相等很多人会忽略它保证调度结果可以循环执行否则模型会把储能初始能量全部放光来压低首日成本。第四组是购能上限约束包括上级电网购电上限、购气上限。这组约束往往决定了系统是否会出现弃用本地设备而疯狂外购的荒唐结果。4.4 0-1变量和线性化让模型能交给求解器模型中会出现多处非线性或非凸结构需要线性化处理。典型场景包括储能充放电互斥引入0-1变量可平移负荷的运行状态引入0-1变量阶梯碳价的分段线性化引入辅助变量和0-1选择变量燃气轮机效率-负荷率曲线的分段线性化。整个模型最终是一个标准的MILP目标函数线性约束线性部分变量为0-1整数。这里我不推荐用手写单纯形法也不要自己写分支定界。Gurobi、CPLEX、COPT这类商用求解器在MILP上的表现和内存管理远非自己实现的算法可比。开源方案里SCIP也可以但大规模问题收敛速度感人。模型交给求解器之前务必要检查变量类型声明是否有误很多诡异不收敛其实就是把整数变量声明成了连续变量或者反过来。5. 算法选型与求解实践为什么我最后选了MILP而不是粒子群5.1 问题规模、变量类型与求解器的匹配在动手写代码之前先把问题规模估了一下24个时段每个时段有购电/购气/机组出力/储能充放等连续变量外加储能互斥、可平移负荷等0-1变量总数大约在几千个变量、几千个约束的量级。对于Gurobi这类商业求解器这只是中小规模问题通常几秒到一两分钟内就能收敛到很低的相对间隙。很多刚入门的同学会在这个问题上直接上遗传算法或粒子群理由是AI听起来高级。但你需要知道一个基本事实如果你的问题能写成线性或混合整数线性形式MILP求解器在可行解的全局最优性和收敛速度上有压倒性优势。粒子群只能给出好的可行解甚至无法证明当前解离全局最优有多远。5.2 混合整数线性规划的完整求解流程我的求解流程基本是这样的第一步在Python里用字典把设备参数、负荷曲线、电价、天然气价全部初始化所有数据集中在配置文件里不在主程序里改参数。第二步用Gurobi的Python接口逐个添加决策变量变量命名带设备名和时段下标方便约束冲突时定位。第三步逐条添加约束。第四步设置求解参数——MIP Gap设为0.01%Time Limit设为300秒开启线程数为4。第五步求解后先检查状态码是OPTIMAL还是TIME_LIMIT再检查约束是否被违反最后导出结果。这一段看着平平无奇但踩过的坑都在第二步和第三步变量命名不规范、约束名缺失一旦模型无解求解器给出的冲突分析报告就得靠名字来定位。建议从一开始就建立命名规范比如P_GT[t]、SOC_BESS[t]这种格式后续调试会省很多时间。5.3 参数设置、求解时间与收敛性处理求解参数的设置本质上是在精度和速度之间做权衡。我把MIP Gap收紧到0.01%是因为碳交易成本对解的敏感性较高太松的间隙可能掩盖掉一个更好的机组组合方案。但如果你的系统模型更大比如多个园区联合调度、15分钟粒度建议放宽到0.5%甚至1%优先保证在有限时间内存活。遇到求解时间过长时我常用的三板斧是给迭代初值或MIP start用启发式构造一个可行解喂给求解器开放求解器的预求解presolve选项让它先化简模型关闭一些对称性导致的冗余约束。其中MIP start在很多情况下可以把求解时间砍掉一半以上。初始解怎么来可以先用一个不考虑柔性负荷的纯经济调度模型快速求解得到一个基本可行解再作为初值带入完整模型。6. 仿真结果复盘三组对照实验说明了什么6.1 场景设置基准场景、经济场景、低碳柔性场景为了验证柔性负荷和低碳目标各自的作用我设置了三个场景。基准场景S0负荷全刚性、目标函数只含运行成本经济调度场景S1负荷含三层柔性负荷、目标函数仍只含运行成本低碳经济场景S2负荷含三层柔性负荷、目标函数同时含运行成本和碳交易成本。三个场景共享同一组设备参数、同一组负荷曲线和电价唯一不同的是目标函数与柔性负荷是否启用。这样设置的好处是可以通过S0与S1的对比分离出柔性负荷带来的经济性收益通过S1与S2的对比分离出碳交易机制带来的低碳效益。如果一上来就把所有机制全打开你根本说不清收益来自哪部分。6.2 典型日调度结果机组出力曲线与负荷调整效果以夏季典型日为例光伏出力在午间达到高峰此时电价处于平段如果不做负荷转移多余光伏要么弃掉要么低价上网。加入可转移负荷后模型把制冰和充电任务挪到午间光伏自消纳比例明显上升外购电曲线午间出现一个吸收坑。而到了电价峰值时段可削减负荷自动下调燃气轮机在高效区运行占比提高储能从午间蓄的电在此时集中释放。热力侧的变化同样有趣燃气轮机的余热在夏季主要用于吸收式制冷加入碳成本后燃气轮机更倾向在温度适中的傍晚减少出力此时冷负荷下降、蓄冷罐接力供冷整体燃气消耗比S1场景低了近8%。这种跨能源的协同正是联合调度相比分供系统的优势所在。6.3 关键指标对比成本、碳排放、新能源消纳率下表是我在典型测试算例下得到的仿真结果仅用于说明方法有效性具体数值会随系统参数和负荷数据变化不必当作普适结论。指标S0刚性成本S1柔性成本S2柔性低碳单日运行成本12680元11940元12110元碳排放量12.6 t11.9 t10.8 t光伏自消纳率78%91%94%外购电峰值820 kW680 kW660 kW表格里的成本对比值得细看从S0到S1运行成本下降约5.8%因为柔性负荷把部分用电从高价时段挪走少买了峰时电量从S1到S2运行成本略微回升约1.4%但碳排放下降了约9.2%。也就是说在引入碳交易后系统用很小的经济代价换来了明显的减碳效果这正是低碳经济四个字想表达的核心在碳成本信号引导下系统自己会找到那个经济性和低碳性都相对满意的解。新能源消纳率的数据也说明柔性负荷的边际价值比想象中大。S1相比S0直接把光伏自消纳率从78%提至91%这还没有额外增加储能只是做了负荷时移。对一个园区来说这意味着相同的光伏装机下实际收益更高间接把光伏项目收回成本的周期缩短了。7. 复盘与实操建议建模过程中容易忽视的细节7.1 数据陷阱负荷曲线的平滑处理与单位换算先说一个我在多个项目里反复遇到的情况原始负荷数据里经常有毛刺和零值异常。如果用原始数据直接跑优化求解器会为了适应这几个异常点做出很奇怪的决策比如在凌晨突然让燃气轮机开机。我的处理方式是先做数据清洗再用移动平均做平滑但平滑窗口不能太大否则会削减真实峰值最好控制在2-3个采样点内。同时注意时间戳对齐到整点这一步要放在所有建模之前。单位换算的隐患同样隐蔽。电功率用kW热量用kW还是GJ/h天然气用m³还是kWh每个设备效率的基准也不一统一单位时经常会差出10倍甚至100倍。我一般会建一个单位转换表放在配置文件里所有输入数据在读取环节就统一转换到标准单位主程序里全部用标幺化的思路处理。7.2 初始可行解的构造与求解器预热在完整模型首次求解时如果解空间内可行域很小比如储能始末SOC相等加上可平移负荷整数变量都激活时模型很容易在可行性阶段卡很久。我的做法是先求解一个松弛版本把全部0-1变量固定为0即关闭柔性负荷和储能互斥约束得到一个连续松弛解。虽然这个解不可行但它能告诉你系统大体运行在哪个量级也能作为MIP start的粗胚。更实用的技巧是分阶段求解先解纯经济调度S1把得到的机组状态和储能充放计划作为S2模型的初始解。注意初始解不一定满足S2新增的碳交易约束但只要设备出力在同一水平附近Gurobi就能快速把解拉回可行域内。7.3 模型扩展方向考虑网络潮流与不确定性后的思路这个模型的扩展路径基本有两条。一条是把单节点能量平衡升级为多节点潮流约束适合做配电网-气网耦合的园区集群调度这时需要加入潮流方程或线性化的DistFlow模型变量规模会大幅上升通常需要把步长放宽到1小时并借助分解算法如交替方向乘子法来减轻求解压力。另一条是把确定性调度升级为鲁棒或随机调度。比如光伏和负荷预测的不确定性可以在模型中引入鲁棒优化参数把不确定性集合内的最坏情况纳入约束或者用场景法生成多个光伏出力场景做两阶段随机规划。这两类方法会让探索上一个台阶也更贴近工程实际因为现实里没有哪个光伏功率是先知先觉的。柔性负荷在不确定性环境下的价值会进一步凸显它们本质上是系统应对预测误差的软缓冲比单纯靠储能在成本上更友好。最后想说的其实就一句话不考虑柔性负荷的综合能源系统调度等于把最便宜的调节资源扔在一边不用不考虑碳成本的经济调度则会在碳市场真正收紧时交出超额学费。把这两块同时写进模型算出的不是某个唯一最优解而是一组在多重目标下的可行应对策略——这大概就是探索二字的真正含义。希望我的这些踩坑经验能让你少走一段弯路尤其是在数据口径和0-1变量初始化这两处多花半小时严谨处理后面会让你少熬三个晚上。
返回列表