做微网调度的人应该都有同感:光伏中午大发,晚上直接归零;风电看天吃饭,一阵风来一阵风走。负荷侧也不是省油的灯,早上和傍晚两个高峰能把人逼疯。我最近跑完的一个模拟项目,就是试着把停车场里那些电动汽车当成"会跑的大电池",在微网里做多时间尺度协调调度——日前定计划、日内修偏差、实时稳边界。三层模型跑下来,结果比预想的好不少,但也踩了不少坑。这篇就把模型怎么搭、约束怎么设、求解有哪些坎,一次性说清楚。
1. 从"会跑的大电池"说起:电动汽车凭什么进微网
1.1 风光波动,微网靠什么兜底
微网这个场景,本质上是把分布式电源、储能、负荷捆在一起,能并网也能孤岛运行的小型电力系统。常规配置一般是风电、光伏、储能、柴油发电机,再加上一堆负荷。风电光伏这俩角色的脾气大家都熟,出力全靠天,预测误差还大。如果说10分钟前的超短期预测还有八九成准头,那提前一天看的预测,误差能到10%~20%都是家常便饭。光靠储能去吸收这个波动,不是不行,但容量有限,成本不低。柴油发电机倒是能顶上,但燃料成本和排放都在那儿摆着,调度员每次启动它都肉疼。所以问题就变成了:微网里还有没有别的灵活资源?答案就在停车场。
现在电动汽车的保有量已经不小,商场停车场、小区地库、办公楼地下车库里,每天有大量车只是停在那里。一辆家用车一天停着的时间远超跑着的时间,以一天24小时算,真正在路上的时间普遍只有两三个小时。也就是说有二十多个小时,这块电池是闲置的。一台车装个40kWh的电池,一百台车就是4MWh,这个容量放到微网层面,跟配一台中型储能电站相当。而且电动汽车是能充能放的,闲的时候可以当储能用,不仅充电,还能在微网缺电的时候反向送电,这就是V2G。
1.2 多时间尺度为什么是刚需
这里要解释为什么单靠一个时间尺度不行。日前调度面对的是24小时的风光预测,不确定性强,但它能做的事也简单粗暴:决定机组启停、储能充放电的大方向、EV的充电基准计划,尽量把成本压低。如果只看日前,真实光伏出力跟预测差了20%,日前计划就成了纸上谈兵。如果只看实时,那连机组启停都来不及安排,柴油机冷启动至少得几分钟,光伏瞬间衰落根本没时间反应。所以工程上常用分层调度——日前做经济性优化,日内滚动修正预测偏差,实时层盯住分钟级的功率平衡。这个思路跟开车一样,提前看地图规划路线,到了路口再看路况调整,真遇到突发情况再踩刹车打方向。三层响应速度不同,但目标一致。
另外,不同时间尺度的决策变量性质也不同。日前层的机组启停是整数变量,必须提前定下来,没法到了实时再折腾;日内层与实时层主要是功率分配,连续变量居多,可以在线快速求解。这种"整数变量提前定、连续变量滚动调"的结构,正好是多时间尺度调度的核心逻辑。
1.3 模型里那个"计及灵活性"到底在算什么
灵活性这个词看起来抽象,落到电动汽车上其实可以拆成三个维度:一是功率维度,EV群在同一时刻能充多少、能放多少;二是电量维度,EV群在整个调度时段内能吸收或释放的总能量是多少;三是时间维度,EV能在哪些时段参与调节,接入电网和离开电网的时间窗口在哪。三个维度叠在一起,形成一个动态的可调度区间。普通负荷是刚性的,说多少就是多少;电动汽车的充放电功率在这个区间里可以任意调整,这就是灵活性。模型要做的,就是把这个可调度区间作为约束,写进优化问题里。
这个"计及"二字是重点,不是简简单单把EV当作一堆固定负荷加进去,而是要把EV群在每一时段的功率上下限、电量约束、用户出行保障等条件全部映射进调度模型,让优化器自己去决定每一时段怎么调用这部分灵活性。这样出来的调度方案才是真正"考虑到了"电动汽车,而不是把它当成摆设。
2. 把"灵活性"摊开算:约束、容量与代价
2.1 EV能贡献多少:三个维度
先说功率维度。单台EV通过充电桩接入微网,功率是固定的(比如7kW交流桩,或者更高功率的直流桩)。对聚合群而言,某个时段可以提供的最大充电功率就是所有在线EV的充电上限之和,最大放电功率也是类似累加。不过这里有个细节——一辆车要么在充电,要么在放电,不能同时进行。所以EV群的净功率范围不是简单的对称区间,而是要排除掉"同时充放"这种物理上不存在的组合。建模时常用一个辅助变量区分充/放状态,或者用互补约束把两个方向的功率强行分开。
电量维度更关键。EV电池有SOC上下限,放电太多会导致用户第二天开不了车。所以模型里要给每台EV设一个调度结束时的最低电量约束,这个值不是拍脑袋定的,通常按用户第二天出行里程来估算。比如平均日行驶30公里,百公里电耗15kWh,那至少要保证走完这段路还有富裕,再留一些安全余量,算下来调度SOC下限大概在0.3~0.4。如果用户的出行需求特殊,这个下限也要跟着调。
时间维度也不能忽略。EV不是全天候在线的,日常通勤车一般是早上8点开到单位,接入办公楼充电桩,下午5点离开;另一批是傍晚下班回家,晚上在家里或小区地库充电。这个接入时序直接影响EV群的可调度功率曲线——上午停车场里车最多,可调容量最大;中午过后陆续有车离开,可调区间收窄。所以EV聚合模型需要输入实时的接入状态,或者用历史出行规律做概率预测。我实际做的时候是把一天切成96个时段(15分钟一个点),每一个时段输入"在线车辆数、在线总SOC、可调功率上限",然后按这个时序去搭约束。
2.2 单体建模与聚合集群
单体EV的模型其实很简单,核心就是SOC动态方程:SOC(t+1)=SOC(t)+充电功率效率Δt/电池容量-放电功率/效率*Δt/电池容量。注意充放电效率不是同一个数,放电要打折。有人图省事把效率统一成0.95,算出来的结果偏差不小,尤其是在算电池退化成本的时候,效率误差会被时间放大。
单体模型好写,但把一百台EV的变量都铺进MIP模型里,求解规模会爆炸。我踩过这个坑,最开始按每台EV建SOC变量、功率变量、充放电状态变量,100台车加96时段,整数变量直接过万,求解器跑半小时都出不了好结果。后来改成聚合建模:把同一时段在线、参数相近的EV合并成一个"虚拟电池",只对虚拟电池建SOC状态和功率上下限。聚合之后,一个几百台EV的车队就压缩成一条总功率可调曲线加上一个总容量边界,模型变量数量级一下子降下来。
当然聚合也会丢信息,比如不同EV的SOC下限不同、接入时间不同,如果强行合并,得取最严格的下限和最窄的时间窗,结果偏保守。更精细的做法是先按接入时段和SOC区间分成几组,每组单独聚合,再在模型里并联。我在模拟项目里用的是后一种方案,分组数在5~8个之间,既保住了主要差异,又不会让变量数量失控。
2.3 电池退化成本要不要算
车主的电池被调来调去,充放电循环寿命会有损耗。要是不把这个成本算进目标函数,优化器会觉得"电池随便用不要钱",天天深充深放,算出来的方案经济性很好看,但落不了地。所以模型里要给放电功率加一个退化成本系数,按电池全生命周期循环次数折算。举例来说,一块40kWh的电池,循环寿命按3000次算,电池更换成本按6万元折,每次完整充放循环的等效成本就是20元。按单次循环的吞吐量折算到每kWh,大约0.25元/kWh的放电损耗成本入模型。这个数字不同电池差异很大,但趋势是一致的——调度方案会把临时的深度放电尽量摊在少量EV上,而不是每次都逮着同一批车用。
电池退化成本的另一个作用是改变充放电策略的方向。没有退化成本时,EV群倾向于在电价谷段拼命充电、峰段拼命放电,因为峰谷价差就是利润;加入成本后,只有当峰谷价差超过退化损耗,V2G才真正划算。模拟结果里,加入退化成本之后V2G的总电量下降了不少,但系统总经济性反而更真实,也更接近可落地的情况。
3. 三层模型怎么搭:从日前计划到实时修正
3.1 日前调度层:定基准
日前调度的时间范围是未来24小时,步长我用的1小时,一共24个时段。输入是光伏、风电、常规负荷的日前预测曲线,加上EV接入预测、分时电价。优化的目标函数是系统总运行成本最小化——包括向主网购电的费用、柴油机的燃料成本、储能充放电的损耗成本、EV电池退化成本,以及调度EV参与调节的补偿费用。约束条件包括功率平衡约束、机组出力上下限、爬坡约束、储能SOC和功率约束、EV聚合体的功率与电量边界约束。
这一层的输出就是未来一天各机组的启停状态、出力曲线、储能充放电计划、EV群的充电/放电计划、购电计划。这里要特别注意一个点:EV的日前充电计划在日内层不能随便推翻。如果日前计划安排某批EV晚上充电,日内层又把它们全都停掉,一方面会影响用户的充电进度,另一方面充电桩频繁启停对设备寿命也不友好。所以在日前层输出时,就要给每台/每组EV留出必要的充电余量,不至于让日内层一遇到偏差就得大幅改动。
3.2 日内滚动层:修偏差
日内滚动层的时间窗口一般是未来4小时,步长15分钟。每隔15分钟获取最新一轮的风光、负荷和EV接入状态,然后滚动求解一次优化问题。这一层的目标函数里,除了常规的成本项,还加入了对日前计划的"偏离惩罚"——如果调整后的EV充放电计划与日前基准相差太大,会产生额外的调整成本。这个设计是防止修正太频繁、太激进,把原本平稳的计划搅成一团。
滚动窗口的意义在于"用新信息换精度"。提前一天看的预测误差可能很大,但提前4小时看的预测就准多了,尤其对光伏来说,几小时内的云图变化是有迹可循的。每次滚动求解后,只执行下一个15分钟的计划,剩下的窗口结果下次再重新算。这个"只执行第一步"的策略大家应该都熟,标准的模型预测控制思路。
日内层还要处理一个现实约束:EV的状态可能和日前预测不一致。比如一个车主临时加班,下午不离开停车场,反而多接入了几小时;或者某辆EV提前返程,原本能参与傍晚调峰的车突然少了。这些变化都会反映到最新的接入状态里,日内层必须实时更新这些参数,否则修偏差就修不到点子上。
3.3 实时调整层:稳边界
实时层的时间尺度最短,一般是1~5分钟一个决策点,甚至更短。它负责处理秒级到分钟级的突发事件:光伏被一片云遮住出力骤降、风电短时阵风引起的波动、某个大负荷设备突然投切。这时候再回头调整机组启停或者EV的充放电计划已经来不及,实时层能做的就是利用快速响应的资源——储能变流器、部分响应快的EV充电桩——做功率的快速跟踪,把微网联络线功率偏差压回允许范围。
实时层在我的模型里用的是简化MPC,目标函数是最小化时段内的功率偏差平方和,同时让可调资源出力尽量靠近日内层给的参考值。为什么不能完全放开让实时层自由发挥?因为实时层只盯着眼前的几分钟,如果它大幅度偏离日内计划,会把储能和EV的SOC带到不利于后续时段的轨道上。所以实时层更像是一个"纠偏器",而不是"决策者"。
EV在这个层面的特点是响应速度快,但出力有限。一台7kW的交流桩,从零功率升到满功率不过几秒,比调柴油机快得多。所以在实时层,我把EV群分成快响应组和慢响应组,快的那部分参与实时功率调节,慢的那部分继续按日内计划充电,逻辑清晰,求解也快。
3.4 层间衔接的关键变量
多时间尺度最核心的难点其实不是每一层各自的模型,而是层与层之间的变量怎么衔接。我在跑模型时主要盯四个衔接点:第一,日前层输出的EV群SOC轨迹,作为日内层和实时层的参考基线;第二,日前层的机组启停状态在日内层固定不变,因为机组启停是慢决策,没法滚动优化;第三,储能和EV的可调度边界在每层重新计算,因为SOC状态在每一层结束时是已知的;第四,各层偏差惩罚系数的大小直接决定计划的稳定性和修正的力度,系数调得不好会导致日内层不敢改、实时层疯狂纠偏的局面。
衔接做得好不好,有个很直观的检验方法:跑完一天的仿真,看EV群SOC曲线在层与层交接处是不是光滑。如果出现折线甚至跳变,说明某层约束没写对,或者惩罚系数设置有问题。这个经验是踩坑踩出来的——我第一次跑的时候,日前层给凌晨EV安排的充电功率是满功率,日内层因为预测偏差把功率砍了一半,SOC曲线在凌晨2点出现一个明显的"断崖",当时排查了很久才发现是日内层没有加偏离惩罚。
4. 算例怎么设:参数、约束与求解路线
4.1 一个典型微网的参数配置
我搭建的模拟微网规模大约是这样的:
- 光伏200kW,风电300kW,储能200kW/400kWh,柴油备用机组100kW
- 常规负荷峰值约500kW,其中含一定比例的柔性负荷
- 电动汽车100辆,平均电池容量40kWh,充放电功率上限7kW,充电效率0.95,放电效率0.92
- 分时电价:谷段0.3元/kWh,平段0.6元/kWh,峰段1.1元/kWh
- EV接入规律:40辆车上午接入办公停车场(早8点到晚6点),60辆车傍晚起在小区接入(晚7点到次日早7点)
这个配置不算极端,但足够看出EV参与调度前后的差别。我把它列在下面给各位参考,方便复现时对比。
| 项目 | 数值 | 说明 |
|---|---|---|
| 光伏装机 | 200 kW | 相同条件下出力曲线固定 |
| 风电装机 | 300 kW | 出力按预测序列生成 |
| 储能 | 200 kW / 400 kWh | 充放电效率0.95 |
| 柴油机组 | 100 kW | 启动成本50元/次,发电成本0.8元/kWh |
| EV数量 | 100辆 | 80辆可参与V2G |
| EV电池容量 | 40 kWh | 单体SOC下限0.2,调度后最低0.4 |
| 充电桩功率 | 7 kW | 交流慢充,可双向 |
这里有个参数想强调一下:EV调度后最低SOC设到0.4,不是随意定的。按平均日行驶30公里、百公里15kWh算,跑完第二天至少需要约5kWh,再加上电池本身的安全余量和SOC显示精度误差,留到40%是比较稳妥的。你要是调到0.3,表面上可调容量多了一截,但用户第二天看到剩余电量太低,体验直线下降,车主参与调度的意愿很快就会没了。
4.2 数学建模与变量设计
整个模型在数学上是混合整数线性规划(MILP),因为日前层的机组启停和EV充放电状态都是0/1变量。为了不让变量爆掉,我把EV按接入时段和SOC区间聚合成组,每组是一个"虚拟电池"。这样100辆EV最后只留下5~6个聚合体,每个聚合体有功率上下限约束、SOC动态约束、充放电互斥约束。
目标函数的大致形态是:
min 购电成本 + 柴油机燃料与启动成本 + 储能损耗成本 + EV退化成本 + 偏差惩罚
约束按类别分块:功率平衡约束(发电+购电+放电 = 负荷+充电)、常规机组运行约束、储能约束、EV聚合体约束(SOC递推、功率限幅、充放互斥)、联络线功率限值约束。这些约束写成代码后,逻辑上并不难理解,真正的难点在求解规模的压缩和数值稳定性上。
写代码的时候我建议所有单位统一。模型内部统一用kW和kWh,价格单位用元/kWh,时间步长在日前层是1h、日内层15min。曾经有一次我把日前层时间步长设成15min,想提高分辨率,结果变量数量直接翻了四倍,求解时间从十几秒变成十几分钟,收益却不明显。后来验证下来,日前层用1h,日内层用15min,是一个精度和效率比较均衡的组合。
4.3 求解效率的三个糙招
如果模型太大跑不动,试过下面三个办法,亲测有效:
第一个是变量松弛。把一些不太关键的约束从硬约束变成软约束,加一个大的惩罚系数进目标函数。比如联络线功率限值,平时很少越限,但极端场景一出现,硬约束直接让问题不可行。改成软约束后,极端场景也能求出解,代价是很少会付出大惩罚,数值上稳定很多。
第二个是聚合分组。前面说的EV聚合就是这个思路,可以在建模阶段直接压缩规模。除了EV,储能和常规机组也可以按"等效机组"处理,如果有多台同型号机组,合并成一台容量相加的机组,求解速度立竿见影。
第三个是缩短日内滚动窗口。日内层窗口从4小时缩短到2小时,精度损失很小(因为滚动更新频率不变,信息一直在刷新),求解时间却大幅下降。当然窗口太短也不行,至少要比超短期预测的有效时段长,否则优化器看不到足够远的未来,作出的决策会近视。
5. 结果怎么看:收益数字与五个必踩的坑
5.1 与固定充电模式的对比
为了验证模型的价值,我设了一组对照组:EV不参与调度,到站即充,充到目标SOC为止,其他发电资源照旧运行。对比组则用三层协调模型,让EV在保证用户出行的前提下参与充放电调度。结果有三个比较直观的结论。
第一,系统运行总成本下降了约11%。主要来源是峰时段购电量的减少和柴油机启停次数的下降。EV群在白天光伏大发时段多充电,傍晚峰段放电,把峰谷价差赚了回来,同时也减轻了傍晚联络线的供电压力。
第二,EV群体的电费支出变化更有意思。参与调度后,车主在谷段充电更多、峰段充电更少,加上部分时段放电收益,平均每辆车的日充电电费比固定充电模式少了约两成。这说明激励是有的,只要分时电价的峰谷价差够大,车主愿意让出部分控制权。
第三,光伏利用率提升了。之前中午光伏大发的时候,负荷吃不掉的电只能送出去或者被弃掉。有了EV这个大容量"吸能体",中午的弃光功率大幅减少。模拟结果里光伏消纳率从92%左右提到了98%,别看只是几个点,对于微网的实际收益来说意义不小。
5.2 坑1:模型求解慢,慢到怀疑人生
第一次完整搭建三层联立模型后,我天真地把三层写在一个大模型里跑全天优化,结果就是漫长的等待——两小时起步,偶尔还内存溢出。后来把三层拆开,按时间顺序级联,每层只保留必要的衔接变量,整体仿真一天的耗时降到了十几分钟。这个经验很重要:多时间尺度模型不是说要一次性求解整个大问题,而是用分层滚动的方式,把大问题切成小问题,让每一层在可接受的时间内收敛到稳定解。
另外一个加速办法是给求解器设终止条件。MILP模型的gap不一定要收敛到0,实际工程上gap到2%以内就完全够用了。我后来直接设了2%的MIP gap和300秒的时间上限,90%的算例在时间限制内都能跑出可接受的解,剩下的靠调整初始解解决。
5.3 坑2:用户不响应,模型再漂亮也白搭
调度计划做得再精妙,车主不配合就全部归零。这个问题在模型之外,但又直接影响模型的真实效果。我在模拟里做了两个机制来缓解:一是充电价格分时,谷段电价低、峰段电价高,车主要有动力在谷段充电;二是对参与调度的车主给予额外的放电补偿,让车主觉得"充放电被调度"不是被薅羊毛,而是赚钱的机会。
具体到定价,放电补偿价格设在0.6~0.8元/kWh比较合理,太低车主没兴趣,太高微网侧的购电成本优势就被吃掉了。这个区间是从峰谷价差和电池退化成本里推出来的:峰段电价1.1元,放电减少购电相当于省了1.1元,扣掉退化成本0.25元和损耗,给车主0.7元,微网还能留下可观的收益。补偿价格定成阶梯式,越临近峰段越高,能进一步引导EV集中在最需要的时间点放电。
5.4 坑3:边界时刻的功率失衡
多时间尺度模型最容易出问题的是两类边界时刻:一类是日前计划周期结束和下一个周期开始的交接点;另一类是日内滚动窗口因为EV离开时间变化造成的接入状态突变。这些时刻容易出功率失衡,表现就是某时段的功率平衡约束被破坏,或者EV群的SOC轨迹出现跳变。
排查这类问题,我建议先画SOC轨迹图和功率平衡偏差图,用肉眼看出跳变位置,再去对应时段检查接入状态和预测数据,通常很快能定位。还有个小技巧:在约束里给EV群的SOC加一个松弛量,允许在边界处有极小的电量偏差,可以极大降低不可行解的频次。SOC上差个0.5%的电,对调度结果的影响微乎其微,但对数值求解器的友好度提升很明显。
5.5 坑4:退化成本失真导致方案误导
电池退化成本系数如果设得太低,优化器会倾向于让EV频繁深度放电,算出来的V2G放电量特别高,系统成本也特别低。但真按这个方案运行,三个月后车主的电池健康度会明显下降,项目口碑直接崩。如果系数设得过高,EV的放电量又会被压到几乎没有,灵活性又用不上,等于白搭。
我的经验是先按电池的全生命周期成本算出一个基准值,再按"谷电充电成本+退化成本 < 峰段放电收益"这个条件去校验。如果一个调度方案里,某时段的放电收益连退化成本都覆盖不了,那方案本身就是不合理的。把基准值反过来代入模型,看V2G的电量占比是否在合理区间(一般在总充电量的10%~20%),就知道系数设得对不对了。
我在最后跑出来的那版模型里,EV日均充放电量占充电量的比例大约在15%左右,算出的V2G收益扣除退化成本后还有正向盈余。这个结果让我确认,切入参数没有偏离实际,方案能在保证电池健康的前提下,真正把"计及电动汽车灵活性"这件事落到经济性上。
整个过程跑下来,我对多时间尺度调度这个事最大的体会是:模型做得再复杂,最后能落地的往往是那些把约束写清楚、把参数校准确的朴实方案。电动汽车的灵活性不是天上掉下来的,而是靠精打细算的功率边界、电量边界、时间边界一层层约束出来的。如果你正在做类似的微网调度项目,建议先把EV的接入时序和SOC下限这两块吃透,再去追求算法的花活——这两个参数一旦拍脑袋,后面全盘皆输。