1. 项目概述
微电网作为分布式能源系统的重要组成部分,其经济优化调度一直是能源领域的研究热点。两阶段鲁棒优化方法因其能够有效应对可再生能源出力和负荷需求的不确定性,在微电网规划与调度中展现出独特优势。本文将详细介绍如何利用Matlab平台,结合Yalmip建模工具和Cplex求解器,实现微电网的两阶段鲁棒优化。
这个方案主要解决微电网在面临光伏出力波动、负荷变化等不确定因素时的最优经济调度问题。通过建立投资-运行双层优化模型,我们能够在考虑最恶劣场景的前提下,找到经济性最优的设备配置和运行策略。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心模型构建
2.1 两阶段鲁棒优化框架
两阶段鲁棒优化的核心思想是将决策过程分为两个阶段:
- 第一阶段:投资决策(如储能容量配置)
- 第二阶段:运行决策(如各单元出力调度)
这种分层结构允许我们在考虑不确定集的情况下,做出最保守但最可靠的经济决策。模型数学形式可表示为:
min_x {c^T x + max_u min_y d^T y}
s.t. Ax ≤ b
Fx + Gy ≤ h
u ∈ U
其中x为第一阶段变量,y为第二阶段变量,u为不确定性参数。
2.2 目标函数分解
2.2.1 投资成本计算
储能系统的等年值投资成本计算需要考虑资金的时间价值。详细计算公式如下:
C_storage_inv = C_inv × CRF(r,n)
CRF(r,n) = [r(1+r)^n]/[(1+r)^n-1]
其中CRF为资本回收因子,r为折现率,n为设备寿命。在Matlab中的实现:
matlab复制% 储能投资成本参数
C_inv = 15000; % 单位:$/kW
n = 15; % 寿命年限
r = 0.06; % 年利率
% 计算资本回收因子
CRF = (r*(1+r)^n)/((1+r)^n-1);
% 等年值投资成本
C_storage_inv = C_inv * CRF;
2.2.2 运行成本组成
运行成本主要包括三部分:
- 配电网交互成本
- 各单元运维成本
- 微型燃气轮机燃料成本
具体计算公式如下:
C_operation = (p_buy×P_buy - p_sell×P_sell)
+ (c_mt_om×P_mt + c_pv_om×P_pv + ...)
+ c_mt_fuel×P_mt
对应的Matlab实现:
matlab复制% 购售电参数
p_buy = 0.55; % 购电价格 $/kWh
p_sell = 0.35; % 售电价格 $/kWh
% 运维成本系数
c_mt_om = 0.06; % 微型燃气轮机 $/kWh
c_pv_om = 0.02; % 光伏 $/kWh
% 燃料成本系数
c_mt_fuel = 0.25; % $/kWh
% 运行成本计算
C_grid = p_buy*P_buy - p_sell*P_sell;
C_om = c_mt_om*P_mt + c_pv_om*P_pv;
C_fuel = c_mt_fuel*P_mt;
C_operation = C_grid + C_om + C_fuel;
3. 约束条件实现
3.1 功率平衡约束
微电网必须时刻保持功率平衡,这包括有功功率和无功功率平衡。以有功功率为例:
P_mt + P_pv + P_storage_out - P_storage_in + P_grid_buy - P_grid_sell = P_load
在Yalmip中的实现方式:
matlab复制% 定义决策变量
P_mt = sdpvar(1,T,'full'); % 微型燃气轮机出力
P_pv = sdpvar(1,T,'full'); % 光伏出力
P_storage_out = sdpvar(1,T,'full'); % 储能放电
P_storage_in = sdpvar(1,T,'full'); % 储能充电
P_grid_buy = sdpvar(1,T,'full'); % 从电网购电
P_grid_sell = sdpvar(1,T,'full'); % 向电网售电
% 功率平衡约束
Constraints = [P_mt + P_pv + P_storage_out - P_storage_in + P_grid_buy - P_grid_sell == P_load];
3.2 设备运行约束
3.2.1 储能系统约束
储能模型需要考虑充放电功率限制、容量限制以及能量守恒:
-
充放电功率限制:
0 ≤ P_storage_in ≤ P_storage_in_max
0 ≤ P_storage_out ≤ P_storage_out_max -
容量限制:
E_min ≤ E(t) ≤ E_max
E(t) = E(t-1) + η_inP_storage_inΔt - (1/η_out)P_storage_outΔt
Yalmip实现:
matlab复制% 储能参数
E_max = 500; % kWh
E_min = 50; % kWh
P_in_max = 100; % kW
P_out_max = 100; % kW
eta_in = 0.95; % 充电效率
eta_out = 0.95; % 放电效率
% 储能能量状态变量
E = sdpvar(1,T,'full');
% 储能约束
Constraints = [Constraints,
0 <= P_storage_in <= P_in_max,
0 <= P_storage_out <= P_out_max,
E_min <= E <= E_max];
% 能量守恒约束
for t = 2:T
Constraints = [Constraints,
E(t) == E(t-1) + eta_in*P_storage_in(t) - (1/eta_out)*P_storage_out(t)];
end
3.2.2 微型燃气轮机约束
微型燃气轮机需要考虑爬坡率限制和出力范围:
- 出力上下限:
P_mt_min ≤ P_mt(t) ≤ P_mt_max - 爬坡限制:
-ΔP_mt_down ≤ P_mt(t) - P_mt(t-1) ≤ ΔP_mt_up
实现代码:
matlab复制% 微型燃气轮机参数
P_mt_max = 200; % kW
P_mt_min = 30; % kW
delta_up = 50; % kW/h
delta_down = 40; % kW/h
% 微型燃气轮机约束
Constraints = [Constraints,
P_mt_min <= P_mt <= P_mt_max];
for t = 2:T
Constraints = [Constraints,
-delta_down <= P_mt(t)-P_mt(t-1) <= delta_up];
end
4. 不确定性建模与鲁棒优化
4.1 不确定集定义
光伏出力和负荷需求的不确定性可以采用盒式不确定集:
P_pv = P_pv_nom + ξ_pv·ΔP_pv
P_load = P_load_nom + ξ_load·ΔP_load
||ξ||_∞ ≤ Γ
其中Γ为不确定预算参数,控制保守程度。
4.2 鲁棒对等转换
通过对偶理论将max-min问题转换为单层优化问题。以光伏出力不确定性为例:
原约束:P_pv = P_pv_nom + ξ_pv·ΔP_pv
鲁棒约束需满足对所有||ξ||_∞ ≤ Γ都成立
转换后的线性约束:
P_pv ≤ P_pv_nom + Γ·ΔP_pv
P_pv ≥ P_pv_nom - Γ·ΔP_pv
4.3 Yalmip实现
Yalmip内置支持鲁棒优化,可以直接定义不确定变量:
matlab复制% 定义不确定参数
Gamma = 1.5; % 不确定预算
xi_pv = sdpvar(1,T,'full'); % 光伏不确定性
xi_load = sdpvar(1,T,'full'); % 负荷不确定性
% 不确定集约束
Uncertainty = [ -Gamma <= xi_pv <= Gamma,
-Gamma <= xi_load <= Gamma ];
% 实际光伏出力和负荷
P_pv_actual = P_pv_nom + xi_pv.*Delta_P_pv;
P_load_actual = P_load_nom + xi_load.*Delta_load;
% 更新功率平衡约束
Constraints = [Constraints,
P_mt + P_pv_actual + P_storage_out - P_storage_in + P_grid_buy - P_grid_sell == P_load_actual];
5. 求解与结果分析
5.1 Cplex求解器配置
matlab复制% 设置Cplex求解器参数
options = sdpsettings('solver','cplex',...
'cplex.timelimit',3600,...
'cplex.mip.tolerances.mipgap',0.01,...
'verbose',1);
% 求解鲁棒优化问题
optimize([Constraints,Uncertainty], C_investment + C_operation, options);
5.2 结果提取与分析
matlab复制% 提取优化结果
P_mt_opt = value(P_mt);
P_storage_in_opt = value(P_storage_in);
P_storage_out_opt = value(P_storage_out);
P_grid_buy_opt = value(P_grid_buy);
P_grid_sell_opt = value(P_grid_sell);
% 计算总成本
total_cost = value(C_investment + C_operation);
% 可视化结果
figure;
subplot(3,1,1);
plot(P_load,'k','LineWidth',1.5); hold on;
plot(P_pv_actual,'b');
plot(P_mt_opt,'r');
legend('负荷','光伏','微燃机');
title('功率平衡');
subplot(3,1,2);
plot(P_grid_buy_opt,'g'); hold on;
plot(P_grid_sell_opt,'m');
legend('购电','售电');
title('电网交互');
subplot(3,1,3);
plot(value(E),'LineWidth',1.5);
title('储能SOC');
6. 实际应用中的注意事项
-
不确定预算选择:
- Γ值过小会导致方案过于乐观,抗风险能力差
- Γ值过大会导致方案过于保守,经济性差
- 建议通过历史数据分析确定合适的Γ值
-
求解效率优化:
- 对于大规模问题,可采用Benders分解等算法
- 合理设置求解器参数(如MIP gap、时间限制)
- 考虑使用并行计算加速求解
-
模型验证:
- 在典型场景下验证模型的合理性
- 进行灵敏度分析,观察关键参数变化对结果的影响
- 与实际运行数据对比,持续优化模型参数
-
代码实现技巧:
- 使用函数封装重复代码段
- 添加详细注释说明各模块功能
- 采用版本控制管理代码变更
通过这个完整的实现框架,我们能够建立一个考虑光伏出力和负荷需求不确定性的微电网两阶段鲁棒优化模型。该模型不仅能够提供最优的经济调度方案,还能确保在最不利情况下系统的可靠运行。
