1. 多源联合电力系统优化调度概述
在现代电力系统中,风光等可再生能源的大规模并网给传统电网运行带来了新的挑战。风电和光伏发电具有显著的间歇性和波动性特征,而火电机组虽然调节性能较好但响应速度有限。抽水蓄能和蓄电池作为两种重要的储能技术,在平抑可再生能源波动、参与系统调频调压等方面发挥着关键作用。
多源联合系统优化调度的核心目标是在满足电力供需平衡的前提下,协调五种电源(风电、光伏、火电、抽水蓄能、蓄电池)的出力,实现系统运行的经济性、安全性和环保性最优。这需要考虑多种约束条件,包括:
- 各类电源的物理特性约束(如火电机组的最小技术出力、爬坡速率)
- 抽水蓄能电站的水库容量限制
- 蓄电池的充放电效率与循环寿命
- 电网的潮流安全约束
- 可再生能源的预测精度与不确定性
2. 系统建模与数学表达
2.1 目标函数构建
典型的多源联合系统优化调度采用经济性最优作为目标,可表示为:
min Σ(C_coal + C_pump + C_batt + C_penalty)
其中:
- C_coal为火电机组燃料成本,通常为二次函数:
C_coal = a·P_coal² + b·P_coal + c - C_pump为抽水蓄能运行成本,包括抽水耗电成本和机组维护成本
- C_batt为蓄电池循环老化成本,与充放电深度(DOD)相关
- C_penalty为功率缺额惩罚项,确保系统可靠性
2.2 关键约束条件
-
功率平衡约束:
P_wind + P_pv + P_coal + P_pump + P_batt = P_load + P_loss -
火电机组约束:
- 出力上下限:P_coal_min ≤ P_coal ≤ P_coal_max
- 爬坡速率:|P_coal(t) - P_coal(t-1)| ≤ ΔP_coal_max
-
抽水蓄能约束:
- 水库容量:V_min ≤ V(t) ≤ V_max
- 抽水/发电模式互斥
- 能量守恒:V(t) = V(t-1) + η_pump·P_pump_in - P_pump_out/η_gen
-
蓄电池约束:
- SOC管理:SOC_min ≤ SOC(t) ≤ SOC_max
- 充放电功率限制
- 循环寿命模型:Deg = f(DOD, T, rate)
-
可再生能源预测误差处理:
采用鲁棒优化或随机规划方法处理风光出力的不确定性
3. MATLAB实现关键技术
3.1 YALMIP建模框架
YALMIP是MATLAB中强大的优化建模工具,其核心优势在于:
- 直观的数学表达式描述
- 自动导数计算与模型转换
- 支持多种求解器接口
典型建模步骤:
matlab复制% 定义决策变量
P_coal = sdpvar(T,1); % 火电出力
P_pump = sdpvar(T,1); % 抽蓄出力
P_batt = sdpvar(T,1); % 电池出力
% 目标函数
Objective = sum(a*P_coal.^2 + b*P_coal + c);
% 添加约束
Constraints = [sum(P_coal + P_wind + P_pv + P_pump + P_batt) == P_load,
P_coal_min <= P_coal <= P_coal_max];
% 求解
options = sdpsettings('solver','cplex');
optimize(Constraints,Objective,options);
3.2 CPLEX求解器配置
CPLEX是IBM开发的商业优化求解器,在处理混合整数规划问题时表现出色。关键配置参数:
matlab复制options = sdpsettings('solver','cplex',...
'cplex.timelimit',3600,...
'cplex.mip.tolerances.mipgap',0.001,...
'cplex.mip.strategy.heuristicfreq',100);
实际应用中需注意:
- 根据问题规模合理设置求解时间限制
- MIP gap参数影响求解精度与速度的权衡
- 启发式策略可加速可行解获取
3.3 多时间尺度协调
完整的多源调度通常包含三个时间尺度:
- 日前调度(24小时,15分钟间隔)
- 日内滚动修正(1小时,5分钟间隔)
- 实时控制(秒级)
MATLAB实现时需要建立时间耦合约束:
matlab复制for t = 2:T
Constraints = [Constraints,
-ramp_down <= P_coal(t)-P_coal(t-1) <= ramp_up];
end
4. 实际工程问题与解决方案
4.1 可再生能源预测误差处理
风光预测误差会导致调度计划出现偏差,常用解决方法:
- 随机规划方法:
matlab复制% 生成场景树
scenarios = generate_scenarios(P_wind_forecast, error_dist);
% 多场景优化
for s = 1:N_scenarios
Constraints_s = [Constraints,
P_wind_actual == scenarios(s).P_wind];
Objective = Objective + prob(s)*(...);
end
- 鲁棒优化方法:
matlab复制% 定义不确定集
P_wind_actual = P_wind_forecast + delta;
Constraints = [Constraints, uncertain(delta)];
Constraints = [Constraints, -delta_max <= delta <= delta_max];
% 鲁棒对等式转换
[RobustConstraints,robustObjective] = robustify(Constraints,Objective);
4.2 混合整数问题求解加速
抽水蓄能和蓄电池的启停状态会引入整数变量,导致问题复杂度剧增。加速技巧包括:
- 有效不等式添加:
matlab复制% 抽蓄最小运行时间约束
for t = 1:T-min_up_time
Constraints = [Constraints,
sum(u_pump(t:t+min_up_time-1)) >= min_up_time*(u_pump(t)-u_pump(t-1))];
end
- 启发式初始解生成:
matlab复制% 基于规则生成初始解
x0.P_coal = heuristic_initial_solution(load, wind);
options = sdpsettings(options,'usex0',1);
- 问题分解策略:
- 按时间分段求解
- 按电源类型分解
- Benders分解等数学分解方法
5. 完整案例实现
5.1 测试系统参数
构建一个包含以下电源的测试系统:
- 300MW燃煤电厂(最小出力30%)
- 150MW风电场
- 100MW光伏电站
- 200MW抽水蓄能(效率75%)
- 50MW/200MWh锂电池储能
5.2 MATLAB实现步骤
- 数据准备:
matlab复制% 负荷曲线
load_profile = xlsread('load_data.xlsx');
% 可再生能源预测
wind_forecast = get_wind_forecast(date);
pv_forecast = get_pv_forecast(date, weather);
- 优化模型构建:
matlab复制% 定义24小时时间尺度
T = 24; hours = 1:T;
% 决策变量
P_coal = sdpvar(T,1); % 火电出力
P_pump = sdpvar(T,1); % 抽蓄出力
u_pump = binvar(T,1); % 抽蓄状态
P_batt = sdpvar(T,1); % 电池出力
SOC = sdpvar(T,1); % 电池SOC
% 目标函数
fuel_cost = sum(0.0002*P_coal.^2 + 20*P_coal + 100);
pump_cost = sum(30*abs(P_pump));
batt_cost = sum(0.1*(P_batt.^2));
Objective = fuel_cost + pump_cost + batt_cost;
% 约束条件
Constraints = [];
% 功率平衡
for t = 1:T
Constraints = [Constraints,
P_coal(t) + wind_forecast(t) + pv_forecast(t) + ...
P_pump(t) + P_batt(t) == load_profile(t)];
end
% 火电约束
Constraints = [Constraints,
90 <= P_coal <= 300,
-50 <= diff(P_coal) <= 50];
% 抽蓄约束
for t = 1:T
Constraints = [Constraints,
-200*u_pump(t) <= P_pump(t) <= 200*u_pump(t),
sum(u_pump(max(1,t-5):t)) >= 6*(u_pump(t)-u_pump(max(1,t-1)))];
end
% 电池约束
Constraints = [Constraints,
-50 <= P_batt <= 50,
0.2 <= SOC <= 0.9,
SOC(1) == 0.5];
for t = 2:T
Constraints = [Constraints,
SOC(t) == SOC(t-1) - P_batt(t-1)/200];
end
- 模型求解与结果分析:
matlab复制% 求解
options = sdpsettings('solver','cplex','verbose',1);
optimize(Constraints,Objective,options);
% 结果提取
P_coal_opt = value(P_coal);
P_pump_opt = value(P_pump);
P_batt_opt = value(P_batt);
% 可视化
figure;
plot(hours,load_profile,'k-',hours,P_coal_opt,'r-',...);
legend('负荷','火电','风电','光伏','抽蓄','电池');
xlabel('时间(h)'); ylabel('功率(MW)');
5.3 典型结果分析
优化调度结果通常呈现以下特征:
- 火电机组承担基荷,平滑出力
- 抽水蓄能在负荷高峰时段发电,低谷时段抽水
- 蓄电池快速响应可再生能源波动
- 风光全额消纳,仅在极端情况下弃风弃光
通过灵敏度分析可以发现:
- 抽蓄效率提升1%可降低总成本约0.3%
- 电池功率容量增大可更好平抑短期波动
- 预测误差增大会显著增加备用成本
6. 工程实践中的经验技巧
- 模型简化策略:
- 对远时间段的时段适当合并(如后12小时合并为4个时段)
- 对同类机组进行聚合等效
- 忽略对结果影响小的非线性项
- 求解加速技巧:
matlab复制% 使用warm start
options = sdpsettings(options,'cplex.advance',1);
% 并行计算设置
options = sdpsettings(options,'cplex.parallel',1);
options = sdpsettings(options,'cplex.threads',4);
- 结果验证方法:
- 检查功率平衡误差应<0.1%
- 验证储能SOC始终在合理范围内
- 检查各电源出力不越限
- 代码优化建议:
- 避免在循环中重复构建约束矩阵
- 使用稀疏矩阵存储大型约束
- 对固定参数预计算
在实际项目中,我们发现在MATLAB R2021b版本中,使用YALMIP R20200930配合CPLEX 12.10可以获得较好的求解性能。对于包含1000多个变量的24小时调度问题,通常在5分钟内可以求得gap<1%的满意解。
