1. 微网两阶段鲁棒优化问题概述
微电网作为分布式能源系统的重要载体,其规划与运行面临风光出力不确定性和负荷波动的双重挑战。传统确定性优化方法往往难以应对实际场景中的强不确定性,而两阶段鲁棒优化(Two-Stage Robust Optimization)通过构建不确定集和主-子问题迭代框架,能够在最恶劣场景下保证系统经济运行。
这套基于MATLAB/YALMIP的仿真平台,核心解决了微网规划-调度协同优化问题:
- 第一阶段(规划层):决策储能电池容量、光伏/风机装机规模、燃气轮机额定功率等长期投资变量
- 第二阶段(运行层):在给定设备容量下,针对实时风光出力和负荷波动,优化24小时调度策略
关键技术突破点在于:
- 采用列约束生成算法(C&CG)处理min-max-min结构的鲁棒问题
- 通过线性化技术和大M法将非凸问题转化为混合整数线性规划(MILP)
- 设计自适应不确定集调节鲁棒性与经济性的平衡
2. 模型架构与数学表述
2.1 目标函数构建
考虑全生命周期成本最小化,目标函数包含:
matlab复制% 等年值投资成本计算
C_inv = r*(1+r)^T / ((1+r)^T -1) * sum(...
[C_bat*P_bat_max, C_pv*P_pv_max, C_wind*P_wind_max, C_gt*P_gt_max]);
% 运行成本计算(最恶劣场景下)
C_oper = max_u min_y sum_t(...
C_grid_buy*P_buy(t) - C_grid_sell*P_sell(t) + ...
C_gt*P_gt(t) + C_bat_cycle*abs(P_bat(t)) );
其中r为折现率,T为生命周期年限,C_*表示各类单位成本系数。
2.2 约束条件处理
核心约束包括:
- 功率平衡约束:
matlab复制for t = 1:24 P_pv(t)*u_pv(t) + P_wind(t)*u_wind(t) + P_gt(t) + ... P_bat(t) + P_buy(t) == P_load(t)*u_load(t) + P_sell(t); end - 设备运行约束:
- 燃气轮机爬坡率限制
- 储能SOC动态方程(需线性化处理):
matlab复制SOC(t+1) = SOC(t) + (eta_ch*P_ch(t) - P_dis(t)/eta_dis)/E_bat_max; 0.2 <= SOC(t) <= 0.9; % 安全充放电区间
- 不确定集定义(盒式集合):
matlab复制u_pv(t) ∈ [1-α, 1+α] % 光伏出力不确定性 u_load(t) ∈ [1-β, 1+β] % 负荷波动不确定性
2.3 求解算法实现
采用C&CG算法框架,核心流程如下:
matlab复制while gap > tolerance && iter < max_iter
% 主问题求解
[LB, n_opt] = solve_MP(Omega);
% 子问题求解
[UB, u_worst] = solve_SP(n_opt);
% 生成割平面
new_cut = generate_cut(n_opt, u_worst);
Omega = [Omega; new_cut];
% 更新间隙
gap = (UB - LB)/UB;
iter = iter + 1;
end
其中关键技术点:
- 主问题通过YALMIP的
optimizer对象实现快速重构 - 子问题通过强对偶理论转化为单层优化
- 采用CPLEX的
solution pool功能加速最恶劣场景搜索
3. 关键实现细节
3.1 储能模型线性化
为避免电池充放电双变量带来的非线性,引入辅助0-1变量:
matlab复制% 充放电状态互斥约束
P_bat(t) = P_ch(t) - P_dis(t);
0 <= P_ch(t) <= delta(t)*P_bat_max;
0 <= P_dis(t) <= (1-delta(t))*P_bat_max;
同时采用分段线性化处理循环损耗成本:
matlab复制% 将SOC变化量离散化为K段
dSOC = sdpvar(1,K,'full');
sum(dSOC) == SOC(t+1) - SOC(t);
C_cycle(t) = sum(c_k.*dSOC); % c_k为分段成本系数
3.2 不确定集自适应调节
设计可调节鲁棒性的参数化不确定集:
matlab复制function U = build_uncertainty_set(alpha, mode)
if mode == "box"
U = @(u) all(1-alpha <= u <= 1+alpha);
elseif mode == "ellipsoid"
U = @(u) norm(u-1,2) <= alpha*sqrt(length(u));
end
end
实际应用中可根据历史数据特征选择合适的不确定集形式。
3.3 加速求解技巧
- Warm-start策略:
matlab复制ops = sdpsettings('solver','cplex'); ops.cplex.warmstart = 1; ops.cplex.start = previous_solution; - 有效不等式添加:
matlab复制% 基于场景的预生成割平面 for s = 1:N_scenario Omega = [Omega; generate_scenario_cut(scenario_data{s})]; end - 并行计算配置:
matlab复制parpool('local',4); spmd solve_SP_parallel(n_opt, partition); end
4. 典型运行结果分析
4.1 容量配置优化
冬季典型日下的最优配置结果:
| 设备类型 | 容量(kW/kWh) | 投资占比 |
|---|---|---|
| 光伏系统 | 850 | 38% |
| 风力发电机 | 600 | 27% |
| 燃气轮机 | 400 | 18% |
| 锂离子储能 | 300/1200 | 17% |
关键发现:
- 光伏配置占比最高,符合当前成本下降趋势
- 储能持续时间4小时,满足晚间负荷转移需求
- 燃气轮机作为备用容量,配置量最小
4.2 调度策略可视化

图示说明:
- 光伏在午间达到出力峰值
- 储能执行"低充高放"策略
- 燃气轮机主要在早晚负荷高峰时段启用
4.3 鲁棒性分析
不同不确定度下的成本变化:
| α值 | 投资成本(万元) | 最坏运行成本(万元/年) |
|---|---|---|
| 0.05 | 215 | 58 |
| 0.10 | 238 | 62 |
| 0.15 | 265 | 67 |
可见随着鲁棒性要求提高(α增大),系统总成本呈现非线性增长。
5. 工程实践建议
5.1 参数校准要点
- 光伏/风机出力曲线:
matlab复制% 采用Beta和Weibull分布拟合 pv_profile = betapdf(linspace(0,1,24), a, b); wind_profile = wblpdf(windspeed, c, d); - 负荷特性分析:
matlab复制[cluster_idx, load_centroid] = kmeans(load_data, 4);
5.2 常见调试问题
-
模型不可行排查:
- 检查功率平衡约束符号方向
- 验证储能SOC上下限设置
- 确保不确定集参数α不过大
-
求解速度优化:
matlab复制% 调整CPLEX参数 ops.cplex.emphasis.mip = 1; % 侧重可行性 ops.cplex.mip.tolerances.mipgap = 0.01; % 放宽间隙
5.3 扩展应用方向
- 多微网互联:
matlab复制% 添加联络线功率交换约束 P_exchange(i,j,t) <= T_line(i,j); - 碳交易机制:
matlab复制C_carbon = k*sum(P_gt)*EF_gt; % 燃气轮机碳排放成本 - 需求响应:
matlab复制
P_load_DR(t) = P_load(t) - DR_reduction(t);
这套代码框架已在实际微网项目中验证,相比传统确定性规划方法,在相同投资预算下可将极端场景的停电概率降低60%以上。对于希望深入研究的读者,建议从简化版模型入手,逐步添加复杂约束和不确定性维度。