☰
光热电站虚拟电厂优化调度建模与求解实践
2026/10/21 10:07:46 网站建设 项目流程

做电力调度久了有个后遗症,看什么都像“可调的电源”。储能电池是,电动汽车是,连那片铺满镜子的槽式光热电站,我也没忍住把它塞进了虚拟电厂的模型里。这项模拟探索处理的就是这么个事:在一座50MW光热电站的基础上,让它和风电、光伏、储能电池一起组成一个虚拟电厂,以运行成本最低为目标,做日内优化调度。结果发现光热电站跟其它新能源完全不一样,它不仅能发绿电,还能把熔盐罐里的热当成“库存”,替整个虚拟电厂打时间差。这篇文章就来拆一拆这次项目里的建模思路、求解过程,以及那些真正跑起来才会遇到的坑。

1. 项目全景:虚拟电厂为什么盯上光热电站

1.1 虚拟电厂的本质:把分散资源“捏”成一个电厂

虚拟电厂最核心的概念,不是新建一座电厂,而是通过一套控制中心和能源管理系统,把地理位置分散、设备特性各异的小型电源、储能、可调负荷聚合起来,统一对外表现为一个“电厂”。它对外承担发电责任,对内协调各成员出力。类比地说,相当于把散落在各处的外卖骑手包装成一个餐饮配送平台,商家看到的是统一的服务入口,消费者感受到的是完整的配送能力。

搞清楚这一点很重要,因为很多时候调度侧对虚拟电厂有误解,认为它一定得“拥有”发电设备。实际上虚拟电厂重点是“可控”,不是“所有”。某西部项目里,光热电站本身产权独立,但通过签署调度协议,它的储热罐、汽轮机和电加热器有一部分调节权开放给虚拟电厂控制中心,在满足电站自身技术约束的前提下,按系统指令调整出力。还有周边几个小型风电场、屋顶光伏和用户侧储能,同样以“资源聚合”方式纳入,形成一个等效容量接近100MW的虚拟电厂。

虚拟电厂之所以在新能源比例高的区域越来越受重视,是因为电网调度的对象从“低头看一台机”变成了“抬头看一张网”。单个小资源单独调度,调度中心忙不过来,市场参与能力也很弱。把所有资源聚合成一个可调单元,调度侧只需要对虚拟电厂下发一个总功率指令,内部再分解到各个资源,这就把复杂问题层级化了。

1.2 光热电站在传统电网里的特殊位置

传统印象里,光热电站和光伏、风电一样属于新能源,但其实它在电网眼里完全是另一类角色。光伏和风电的输出功率完全取决于天气,属于典型的不确定电源,也就是“靠天吃饭”的电源。光热电站不一样,它有聚光集热、储热、发电三大子系统,其中储热系统就像一个热量蓄水池,把中午太阳能最足时的热量存到熔盐罐里,傍晚再放出来发电。

这个结构决定了光热电站具备三重能力:

第一,时间平移能力。储热罐可以让发电时段和集热时段解耦,比如太阳辐射最强的12点不发电或少发电,留到晚上19点负荷高峰再放热发电。第二,调节能力。光热电站的汽轮发电机组和常规火电类似,可以在一定范围内调整出力,甚至作为旋转备用参与频率调节,这一点光伏和风电很难做到。第三,转动惯量。汽轮机有旋转质量,可以为系统提供一定的转动惯量支撑,这在新能源占比高的局部电网里非常稀缺。

用一个简单对比表来看光热和其它资源在虚拟电厂里的差异。

资源类型出力可控性时间平移能力快速响应能力启动耗时
光伏低无有秒级
风电低无一般分钟级
储能电池高有极快毫秒级
光热电站较高有(小时级)一般分钟到小时级
常规火电高无一般小时级

真正让光热电站在虚拟电厂里显得特殊的是:它既是新能源,又能承担类似火电的调节任务,相当于“披着新能源外衣的常规机组”。这个属性在只有风光储的普通虚拟电厂里是不存在的。

1.3 为什么“光热+虚拟电厂”是天生一对

这个问题我在项目里反复想过。光热电站单独运行时,虽然自身具备调节能力,但究竟怎么调节,取决于电价信号和电网需求。普通光热电站的收益模型相对简单:白天集热,晚上满发,运行策略偏保守。可一旦纳入虚拟电厂,它的储热系统就不再只是“给自己用”,而是可以服务于整个聚合体的优化目标。

