3. 经典调度算法回顾:基于规则的方法、LP与MILP基础
各位同学,今天我们来聊聊储能调度里最经典的几类算法。说实话,很多刚入行的朋友一上来就追着深度学习跑,结果发现落地时连最基本的规则方法都没搞透。我个人习惯是,先把这些“老家伙”吃透,再去碰那些花里胡哨的新东西。
为什么?因为在实际项目中,80%的场景用规则或线性规划就能解决。剩下的20%,才是MILP和强化学习的战场。好,我们一个一个来看。
3.1 基于规则的方法:阈值控制
这是最朴素、也最可靠的方法。说白了,就是“如果…那么…”的逻辑判断。我在早期做家庭储能项目时,用的就是这招。
核心思想:设定几个关键阈值,比如电池SOC(荷电状态)、电价、负载功率。当某个条件触发时,执行预设动作。
典型规则示例:
- 如果SOC < 20%,且电价低于0.3元/kWh,则充电
- 如果SOC > 80%,且电价高于0.8元/kWh,则放电
- 如果负载功率 > 额定功率的90%,立即放电支撑
# 伪代码示例:阈值控制调度
def threshold_schedule(soc, price, load):
if soc < 0.2 and price < 0.3:
return "CHARGE"
elif soc > 0.8 and price > 0.8:
return "DISCHARGE"
elif load > 0.9 * rated_power:
return "DISCHARGE"
else:
return "IDLE"
我的经验:阈值控制最大的优点是快——毫秒级响应。但缺点也很明显:它不考虑未来。比如你刚放完电,半小时后电价更高了,但SOC已经空了。嗯,这就是“短视”问题。
3.2 线性规划(LP):让数学帮你做决策
阈值控制搞不定的时候,就该LP上场了。你想想看,如果我们能用一个数学公式描述整个调度问题,然后让计算机找到最优解,是不是更靠谱?
LP的三个要素:
- 决策变量:比如每个时段的充放电功率
- 目标函数:比如最小化总用电成本
- 约束条件:比如SOC范围、功率限制、能量守恒
我曾经在一个工业园区项目中,用LP帮客户每天省了约15%的电费。当时他们用的是纯规则方法,我换成LP后,效果立竿见影。
# LP模型示例(简化版)
# 决策变量:P_charge[t], P_discharge[t]
# 目标:最小化总成本
minimize sum(price[t] * (P_buy[t] - P_sell[t]))
# 约束
SOC[t] = SOC[t-1] + η_charge * P_charge[t] - P_discharge[t] / η_discharge
0 <= SOC[t] <= SOC_max
0 <= P_charge[t] <= P_charge_max
0 <= P_discharge[t] <= P_discharge_max
P_buy[t] = P_load[t] + P_charge[t] - P_discharge[t] - P_pv[t]
注意:LP要求所有变量都是连续的。但现实中,储能系统往往有“要么充要么放”的互斥约束。这时候LP就无能为力了。我曾经踩过这个坑——用LP算出来的结果,充放电同时为正,物理上根本不可能实现。
3.3 混合整数线性规划(MILP):解决LP搞不定的问题
MILP就是在LP的基础上,加入了整数变量。说白了,就是多了个“开关”。
为什么需要整数变量?
- 充放电互斥:引入二进制变量 y[t] ∈ {0,1}
- 启停成本:每次启动有固定成本
- 设备数量:比如“最多同时运行3台机组”
# MILP模型:充放电互斥约束
# y[t] = 1 表示充电,y[t] = 0 表示放电
P_charge[t] <= P_charge_max * y[t]
P_discharge[t] <= P_discharge_max * (1 - y[t])
y[t] ∈ {0, 1}
关键区别:
| 特性 | LP | MILP |
|---|---|---|
| 变量类型 | 连续 | 连续 + 整数 |
| 求解速度 | 快(秒级) | 慢(分钟级甚至更久) |
| 适用场景 | 连续调度 | 离散决策 |
| 最优性保证 | 全局最优 | 全局最优(但求解时间长) |
避坑指南:我曾经在一个48时段的调度问题中,用MILP跑了整整3个小时还没出结果。后来我把时间粒度从15分钟改成1小时,问题规模缩小了4倍,求解时间降到了2分钟。记住:MILP的求解时间随整数变量数量指数增长。能用LP就别用MILP,能用启发式就别用精确算法。
3.4 三种方法的对比与选择
好,我们来总结一下。这三种方法各有各的脾气:
- 阈值控制:简单、快、但短视。适合小型系统或作为后备策略。
- LP:能处理连续变量、有全局视野。适合电价预测准确、设备约束简单的场景。
- MILP:能处理离散决策、精度最高。但求解慢,适合离线优化或小规模问题。
我个人习惯是:先用阈值控制搭个基线,再用LP做精细优化。如果发现LP结果不可行(比如充放电同时出现),再升级到MILP。别一上来就上MILP,否则你可能会像我一样,等结果等到怀疑人生。