微电网作为分布式能源系统的重要组成部分,其经济调度问题一直是能源领域的研究热点。传统确定性优化方法在面对可再生能源出力波动、负荷变化等不确定性因素时往往表现不佳。两阶段鲁棒优化模型通过min-max-min的三层结构,能够在最恶劣场景下找到运行成本最低的调度方案,为微电网运行提供了更强的鲁棒性保障。
min-max-min结构的两阶段鲁棒优化模型可以分解为三个层次:
这种结构本质上是在寻找"最坏情况下最好"的解决方案,与随机优化相比具有以下优势:
在具体实现中,我们需要对微电网各组件建立精确的数学模型:
发电单元约束:
matlab复制% 燃机出力约束
constraints = [constraints, P_gas >= U_gas*Pmin_gas, P_gas <= U_gas*Pmax_gas];
% 启停逻辑约束
constraints = [constraints, U_gas(2:T) >= U_gas(1:T-1) - U_down_gas];
constraints = [constraints, U_gas(2:T) <= U_gas(1:T-1) + U_up_gas];
储能系统约束:
matlab复制% SOC状态方程
constraints = [constraints, S(2:T) == S(1:T-1) + eta_ch*P_ch(1:T-1) - P_dis(1:T-1)/eta_dis];
% 充放电互斥约束
constraints = [constraints, P_ch <= B_ch*M, P_dis <= B_dis*M, B_ch + B_dis <= 1];
不确定性集合:
matlab复制% 盒式不确定集
uncertainty = [P_wind >= P_wind_nom - Delta, P_wind <= P_wind_nom + Delta;
Load >= Load_nom - Gamma, Load <= Load_nom + Gamma];
实际工程中,不确定性调节参数Δ和Γ的选取需要基于历史数据分析。建议先进行概率分布拟合,再根据置信区间确定参数值,而非简单采用最大最小值。
CCG(Column-and-Constraint Generation)算法的核心思想是将原问题分解为:
算法流程如下:
code复制初始化:场景集Ω=∅
while 不收敛 do
1. 求解主问题得到当前调度方案x*
2. 求解子问题得到新恶劣场景u*
3. if 目标值差距小于阈值 then
退出循环
else
将u*加入Ω
end if
end while
主问题构建:
matlab复制% 定义第一阶段变量
U = binvar(n_gen, T); % 机组启停状态
P_pre = sdpvar(n_gen, T); % 预调度计划
% 定义第二阶段变量
P_adj = sdpvar(n_gen, T, K); % 各场景下的调整量
S = sdpvar(n_storage, T, K); % 储能状态
% 构建主问题目标
obj = sum(C_fixed*U, 'all') + max_k(sum(C_var.*(P_pre + P_adj(:,:,k)), 'all'));
% 添加场景相关约束
for k = 1:K
constraints = [constraints,
P_pre + P_adj(:,:,k) >= U.*Pmin,
BalanceConstraint(P_pre, P_adj(:,:,k), S(:,:,k), Load_scen(:,:,k))];
end
子问题求解:
matlab复制% 给定x*下寻找最恶劣场景
uncertain = sdpvar(2, T); % 风电出力和负荷不确定性
obj_sub = -sum(C_var.*(P_opt + P_adj_opt), 'all'); % 最大化成本
% 不确定性集约束
constraints_sub = [uncertain(1,:) >= P_wind_nom - Delta,
uncertain(1,:) <= P_wind_nom + Delta,
uncertain(2,:) >= Load_nom - Gamma,
uncertain(2,:) <= Load_nom + Gamma];
% 求解子问题
optimize(constraints_sub, obj_sub, sdpsettings('solver','gurobi'));
worst_scenario = value(uncertain);
matlab复制assign(U, U_prev); % 使用先前解初始化
matlab复制parfor k = 1:K
optimize(MP_constraints{k}, MP_obj(k), options);
end
matlab复制% 添加最优割
constraints = [constraints, eta >= obj_sub + lambda'*(uncertain - worst_scenario)];
常见误区是直接采用历史极值作为不确定集边界,这会导致方案过于保守。推荐做法:
matlab复制% 拟合Weibull分布估计风电出力不确定性
pd = fitdist(P_wind_hist, 'Weibull');
Delta = icdf(pd, 0.95) - mean(P_wind_hist);
matlab复制[f,xi] = ksdensity(Load_hist);
Gamma = quantile(xi(f > 0.1), 0.99) - mean(Load_hist);
当机组数量较多时,MILP求解可能遇到"维度灾难":
matlab复制% 将相似机组聚合
P_aggregated = sdpvar(n_cluster, T);
for i = 1:n_cluster
constraints = [constraints, P_aggregated(i,:) == sum(P(members{i},:),1)];
end
matlab复制% 使用优先顺序法获得初始解
[U_init, P_init] = PriorityListCommitment(Load_forecast);
assign(U, U_init); assign(P_pre, P_init);
问题1:CCG算法振荡不收敛
obj_sub = obj_sub + 0.01*norm(uncertain - prev_scenario)问题2:求解时间随场景数爆炸增长
matlab复制[~, scen_centers] = kmeans(scenarios', K_reduced);
scenarios_reduced = scen_centers';
问题3:鲁棒方案成本过高
matlab复制constraints = [constraints,
sum(abs(P_wind - P_wind_nom))/Delta + sum(abs(Load - Load_nom))/Gamma <= Budget];
我们构建了一个包含以下单元的微电网测试系统:
| 指标 | 确定性优化 | 随机优化 | 鲁棒优化 |
|---|---|---|---|
| 平均成本($) | 1250 | 1380 | 1450 |
| 最坏成本($) | 2100 | 1850 | 1600 |
| 求解时间(s) | 15 | 240 | 180 |
| 约束满足率 | 72% | 89% | 100% |
matlab复制% 绘制调度方案
figure;
stairs(P_optimal', 'LineWidth', 2);
hold on;
plot(Load, 'k--', 'LineWidth', 2);
xlabel('时间(h)'); ylabel('功率(kW)');
legend('机组1','机组2','机组3','储能','负荷');

关键观察:
改变不确定性预算参数Γ得到以下规律:

工程建议:
将问题扩展为三阶段模型:
实现框架:
matlab复制% 多阶段变量定义
U_day_ahead = binvar(n_gen, T);
P_hour_ahead = sdpvar(n_gen, T);
P_real_time = sdpvar(n_gen, T, K);
% 多阶段约束
constraints = [U_day_ahead == U_commit,
P_hour_ahead == P_day_ahead + P_adj1,
P_real_time == P_hour_ahead + P_adj2];
融合机器学习预测与鲁棒优化:
matlab复制net = trainLSTM(X_train, Y_train);
[Delta_pred, Gamma_pred] = predict(net, X_test);
matlab复制uncertainty = [P_wind >= P_pred - Delta_pred,
P_wind <= P_pred + Delta_pred];
建立半实物仿真平台:
测试流程:
matlab复制% 硬件在环通信设置
rt = opalrt('192.168.1.100');
sendCommand(rt, 'START_SIM');
while ~simFinished(rt)
measurements = getData(rt);
P_opt = solveRobustOPF(measurements);
sendCommand(rt, 'SET_POWER', P_opt);
end
在实际项目中采用这种两阶段鲁棒优化方法后,某微电网示范工程的极端场景应对能力提升了40%,同时日常运行成本仅增加8%。特别值得注意的是,将不确定性参数设置为随时间变化的动态值(如白天Γ较大、夜间较小)可进一步降低3-5%的预期成本。建议初次实施时先采用简化版模型验证基本功能,再逐步添加复杂约束和不确定性维度。