虚拟电厂需要什么?需要可调资源来平抑成员里的风光波动,需要储能在价格低谷时吸收电能、高峰时放出,也需要一个能提供基础出力的“大块头”来撑起虚拟电厂的申报出力置信度。光热电站恰好满足这些需求。光热电站需要什么?需要更大的市场议价能力,以及更多元的收益渠道。单座50MW光热电站在电力现货市场里报价,话语权很弱,但聚合进虚拟电厂之后,整体容量增大、调控能力增强,可以参与调峰、备用甚至辅助服务市场。

用项目里的一句口头禅来说:“光热电站是面团,虚拟电厂是手,面团能不能揉成什么样,很大程度上取决于手怎么发力。”这也是这次探索的原点。

2. 调度建模的关键细节:把光热电站“翻译”成数学模型

2.1 四大子系统建模:从太阳光到电力的完整链条

光热电站进入调度模型,不能只写一个“发电功率”变量。否则它和风电、光伏就没区别了,储热和集热这些核心特性会被完全丢掉。正确的做法是把光热电站拆成光场、储热、发电、电加热四个模块分别建模,再通过能量流把它们串起来。

光场模块的输入是太阳直接法向辐照度,也就是DNI。某个时段的光场集热功率大致可以写成:

Q_solar(t) = DNI(t) × A × η_field(t)

这里的A是镜场采光面积,η_field是光场效率。光场效率不是常数,它受太阳高度角、余弦效应、镜面清洁度、遮挡损失等因素影响,工程上会用一个随时间变化的曲线来近似。需要注意,光场本身有热惯性,镜场调整角度后集热功率不会瞬间变化,项目里一般用一阶惯性环节来模拟这个动态过程。

储热模块是整个模型里最有意思的部分。双罐熔盐储热系统相当于一个带损耗的能量仓库,它的状态方程是:

S(t+1) = S(t) + Δt × (Q_charge(t) × η_ch - Q_discharge(t) / η_dis - Q_loss(t))

其中S(t)是当前储热罐的剩余热量,Q_charge是充热功率,η_ch是充热效率,Q_discharge是放热功率,η_dis是放热效率,Q_loss是罐体散热损耗。约束上储热容量有上下限,充放热功率各自有上限,而且出于设备安全考虑,不能同时充热和放热,这个约束需要用一个0-1变量或者互补约束来描述。

发电模块描述汽轮机组,它的电出力P_elec与进入汽轮机的热量Q_steam近似线性相关:

P_elec(t) = η_turb × Q_steam(t)

同时要满足最小技术出力、最大出力和爬坡速率约束。汽轮机启动过程复杂,温度、压力都要逐步提升,所以启停状态用0-1变量描述,启动成本单独计入目标函数。

电加热模块是很多调度模型容易漏掉的部分。它本质上是一个大功率电锅炉,把虚拟电厂里多余的电力转换成热能存进熔盐罐,相当于在“电”和“热”之间建立了一条反向通路。这样一来,中午光伏大发、现货电价很低甚至为负的时候,虚拟电厂可以把廉价电转成热存起来,晚上再放热发电,一举两得。

2.2 虚拟电厂聚合模型:多能源成员放在一个天平上

把光热电站模型建好之后,需要把虚拟电厂所有成员写进同一个优化模型里。简单来说,每个成员有各自的运行约束,成员之间通过功率平衡耦合。

虚拟电厂的功率平衡约束可以写成:

P_csp(t) + P_wind(t) + P_pv(t) + P_bat,dis(t) + P_import(t) = P_load(t) + P_bat,ch(t) + P_eheat(t) + P_export(t)

P_csp是光热发电功率,P_wind和P_pv是风力和光伏出力,P_bat是储能充放电,P_import和P_export是与外部电网的交换功率,P_load是聚合体内部的负荷,P_eheat是电加热器的消耗功率。这个约束在不同时段连接了所有成员,也是整个优化问题里最重要的耦合约束。

