1. 电-气综合能源系统调度问题概述
电-气综合能源系统(Integrated Electricity-Gas System, IEGS)作为多能互补的典型代表,已成为现代能源系统的重要发展方向。这类系统通过耦合电力网络与天然气网络,实现能源的高效协同利用。但在实际运行中,系统面临着可再生能源出力波动、负荷预测偏差等多重不确定性因素,这对传统的确定性优化方法提出了严峻挑战。
传统鲁棒优化方法虽然能够应对不确定性,但其"最坏场景"假设往往导致调度方案过于保守,造成经济性的大幅损失。我在参与某区域综合能源系统项目时,曾遇到传统鲁棒优化方案导致30%以上的运行成本增加。这促使我们探索更精细化的不确定性处理方法——分布鲁棒优化(Distributionally Robust Optimization, DRO)。
2. 分布鲁棒优化框架设计
2.1 Wasserstein距离与模糊集构建
Wasserstein距离(推土机距离)是构建概率分布模糊集的核心工具。与KL散度等传统度量相比,它具有对支撑集变化的鲁棒性,特别适合描述可再生能源出力的分布不确定性。在MATLAB实现中,我们采用1-Wasserstein距离:
matlab复制function D = wasserstein_dist(P, Q, samples)
% P,Q: 离散概率分布的概率向量
% samples: 对应的支撑点
n = length(P);
cvx_begin
variable T(n,n) nonnegative
minimize sum(sum(T.*pdist2(samples,samples)))
subject to
T*ones(n,1) == P(:)
T'*ones(n,1) == Q(:)
cvx_end
D = cvx_optval;
end
实际应用中,我们通常基于历史数据构建经验分布,并以Wasserstein球形式定义模糊集:
code复制P_hat = empirical_distribution(data); % 经验分布
F = { P | W(P,P_hat) ≤ ε } % 模糊集
其中半径ε的选择至关重要,过小会退化为随机规划,过大则趋近鲁棒优化。建议通过交叉验证确定,一般取0.1-0.3。
2.2 CVaR风险度量集成
条件风险价值(CVaR)在95%置信水平下表示最坏5%场景的平均损失,比VaR更具一致性风险度量特性。其数学形式为:
code复制CVaR_α(X) = min{ t + E[(X-t)^+]/(1-α) }
在MATLAB中可高效计算:
matlab复制function [cvar, var] = compute_cvar(losses, alpha)
% losses: 损失向量
% alpha: 置信水平
sorted_loss = sort(losses,'descend');
n = length(losses);
k = ceil(n*(1-alpha));
var = sorted_loss(k);
cvar = mean(sorted_loss(1:k));
end
关键提示:CVaR计算要求足够多的场景样本(至少1000个),否则会出现显著估计偏差。在风电出力建模中,我们曾因样本不足导致CVaR低估30%。
3. 电-气联合调度模型实现
3.1 系统建模要点
电力子系统需考虑:
- 直流潮流约束
- 发电机爬坡限制
- 备用容量要求
天然气子系统需包含:
- 管道流量方程(Weymouth方程)
- 压缩机功耗约束
- 气源供气能力
耦合元件包括:
- 燃气轮机(气→电)
- 电驱动压缩机(电→气)
- 储气装置
3.2 MATLAB实现框架
matlab复制%% 初始化参数
load('case6_iegs.mat'); % 加载测试系统数据
N_scenario = 1000; % 场景数
alpha = 0.95; % CVaR置信水平
epsilon = 0.2; % Wasserstein半径
%% 场景生成与模糊集构建
wind_scenarios = generate_wind_scenarios(..., N_scenario);
P_hat = ones(N_scenario,1)/N_scenario; % 均匀分布
F = build_wasserstein_ball(P_hat, wind_scenarios, epsilon);
%% 建立分布鲁棒优化模型
cvx_begin
variables pg(N_gen) rg(N_gen) ... % 发电与备用
variable t % CVaR辅助变量
minimize( c_gen'*pg + c_res'*rg + lambda*t + ... )
% 常规约束
power_balance_constraints(...);
gas_flow_constraints(...);
% 分布鲁棒机会约束
for i = 1:N_scenario
wind_cur = wind_scenarios(:,i);
reserve_adequacy_constraints(pg, rg, wind_cur, ...);
end
% CVaR约束
t + 1/(1-alpha)*sum(pos(operational_cost - t))/N_scenario <= budget;
cvx_end
调试经验:使用CVX求解时,建议先关闭分布鲁棒约束验证基础模型可行性,再逐步加入复杂约束。我们曾因直接求解完整模型导致求解器崩溃。
4. 关键问题与解决方案
4.1 计算效率优化
- 场景削减技术:
matlab复制function [reduced_scenarios, weights] = scenario_reduction(full_scenarios, target_num)
[idx, centroids] = kmeans(full_scenarios', target_num);
weights = accumarray(idx,1)/length(idx);
reduced_scenarios = centroids';
end
- 并行计算加速:
matlab复制parfor i = 1:N_scenario
scenario_constraints(i) = ...;
end
4.2 保守性与经济性平衡
通过调节Wasserstein半径ε和CVaR参数λ实现Pareto前沿分析:
matlab复制epsilon_list = linspace(0.1,0.5,5);
lambda_list = logspace(-3,0,5);
results = cell(length(epsilon_list),length(lambda_list));
for i = 1:length(epsilon_list)
for j = 1:length(lambda_list)
% 运行优化并记录结果
end
end
实际项目中发现,ε=0.25、λ=0.1时通常能取得较好平衡。
5. 工程实践建议
- 数据预处理:
- 风电/光伏出力数据需进行季节性分解
- 负荷数据应区分工作日/节假日模式
- 建议使用3σ原则处理异常值
- 模型验证流程:
mermaid复制graph TD
A[历史数据] --> B(训练集)
A --> C(测试集)
B --> D[参数校准]
D --> E[模型求解]
E --> F[测试集评估]
F --> G{性能达标?}
G -->|是| H[部署应用]
G -->|否| D
- 硬件配置建议:
- 至少16GB内存(场景数>5000需32GB)
- 推荐使用Intel MKL加速线性代数运算
- 对于大型系统,考虑GPU加速(需修改CVX为Gurobi+GPU)
在华东某园区项目中,该方案将弃风率从12%降至5%的同时,降低了18%的备用成本。实际部署时需注意:
- 每日定时更新历史数据窗口(建议滚动7天)
- 设置结果合理性检查模块
- 保留人工干预接口应对极端情况