微电网作为分布式能源系统的重要实现形式,其电源容量配置直接关系到系统经济性和可靠性。传统确定性优化方法在面对可再生能源出力波动、负荷变化等不确定因素时,往往表现出配置保守或风险过高的问题。两阶段鲁棒优化算法通过构建不确定集来描述这些波动,能够在最恶劣场景下保证系统可行性,同时实现经济性最优。
我在参与某海岛微电网项目时深有体会:当柴油发电机容量按典型日负荷配置后,遇到连续阴雨天导致光伏出力骤降时,系统不得不高价调用应急电源。而采用鲁棒优化方法后,虽然初始投资增加约15%,但运行阶段再未出现供电短缺情况,全生命周期成本反而降低8.7%。
该算法的核心思想是将决策变量分为两类:
数学模型可表述为:
matlab复制min_x c^T x + max_u min_y d^T y
s.t. Ax ≥ b
By ≥ h - Ex - Fu
y ∈ Y, u ∈ U
其中x为容量配置变量,y为运行变量,u为不确定参数。
通过对偶变换将内层max-min问题转换为单层优化:
matlab复制max_u min_y d^T y → min_λ ρ(λ)
其中ρ(λ)为对偶问题目标函数,需引入辅助变量和约束。
matlab复制% 光伏出力不确定集(箱型集合)
P_pv_uncertainty = 0.3; % 波动幅度30%
U.pv = [P_pv_nominal*(1-P_pv_uncertainty), P_pv_nominal*(1+P_pv_uncertainty)];
% 负荷不确定集(多面体集合)
Gamma = 3; % 不确定预算参数
U.load = struct('Gamma', Gamma, 'delta', 0.2);
采用YALMIP工具箱构建模型:
matlab复制ops = sdpsettings('solver','gurobi','verbose',1);
% 第一阶段变量
x = sdpvar(n_gen,1); % 发电机容量
% 第二阶段变量
y = sdpvar(n_time, n_gen, 'full'); % 出力调度
% 目标函数
objective = c'*x + max_regret;
% 约束条件
constraints = [x >= 0, sum(y,2) >= demand];
optimize(constraints, objective, ops);
采用列约束生成(C&CG)算法:
matlab复制while gap > tolerance
% 求解主问题
[x_opt, obj_main] = solve_master();
% 求解最恶劣场景子问题
[u_worst, obj_sub] = solve_subproblem(x_opt);
% 收敛判断
gap = abs(obj_main - obj_sub)/obj_main;
% 添加新约束
master_constraints = [master_constraints,
new_constraint(x, u_worst)];
end
matlab复制Gamma_list = 1:5;
parfor i = 1:length(Gamma_list)
results(i) = solve_case(Gamma_list(i));
end
通过调节不确定预算参数Γ实现风险-成本权衡:
matlab复制if load_variation > threshold
Gamma = min(Gamma + 1, Gamma_max);
else
Gamma = max(Gamma - 1, 1);
end
某工业园区微网配置参数:
matlab复制cost = [1500 2000 800]; % 光伏/风电/储能元/kW
load_profile = csvread('load_data.csv');
renewable_profile = csvread('pv_wind_data.csv');
优化结果对比:
| 配置方案 | 初始投资(万) | 缺电概率 | 最恶劣场景成本 |
|---|---|---|---|
| 确定性优化 | 320 | 8.2% | 45.6 |
| 鲁棒优化(Γ=3) | 368 | 0% | 38.2 |
| 鲁棒优化(Γ=5) | 412 | 0% | 36.8 |
数据预处理要点:
matlab复制P_pv = P_rated * G/G_std * (1 - 0.005*(T_amb - 25));
模型扩展方向:
代码优化技巧:
关键提醒:鲁棒优化结果对不确定集定义非常敏感,建议通过历史数据统计确定合理的波动范围,避免过度保守配置。在实际项目中,我们通常先进行概率优化得到基准值,再以±20%作为初始不确定集范围。