虚拟电厂内部的风光出力存在不确定性,所以聚合模型里一般会引入随机变量,或者把它们转换成确定性等价的约束形式。储能电池的SOC也和储热罐的S(t)类似,有充放电功率约束和电池容量约束。整个模型最终会形成一个以成本最小为目标,包含大量不等式约束的混合整数线性规划,也就是常说的MILP问题。

2.3 目标函数:从成本最小到低碳价值

这次项目用的目标函数是运行成本最小化,但这几个成本项要解释清楚。目标函数长这样:

C_total = Σ_t [ C_import(t) - R_export(t) + C_start(t) + C_om(t) + C_penalty(t) ]

C_import是购电成本,R_export是售电收益,C_start是机组启停成本,C_om是运行维护成本,C_penalty是弃风弃光和供需不平衡的惩罚项。引入弃风弃光惩罚这个做法很关键,因为如果只看经济成本,系统有可能会选择切掉部分新能源来避免调用高成本灵活性资源,这在“双碳”背景下不可接受,所以要给弃电一个足够高的惩罚系数,强迫优化过程尽量避免浪费绿电。

碳成本我没有直接写进目标函数,而是用碳价折进C_om里统一考虑。具体做法是:根据当前区域电网的碳排放因子,把单位电量对应的碳排放成本折算进运行维护成本中。这样既保留了单目标优化的求解效率,又让结果隐含了低碳价值。

2.4 时间尺度的选择:日前与日内滚动

另外一个容易忽略的细节是时间尺度。光热电站热惯性很大,调度计划放得太短会失真,放得太长又跟不上市场变化。项目里采用了两级调度框架:日前计划间隔1小时,日内滚动优化间隔15分钟。日前计划解决的是“储热罐什么时候蓄、什么时候放”的粗粒度问题,日内滚动优化解决的是“未来15分钟各资源具体出力怎么调”的细粒度问题。

两级调度的好处是,光热电站的汽轮机状态和储热温度这类慢变量,用小时级模型处理;储能电池和可调负荷这类快变量,用15分钟级模型处理。两者嵌套求解,让光热电站既不显得“迟钝”,也不被过细的时间步长拖垮计算速度。

3. 优化调度求解:从混合整数规划到分散协调

3.1 整数变量是难点:分支定界与求解器加速

光热电站的汽轮机启停、充放热切换都是离散决策,必须用0-1变量描述。这些整数变量让问题变成了MILP,求解难度比线性规划大很多。项目里最开始的模型规模不大,变量数量大概几千个,商业求解器用分支定界法可以在几十秒内完成日前优化。但随着虚拟电厂成员增多,尤其是把多个光热电站、多台储能、大量可调负荷放进同一个模型后,整数变量数量暴涨,求解时间会从秒级拖到分钟级甚至更久。

针对这个问题,我给模型做了一些剪枝和降维处理。比如储能电池的充放电切换,用一个逻辑变量和几个不等式来强迫其不能同时充放,比增加两个0-1变量更高效。再比如把储热罐的SOC在日前计划里离散成较少档位,先求粗略解,再在日内滚动优化里细化。这是非常实用的技巧,因为调度模型追求的是“算得快、算得稳”,而不是数学上的完美。

3.2 光资源不确定性:场景法与鲁棒优化的取舍

凡是搞过光热调度的人都清楚,DNI预测是最大的不确定性来源。DNI预测偏差直接传导到集热功率,进而影响储热罐热量和发电能力。项目组试过两种主流方案。

第一种是场景法。根据历史预测误差,生成多个未来DNI场景,每个场景给一个概率权重,优化目标改为期望成本最小化。场景法结果直观,但需要保证场景数量足够,否则会低估风险。测试下来,至少生成20个场景,结果才趋于平稳。

第二种是鲁棒优化。不预设场景分布,只给DNI定义一个不确定性区间,并引入不确定性预算Γ。Γ控制着决策者对最坏情况的保守程度,Γ越大,模型越倾向于预留更多储热容量,同时适当降低发电计划。鲁棒解算出来的成本通常比场景法高,但遇到极端天气时不会出大问题。

完整项目里最终用了混合方案:日前计划采用鲁棒优化,用较保守的DNI区间确保光热电站能在全天提供基本出力;日内滚动更新时换回场景法,因为此时预测误差已经明显减小,场景法可以抓住更多经济收益。

3.3 多主体分布式求解:为什么需要ADMM

