1. 微电网优化调度与YALMIP工具箱概述
微电网作为分布式能源系统的重要实现形式,其核心挑战在于如何协调多种能源(光伏、风电、储能等)的出力,以满足负荷需求并实现经济运行。传统手工计算难以处理这类多约束、多目标的复杂优化问题,这正是MATLAB中YALMIP工具箱大显身手的场景。
YALMIP(Yet Another LMI and MINLP Parser)是MATLAB环境下著名的建模语言和优化求解器接口。它最大的价值在于:
- 提供统一的建模语法,将优化问题转化为数学表达式
- 自动连接CPLEX、Gurobi等商业求解器,也支持开源求解器
- 特别适合处理混合整数规划(MILP)、二次约束规划(QCQP)等复杂问题
在微电网调度中,我们通常需要建立包含以下要素的优化模型:
matlab复制% 典型微电网调度模型框架
变量 = sdpvar(n,m,'类型'); % 定义决策变量
目标函数 = 表达式; % 如总发电成本最小
约束条件 = [约束1; 约束2; ...]; % 设备物理约束、功率平衡等
优化选项 = sdpsettings('求解器','cplex');
结果 = optimize(约束条件,目标函数,优化选项);
关键提示:YALMIP本身不是求解器,而是"翻译器"。实际计算性能取决于底层求解器(如CPLEX)的算法实现。对于学术用途,可选用GPLK或CBC等开源求解器;商业项目建议购买CPLEX/Gurobi许可证。
2. 微电网调度模型构建详解
2.1 系统架构与参数定义
考虑一个包含光伏阵列、风力涡轮机、柴油发电机和锂离子电池的典型微电网,其调度周期设为24小时(Δt=1h)。首先需要定义物理参数:
matlab复制% 设备参数
PV_capacity = 500; % 光伏装机容量(kW)
WT_capacity = 300; % 风机容量(kW)
DG_min = 50; % 柴油机最小出力(kW)
DG_max = 400; % 柴油机最大出力(kW)
Batt_capacity = 600; % 电池额定容量(kWh)
Batt_SOC_min = 0.2; % 最小荷电状态
Batt_SOC_max = 0.9; % 最大荷电状态
% 预测数据(实际工程中应从SCADA读取)
PV_pred = [0,0,0,0,50,120,...,0]; % 光伏出力预测
Load_profile = [200,180,...,250]; % 负荷需求曲线
2.2 决策变量设置
使用sdpvar定义优化变量,注意变量维度与类型的正确选择:
matlab复制% 连续变量
P_PV = sdpvar(24,1); % 光伏实际出力
P_WT = sdpvar(24,1); % 风机出力
P_DG = sdpvar(24,1); % 柴油机出力
P_batt_ch = sdpvar(24,1);% 电池充电功率
P_batt_dis = sdpvar(24,1);% 电池放电功率
SOC = sdpvar(24,1); % 电池荷电状态
% 二元变量(需要用binvar)
u_DG = binvar(24,1); % 柴油机启停状态
u_batt_ch = binvar(24,1);% 充电状态标志
u_batt_dis = binvar(24,1);% 放电状态标志
2.3 目标函数构建
以总运行成本最小化为目标,包含燃料成本和设备启停成本:
matlab复制% 柴油发电成本(二次函数)
a = 0.0024; b = 0.5; c = 10; % 成本系数
fuel_cost = sum(a*P_DG.^2 + b*P_DG + c);
% 启停惩罚成本
startup_cost = 30 * sum(diff([0; u_DG]) == 1);
% 总目标函数
total_cost = fuel_cost + startup_cost;
2.4 约束条件实现
2.4.1 功率平衡约束
每个时段发电与负荷必须平衡:
matlab复制power_balance = [];
for t = 1:24
power_balance = [power_balance;
P_PV(t) + P_WT(t) + P_DG(t) + P_batt_dis(t) - P_batt_ch(t) == Load_profile(t)];
end
2.4.2 设备运行约束
柴油发电机约束:
matlab复制DG_constraints = [];
for t = 1:24
DG_constraints = [DG_constraints;
P_DG(t) <= DG_max * u_DG(t); % 启停约束
P_DG(t) >= DG_min * u_DG(t);
DG_ramp_down <= P_DG(t+1)-P_DG(t) <= DG_ramp_up]; % 爬坡约束
end
电池储能系统约束(特别注意充放电互斥):
matlab复制batt_constraints = [];
for t = 1:24
batt_constraints = [batt_constraints;
P_batt_ch(t) <= Batt_max_ch * u_batt_ch(t);
P_batt_dis(t) <= Batt_max_dis * u_batt_dis(t);
u_batt_ch(t) + u_batt_dis(t) <= 1; % 互斥约束
SOC(t) == SOC(t-1) + (η_ch*P_batt_ch(t) - P_batt_dis(t)/η_dis)/Batt_capacity;
SOC(t) >= Batt_SOC_min;
SOC(t) <= Batt_SOC_max];
end
3. 模型求解与结果分析
3.1 求解器配置与计算
推荐使用CPLEX求解混合整数规划问题:
matlab复制options = sdpsettings('verbose',1,'solver','cplex',...
'cplex.timelimit',3600,'cplex.mip.tolerances.mipgap',0.01);
diagnostics = optimize([power_balance; DG_constraints; batt_constraints],...
total_cost, options);
if diagnostics.problem == 0
disp('优化成功!');
P_DG_opt = value(P_DG); % 获取最优解
SOC_opt = value(SOC);
else
error('求解失败:%s',diagnostics.info);
end
3.2 结果可视化分析
绘制各设备出力曲线和SOC变化:
matlab复制figure;
subplot(3,1,1);
plot(1:24, [value(P_PV)', value(P_WT)', value(P_DG)']);
legend('光伏','风机','柴油机');
title('电源出力分配');
subplot(3,1,2);
bar(1:24, [value(P_batt_ch)'; -value(P_batt_dis)'], 'stacked');
title('电池充放电功率');
subplot(3,1,3);
plot(1:24, SOC_opt, 'LineWidth',2);
ylim([0 1]);
title('电池荷电状态(SOC)');
典型优化结果会显示:
- 光伏/风电优先被消纳(零边际成本)
- 柴油机在可再生能源不足时按经济调度原则启动
- 电池在电价低谷时段充电、高峰时段放电
4. 工程实践中的关键问题
4.1 预测误差处理
实际应用中需考虑可再生能源预测的不确定性,常用方法包括:
- 鲁棒优化:设置预测误差区间
matlab复制PV_actual = PV_pred + delta_PV;
constraints = [constraints, -PV_deviation <= delta_PV <= PV_deviation];
- 随机规划:生成多个场景进行期望值优化
- 模型预测控制(MPC):滚动优化与反馈校正
4.2 整数变量简化技巧
混合整数规划计算量随整数变量数量指数增长,可通过以下方法加速:
- 松弛法:先求解连续松弛问题,再固定部分变量
- 启发式规则:根据物理限制预先确定部分时段状态
- 时间聚合:对相似时段进行合并处理
4.3 模型调试建议
遇到求解困难时,建议:
- 先验证连续变量模型的可行性
- 逐步添加整数变量和复杂约束
- 使用
checkset检查约束冲突:
matlab复制[~, conflict] = checkset([power_balance; DG_constraints]);
if any(conflict)
disp('存在冲突约束:');
find(conflict)
end
5. 模型扩展方向
5.1 多目标优化
引入碳排放目标形成Pareto前沿:
matlab复制carbon_emission = sum(α*P_DG); % 碳排放量
% 使用ε-约束法
optimize([constraints, carbon_emission <= ε], total_cost);
5.2 需求响应集成
考虑可调节负荷的参与:
matlab复制P_DR = sdpvar(24,1); % 需求响应量
constraints = [constraints,
DR_min <= P_DR <= DR_max,
sum(P_DR) == 0]; % 总量平衡
5.3 配电网交互
增加与主网的功率交换约束:
matlab复制P_grid = sdpvar(24,1);
constraints = [constraints,
-Transformer_capacity <= P_grid <= Transformer_capacity,
power_balance += P_grid]; % 修改功率平衡式
在长期项目实践中,我发现微电网优化模型的准确性高度依赖设备参数的实测标定。特别是柴油机的耗量曲线系数和电池的衰减特性,建议至少每季度进行一次现场测试更新模型参数。此外,对于包含超过10个分布式电源的大型微电网,可以考虑采用分层分布式优化架构来降低计算复杂度。
