计及调峰主动性的多能互补优化调度Matlab实现
1. 为什么“调峰主动性”是多能互补调度里最容易被低估的变量先说个现象。很多做过风光水火储联合调度的同行一开始都把注意力放在“怎么把模型建得大、约束建得全”上结果算出来的方案在纸面上很漂亮新能源消纳率95%以上火电深度调峰也到位。可真拿到现场对照负荷曲线看就会发现有个问题说不通——全系统明明还有调峰空间某些时段却还是不得不弃风弃光或者让火电硬扛着极端爬坡。问题出在哪儿出在调度模型默认了所有电源都是“被动听令”的。风电、光伏按预测出力直接塞进去火电按最小技术出力压底水电按计划流量放水储能按照固定充放电策略跑。整个系统没有一种机制去主动感知“这个时段我该让谁多调、谁少调、谁让出通道”。这种调度方式本质上叫“硬凑平衡”不是“协调优化”。我一直觉得“调峰主动性”在计及多能互补的优化调度里是最容易被忽略又最值钱的一个概念。它指的不是某台机组能不能调峰而是它在调度指令之外愿不愿意、有没有能力、用多大代价去参与调峰。一台火电机组的最小技术出力是40%但如果通过灵活性改造能到30%甚至20%它就有了“主动”参与深调的资本。一台水电机组如果只按径流来水安排出力它是在被动发电如果能在负荷尖峰快速顶上去、在低谷把出力压下来它就是主动调峰。一台储能如果只在谷充峰放那是固定策略如果能根据系统边际成本动态决定充放深度和时机那才是主动调峰。这篇文章想聊的就是把这套“主动性”写进优化模型、用Matlab实现的完整过程。适合正在做多能互补调度、新能源消纳、电力系统优化运行方向研究的同学也适合刚接触优化调度的工程师——你会发现模型规模不需要多大关键是系数怎么设、约束怎么松、优先级怎么排。从我们实际跑的算例来看把调峰主动性用可量化的指标纳入目标函数之后系统总运行成本能下降5%到10%弃风弃光率往往能压掉三分之一以上。这个收益不是靠多加一台机组换来的而是靠把现有资源的“主动调峰潜力”榨出来的。2. 模型怎么搭风光水火储系统的目标函数与约束全集要写代码先得把数学模型立在纸上。这步不能跳跳过必返工。2.1 系统组成与时间尺度设定这里说的多能系统典型构成是风电场、光伏电站、常规火电机组、水电机组含梯级或径流式、储能电站外加一个从主网购售电的关口。优化周期一般取一天24小时时间分辨率为1小时如果要看更细的爬坡过程可以取15分钟一个点但Matlab里矩阵规模会成倍上涨调试时间也拉长建议先用小时级把逻辑跑通。决策变量我习惯这样组织火电出力 (P_{t,i}^{T})i1…N_T水电出力 (P_{t,j}^{H})j1…N_H风电、光伏实际出力 (P_{t}^{W})、(P_{t}^{S})储能充电功率 (P_{t}^{C})、放电功率 (P_{t}^{D})、SOC状态联络线交换功率 (P_{t}^{G})正为购入、负为售出时间索引t1…24所有变量都按矩阵存储。Matlab里我最开始用cell数组装变量后来发现直接用二维矩阵更快尤其配合Yalmip的建模习惯矩阵维度对齐了约束写起来就是几行的事。2.2 目标函数不能只盯成本消纳和调峰代价都要进去目标函数是整个模型的灵魂。很多论文只用运行成本最小我跑下来觉得不够——成本最小化会让模型拼命压低火电出力但如果不给火电“深度调峰越深、补偿越高”的代价模型会肆无忌惮让火电压到极限看起来成本低了实际机组振动、煤耗、寿命损耗都上来了现场根本不敢这么干。我用的目标函数包含四部分[ \min \sum_{t1}^{T} \left( C_{t}^{Fuel} C_{t}^{Start} C_{t}^{Peak} C_{t}^{Env} \right) ]其中燃料成本用煤耗二次函数表示对于火电[ C_{t,i}^{Fuel} a_i (P_{t,i}^{T})^2 b_i P_{t,i}^{T} c_i ]启动成本按机组启停状态变量判断这个在小时级模型里可以简化成固定值。调峰主动性的核心体现在第三项 (C_{t}^{Peak}) 上我把它定义为[ C_{t}^{Peak} \sum_{i} \alpha_i \cdot (P_{i}^{min} - P_{t,i}^{T})^2 \cdot I_{t,i}^{deep} ]这个式子要解释一下。当火电出力低于常规最小技术出力、进入深度调峰区间时I标记该状态差值越大说明机组越“用力”地压出力调峰代价越大α是权重系数。把这一项放进目标函数模型就会自己去权衡到底是让火电深调更划算还是让储能多充一点更划算或者干脆弃掉一点新能源更划算。环境成本可以简单设成与火电出力线性相关的惩罚项本质上是给碳排放定个价。别小看这一项它决定了模型在“多发火电少弃风”和“多弃风少发火电”之间的偏好直接影响结果走向。2.3 约束全集功率平衡、机组出力、爬坡、储能、联络线约束条件我分成五块来写心里先有个清单写代码时才不会漏第一块是功率平衡约束。每个时段系统内所有电源出力加上联络线购电必须等于负荷加上储能充电功率和外送功率[ P_{t}^{W} P_{t}^{S} \sum_i P_{t,i}^{T} \sum_j P_{t,j}^{H} P_{t}^{D} P_{t}^{G} P_{t}^{Load} P_{t}^{C} ]这里注意风电光伏实际出力 ≤ 预测可用出力差值就是弃风弃光量。很多初学者会把新能源出力直接写成等于预测值那就没有“消纳率”这个指标了整个模型也就失去了优化的意义。第二块是机组出力上下限约束。火电的出力下限分两档正常运行时取常规最小技术出力 (P_{i}^{min,nor})进入深度调峰状态时取改造后的 (P_{i}^{min,deep})。这个“两档下限”就是调峰主动性的物理根基——机组只有具备深调能力模型才有得选。第三块是爬坡约束。火电向上爬坡速率和向下爬坡速率分别限制水电也类似[ -P_{i}^{ramp,down} \le P_{t,i}^{T} - P_{t-1,i}^{T} \le P_{i}^{ramp,up} ]爬坡约束写漏了模型会给出“每小时跳变200MW”这种荒唐结果现场根本无法执行。第四块是储能约束。包括充放电功率上限、SOC递推方程、SOC上下限、以及充放电不能同时进行的逻辑约束。SOC状态变量一定要保留否则储能就是一个“无记忆”的虚拟电源调峰主动性无从谈起——主动调峰的本质就是跨时段转移能量SOC就是那个记忆载体。第五块是联络线约束。购电功率不能超过关口容量这个直接加上下限就行。所有约束加起来变量量级大概在几百到一千左右对常规求解器来说非常轻松。3. 计及调峰主动性的核心怎么把“主动”变成可计算的量这一节是整个项目的关键。很多模型不是不调峰而是“被动调峰”——负荷高了我就加出力负荷低了我压出力全程跟随负荷曲线没有选择余地。而“主动调峰”是模型在满足所有约束的前提下有策略地分配调峰任务谁调、调多深、什么时候调。3.1 给火电建“两档调峰区间”我处理火电时把每台机组的运行区间分成常规区和深调区常规区([P_{i}^{min,nor}, P_{i}^{max}])机组在这个区间运行时煤耗曲线正常启停状态不变。深调区([P_{i}^{min,deep}, P_{i}^{min,nor}))只有经过灵活性改造的机组才有这个区间。进入深调区时模型要额外支付调峰补偿成本就是目标函数里的深调惩罚项。这里的关键是深调区不是强制进入的而是给模型一个“选项”。调峰主动性体现在当系统弃风压力大、负荷低谷时模型会主动比较三个方案的成本方案A让火电进入深调区多压30MW出力 方案B让储能多充电30MW把火电少压一点 方案C直接弃掉30MW风电。目标函数算出哪个最便宜模型就选哪条路。这才是“主动调峰”的数学含义——不是预先规定好谁牺牲而是让所有调峰资源在同一套价格信号下竞争。我在代码里用二元变量 (I_{t,i}^{deep}) 标记是否进入深调状态再配合大M法把它和出力下限约束关联起来。这一组约束写出来大概是P_min_deep(i) P_t(i) P_min_nor(i) (1-I_deep_t(i))*M P_min_nor(i) P_t(i) P_max(i) I_deep_t(i)*M两条约束同时存在就把机组的可行域切成了两个区间。这个M值我取的是机组最大出力的两倍太大容易造成数值问题太小约束会失效实际调试时花了点功夫才摸到合适范围。3.2 水电的主动调峰能力要用“可调容量”而不是“总容量”水电机组和火电有个本质区别它的能量来源来水是即时的水库调节能力决定了它能主动调峰多大幅度。如果忽略水库库容约束把水电当成一个无限容量的调节电源模型会让水电在午间拼命少发、晚间高峰拼命多发结果水库库容根本容纳不下。我处理水电时引入两个参数日可调电量上限和库容调节速率。前者限制了水电一天之内的总能量转移能力后者限制了相邻时段出力的调整幅度。这样水电的“主动调峰”就体现为模型自主选择在哪些时段让水电流量减少蓄水、哪些时段让水电流量增加放水以配合系统净负荷曲线。还有个容易被忽略的细节水电机组低出力运行时下游河道流量可能不满足生态流量要求。我在约束里加了一个最小下泄流量的折算出力限制这虽然让可行域变小了但结果更贴合实际评审或现场对接时人家一看就知道你考虑过这个问题。3.3 储能的“主动”不是充放策略而是在目标函数里参与竞价储能在很多模型里就是“低谷充电、高峰放电”的定式那充其量叫策略不叫优化。真正主动的储能调度是把充放电功率也作为变量和火电、水电一起在目标函数里“竞价”。当火电深调代价高时模型自发倾向让储能多充电当高峰负荷电价高时模型自发倾向让储能多放电。为了体现“主动”我还在储能SOC递推约束里加了两个惩罚项一个是SOC偏离中间值时的轻微惩罚防止模型在优化周期末把SOC压到边界另一个是充放电切换次数惩罚防止储能每15分钟就切换一次充放状态那在实际运行中根本做不到电池循环寿命也受不了。3.4 调峰主动性指标的计算公式最后为了评估模型确实把“主动性”用好