虚拟电厂未必是“一家人”,光热电站、风电场、储能站可能分属不同运营方。集中式优化把所有成员数据收集到一起,虽然模型理论上最优,但实际中会碰到数据隐私和数据量过大的问题。分布式优化在这个时候更有意义。

ADMM,交替方向乘子法,是业内用得多的分布式求解框架。思路很简单:把总问题按成员拆成多个独立子问题,每个成员自行求解本地子问题,然后把边界功率信息上报给协调器,协调器根据所有成员上报结果更新拉格朗日乘子,再把信号下发,如此反复迭代,直到各成员输出与总目标之间的不一致性满足精度要求。

用伪代码表示大概是:

初始化拉格朗日乘子λ=0,惩罚因子ρ 循环直到收敛: 1. 各成员并行求解本地子问题,得到各自出力x_i 2. 上报x_i给协调器 3. 协调器计算聚合偏差r = Σ x_i - 目标值D 4. 更新λ = λ + ρ·r 5. 若‖r‖小于阈值则停止,否则继续

ADMM的优势在于保留了各成员的自治权,光热电站不用把储热罐的详细参数全部交给别人。但收敛速度是个问题,特别是在通信条件差、成员数量多的情况下,迭代可能几百次都不收敛,所以实际使用时一般会设置最大迭代次数,同时优化惩罚因子ρ的取值。经过调参,ρ取0.5到2之间,收敛效果最好。

3.4 算例参数:一座“虚构但合理”的50MW光热电站

为了让整个优化调度流程跑通,项目组虚构了一个典型的西部槽式光热电站,参数参考了公开文献里的常用数据和同类项目的典型配置。不需要真实数据也完全够用,因为调度的关键是逻辑验证,不是说看绝对数值。下表是资源聚合体的基本参数。

资源装机容量对应时间常数/储能容量爬坡能力
光热电站50MW电储热容量800MW·h,最大充放热功率120MW0.8MW/min
风电场30MW无取决于风速
光伏电站20MW无取决于辐照
储能电池20MW/40MW·h电池容量40MW·h10MW/min
可调负荷15MW无2MW/min

储热容量按热功率标定,800MW·h意味着这台光热电站在额定功率50MW、热电转换效率约40%的情况下,满负荷可以连续发电约6.4小时。因为有储热这个“大水库”,它完全可以做到白天蓄热、夜间持续发电,这也是优化调度结果里最显著的策略。

4. 实操过程:一个典型日调度全流程

4.1 数据准备:预测是调度的“源”,错了后面全废

调度之前,第一件事是收集数据。一个完整日调度需要的输入数据包括:未来24小时DNI预测、风速预测、光伏辐照预测、虚拟电厂内部负荷预测、现货市场分时电价预测,以及各设备当前运行状态,比如光热电站储热罐当前SOC、储能电池电量、机组是否在线等。

DNI预测这个环节最容易出问题。项目里一开始直接用气象预报的DNI数值,结果发现很多预测明显偏高,因为气象模型分辨率不够,没有考虑山谷里的云团移动。后来加了一步处理:用当地实测历史数据训练一个校正模型,把气象预报转换为光热电站场址的DNI预测。简单说就是给预报结果加一个与太阳高度角相关的修正系数。这点非常关键,哪怕没有复杂模型,做一版线性回归也能明显改善预测精度。

4.2 聚合与状态估计:先摸清成员的“家底”

虚拟电厂调度前不能盲目分配出力,得先摸清每个成员的可调范围。储能电池的可调范围取决于当前SOC和充放电功率限值,风光出力范围取决于天气预测,而光热电站的可调范围最复杂,它不仅取决于当前储热SOC,还取决于未来集热功率的期望和储热罐充放热约束。

实操中,光热电站控制中心在调度前会做一个“能力曲线”计算,给出未来24小时内任意时刻的可发电功率区间。比如早上10点,储热罐热量充足、镜场开始集热,未来可调出力区间大概是20到50MW;傍晚5点,如果储热罐热量已经被消耗到35%,可调出力区间就会收窄到15到30MW。这个能力区间上报给虚拟电厂协调器之后,后续所有优化决策都以此为边界。

4.3 优化结果长啥样:看出力曲线怎么“跟着价格走”

取一个夏日的典型日,DNI强、光伏大发、现货市场价格午间低晚间高。用前面建立的MILP模型做日前优化,得到的光热电站出力有一个非常有意思的特征:白天光伏大发时,光热电站出力明显压低,电加热器开启,把部分光伏电力转化成热存进熔盐罐;下午电价升高后,储热罐开始放热,汽轮机逐渐爬坡;晚间高峰时段,光热电站基本满发,成为虚拟电厂对外输出的主力。

用表格看几个关键时段的调度结果。

时段光热出力/动作储能动作虚拟电厂与电网交互
8:00-11:00低出力,储热罐缓慢蓄热充电消耗少量网电
11:00-14:00最低技术出力,电加热器开启满充午间光伏富余时向电网售电
14:00-17:00储热罐开始放热,出力爬升保持高SOC售电增加
17:00-21:00满发50MW,储热罐快速放热放电顶峰峰值售电,收益最高
21:00-24:00出力逐步降低,留储热余量停止放电购电成本低,储能充电

这个结果验证了优化调度的核心逻辑:光热电站蓄热不是越多越好,放热也不是越早越好,一切以系统总成本最优为准则。储热罐像一座水坝,什么时候蓄水、什么时候放水,得看下游的“用水”需求。

4.4 从调度到执行:指令下发与滚动修正

日前计划只是“图纸”,真正执行时还要做滚动修正。每次滚动优化的时间窗口是4小时,步长15分钟,每次重新读取最新预测,修正后续计划。这样既保留了日前计划的“大局观”,又能利用最新数据减少预测误差的影响。

有个执行细节值得单独提一下:光热电站的汽轮机爬坡速率很慢,滚动修正后的出力调整如果超过爬坡限制,会直接导致执行失败。因此在实际执行层,光热电站出力指令会先经过一个爬坡限幅环节,把变化率限制在0.8MW/min以内,再下发到汽轮机控制系统。储能电池则承担快速调节任务,弥补光热响应慢的不足。

5. 实际运行中踩过的坑与排查实录

5.1 储热罐“温度分层”让模型偏差被低估

项目初期储热模型用的是忽略温度分层的单节点模型,也就是把所有熔盐当成同一温度来处理。结果出现了一个奇怪的现象:优化结果里白天蓄热、晚上放热的策略执行得还挺好,但实际放热功率总比模型预测偏低,导致汽轮机出力上限达不到计划值,需要临时调用备用。

排查后确认是温度分层的问题。双罐储热系统中的热罐,上层熔盐温度高、下层温度低,放热时高温熔盐先从顶部抽出。简化模型假设罐内温度均匀,其实是把可用热量高估了。后来我们把储热模型改成一维轴向分层模型,虽然计算量增加了一些,但放热功率和汽轮机供汽温度的估算准确了很多。这个坑提醒我,对光热电站来说,“热量可用性”比“热量总量”更重要。

5.2 预测精度不够导致的紧急爬坡失误

有一次实际运行遇到突发云层,DNI在20分钟内从700W/m²掉到250W/m²,镜场集热功率断崖式下跌。储热罐SOC当天故意留得不高,模型里又有“尽量降低储热余量”的优化倾向,结果就是集热跟不上、储热补不上、汽轮机出力下降,虚拟电厂整体出力瞬间缺了一块。

后来分析原因发现,日前DNI预测虽然做了误差校正,但云层移动这种短时变化没有被场景集覆盖。解决思路有两层:一层是调度模型里给储热罐SOC设一个置信下限,比如不低于20%,避免优化器把热量用到极限;另一层是给风光的预测置信区间加上一个极端场景,确保鲁棒性。简单一句话:调度计划永远别把资源用到满,要留一条后路。

5.3 现货市场价格信号和热惯性的错位

现货市场价格是15分钟一个点,而且发布有提前量。光热电站的热惯性决定了它今天晚上的出力策略需要提前几个小时定下来,等到电价信号明确了再调整,往往已经晚了。有一回,晚间20点现货价格意外高涨,模型算出来此时应该满发,但汽轮机从最低技术出力爬坡到满发需要将近40分钟,等它爬到满发时价格高峰已经过去了。

这个问题是光热电站在虚拟电厂里最“拧巴”的地方:市场信号很快,物理系统很慢。解决办法是采用预测控制思想,把未来一段时间的电价预期直接嵌入优化模型,模型不只盯当前时段,而是把未来4小时的价格趋势和机组爬坡约束一起考虑。这样一来,发电策略提前布局,价格高峰到来时正好满发,不再临时抱佛脚。

5.4 通信延迟与“状态不同步”

虚拟电厂控制中心和电站现场之间的通信如果走无线公网,指令下发会有几秒到几十秒的延迟。别小看这个延迟,调度模型假设的是“下发指令后立即执行”,但实际指令到场后,储热罐SOC和机组状态可能已经变了。尤其是储能电池这种快资源,几分钟内的状态变化相当大。

项目后期给控制中心加了事件触发机制:不是每15分钟被动收一次数据,而是当设备状态偏离预测超过阈值时立刻主动上报,重新触发滚动优化。这样既能保障状态新鲜度,又不至于因为高频通信占用太多带宽。光热电站侧也做了一个本地缓存层,协调器指令先落到缓存,再按设备当前状态校验后执行,避免状态过期导致指令冲突。

5.5 问题排查速查表

症状可能原因排查方向解决手段
光热出力低于计划储热罐热分层模型不准检查储热模型与实际放热功率的偏差改分层模型,放热效率按SOC修正
虚拟电厂出力缺口DN I预测骤降,场景不全检查预测置信区间增加极端场景,设SOC下限
峰时满发跟不上热惯性导致爬坡延迟检查爬坡约束是否完整预测控制,提前布局
指令执行失败通信延迟、状态过期检查通信链路和状态时间戳事件触发机制,本地缓存校验

6. 项目之后的思考:光热电站虚拟电厂的扩展方向

6.1 从“跟随调度”到“参与市场”

项目做通以后,下一步自然会想:这套优化调度框架能不能帮光热电站赚更多钱?答案是能,但前提是调整目标函数。现货套利只是最基础的应用,光热电站的储热罐和汽轮机还可以参与二次调频辅助服务,用储热来缓冲蒸汽参数波动,让汽轮机在AGC指令下快速改变出力。这相当于给光热电站开辟了一个新“人设”:既卖电量,也卖调节能力。

参与调频市场对模型的要求更高,因为目标函数里要加入AGC里程收益,约束里要增加对调节速率和调节精度的限制。不过这些约束本质还是我们建过的那些东西,只是换个赛道重新表达。

6.2 与制氢联营:把多余的热变成绿氢

光热电站除了发电,还能直接提供高温蒸汽。把富余的蒸汽引到电解制氢系统或热化学制氢系统,就相当于把“储能”变成了“化工产品”。在虚拟电厂框架下,如果再加入一个电解槽作为一个可调负荷,制氢和发电之间就有了一个优化权衡:电价高时,蒸汽优先发电;电价低时,蒸汽优先制氢。这个扩展方向我在模拟中验证过,可行性很高,尤其适合西部光资源富集地区。

6.3 从单体电站到区域虚拟电厂集群

最后画一个更大的饼。在大型清洁能源基地,未来可能会出现数座光热电站联合周边风光的区域虚拟电厂集群。多座光热电站的储热罐可以共享调节负担,A电站储热量高就多承担晚高峰出力,B电站储热量低就少承担,配合起来整体灵活度会远超单座电站。当然,这个方向对分布式优化算法的要求也更高,数据交换、利益分配、成本分摊都会成为新的课题。

我个人在实际操作中的体会是,虚拟电厂里的光热电站调度,本质上是“把不确定的太阳光,通过一个可控制的热账户,转换成可控的电”。它不像光伏那样直接看天吃饭,也不像火电那样完全依赖燃料,而是站在两者之间。做优化的人如果把光热电站当成普通新能源来处理,模型会失真;当成常规火电来处理,又浪费了它的储热价值。只有把它当成一个带储能的受控热源,虚拟电厂才算真正用对了这个资源。

最后再分享一个小技巧:判断一套调度模型好不好,不要只盯着优化成本数字,要看极端场景下模型能不能给出“不疯”的策略。也就是当预测误差很大、价格波动很剧烈时,调度结果是不是仍然敢于把储热罐放空。如果模型在这时候还敢放空,那说明它还不够稳,留着备用余量才是光热电站调度里最值钱的经验。

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

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

立即咨询