👨🎓个人主页
💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
💥1 概述
本文具有分布鲁棒联合机会约束的能源和储备调度研究,用于可再生能源渗透率高的联合电力和天然气系统的能源和储备调度。数据驱动的分布稳健的机会约束确保没有减载和高概率的可再生溢出。我们使用条件风险值近似和线性决策规则有效地解决了这个问题。样本外实验表明,该模型在没有机会约束的情况下主导了相应的随机程序,明确模拟了减载和可再生溢出的影响。
原文摘要:
Abstract
We develop a two-stage stochastic program for energy and reserve dispatch of a joint power and gas system with a high penetration of renewables. Data-driven distributionally robust chance constraints ensure that there is no load shedding and renewable spillage with high probability. We solve this problem efficiently using conditional value-at-risk approximations and linear decision rules. Out-of-sample experiments show that this model dominates the corresponding stochastic program without chance constraints that models the effects of load shedding and renewable spillage explicitly.
风能、太阳能和潮汐能等可再生能源部署的增加极大地改变了发电结构。虽然有利于可持续性,但可再生能源由于其间歇性和有限的可预测性而损害了输电系统的稳定性[27]。因此,灵活的燃气发电厂(GFPP)被广泛建造,以取代退役的火力发电厂或核电站,以平衡不稳定的可再生能源发电。因此,可以预见电力和天然气系统的更紧密耦合[28]。这种观点促使我们同时研究这两个系统。
在存在不确定的可再生能源的情况下,如果实际可再生能源产量偏离其预测,则可能无法实施提前调度。在这种情况下,常规发电厂需要实时调整其生产水平。如果在某些极端情况下,这些工厂不够灵活,无法恢复输电系统的完整性,那么可再生能源溢出或减载可能是必要的。然而,这种严厉的措施会产生高昂的经济成本。
本文的贡献总结如下:
- (1)
我们为GFPP制定了一个两阶段的能源和储备调度随机计划,其中包含燃料约束。 具有Wasserstein模糊集的分布稳健联合机会约束确保不需要高概率的负荷卸减和可再生泄漏。为了使这个问题易于处理,我们用线性决策规则来解决它,并为机会约束开发了一系列CVaR近似。我们还设计了一种顺序凸优化算法来调整CVaR近似。
- (2)
我们开发了一个基于实时最佳潮流模型的模拟环境,具有减载和可再生溢出功能,使我们能够评估不同日前调度策略的样本外性能。
- (3)
通过数值模拟表明,所提出的CVaR近似帕累托在样本外成本和机会约束的经验违反概率方面在邦弗朗尼近似中占主导地位。我们还表明,考虑到样本外成本的均值和可变性,所提出的模型比没有机会约束的两阶段随机程序更可取,后者明确地模拟减载和可再生溢出。
我们的研究结果表明,为了最小化样本外成本,求解分布鲁棒机会约束程序可能比解决(看似更现实的)两阶段分布鲁棒优化问题更好。这可能令人惊讶,因为机会约束程序忽略了所有低概率情景,在这些情景中,电力系统的稳定性只能通过昂贵的追索行动(如减载和可再生泄漏)来维持,而两阶段问题考虑了所有可能的情况,并如实模拟了必要的追索行动及其成本。我们认为,从两阶段问题中获得的操作策略的样本外性能较差,源于有效解决两阶段问题所需的最新决策规则近似导致的显着损失。因此,忽略触发昂贵追索权行动的低概率情景是有好处的,这些行动在两阶段模型中总是会产生较大的近似误差。我们论文的这一关键见解可以作为机会约束能量模型流行的可能解释,这些模型通常在没有严格理由的情况下临时使用。
具有分布鲁棒联合机会约束的能源和储备调度研究
1. 问题背景与挑战
随着可再生能源渗透率的提高,电力系统面临供需双侧不确定性增强、运行灵活性需求增加等问题。传统优化方法(如随机优化和鲁棒优化)存在局限性:随机优化依赖精确概率分布假设,而鲁棒优化过于保守,导致经济性不足。分布鲁棒优化(Distributionally Robust Optimization, DRO)与机会约束(Chance Constraints)的结合,为解决此类问题提供了新思路。其核心在于通过模糊集描述不确定性分布,并在最坏情况下保证关键约束以高概率成立,从而平衡经济性与鲁棒性。
2. 理论基础与核心概念
2.1 分布鲁棒优化(DRO)
DRO通过构建包含真实概率分布的模糊集(如基于Wasserstein距离或矩信息的模糊集),在不依赖精确分布的前提下寻找最坏情况下的最优解。其优势包括:
- 抗风险性:考虑不确定性集合内的所有可能分布,确保解的鲁棒性。
- 灵活性:适用于非凸优化问题,支持多能源协同调度。
2.2 机会约束与联合机会约束
- 机会约束:允许约束以一定概率(如95%)成立,适用于软约束场景(如电压越限)。
- 联合机会约束:要求多个约束同时满足概率阈值,比单一约束更严格,适用于多区域新能源系统或复杂网络。例如,在电-气耦合系统中,联合约束可同时管理节点电压、支路功率和备用需求。
2.3 DRO与机会约束的结合
通过将联合机会约束嵌入DRO框架,形成 分布鲁棒联合机会约束(DRJCC) 模型。其特点包括:
- 高概率保证:在模糊集最坏分布下,约束满足率仍高于设定阈值。
- 经济性提升:相比传统鲁棒优化,DRJCC通过概率松弛降低保守性,减少备用容量冗余。
3. 建模方法与关键技术
3.1 不确定性建模
- 模糊集构建:常用方法包括基于Wasserstein距离(衡量经验分布与真实分布差异)、矩信息(均值和协方差),或KL散度。
- 数据驱动:利用历史数据动态更新模糊集半径,适应非平稳不确定性。
3.2 联合机会约束的数学处理
- CVaR近似:将联合机会约束转化为条件风险值(CVaR)约束,利用线性决策规则(LDR)简化求解。
- 布尔重构:将非凸约束转化为混合整数线性规划问题,适用于电-气耦合系统。
- Bonferroni近似:通过分解联合约束为多个独立约束,降低计算复杂度。
3.3 两阶段优化框架
- 第一阶段:确定日前调度计划(如机组组合、储能充放电策略)。
- 第二阶段:基于实时不确定性(如风电波动)调整备用容量,采用DRO确保日内调度的鲁棒性。
4. 求解算法与计算效率
4.1 分布式算法
- ADMM(交替方向乘子法) :针对输配电网的星型拓扑结构,允许子系统异步更新,提升计算效率(收敛时间减少26%)。
- 列约束生成(C&CG) :将主问题(调度决策)与子问题(最坏分布验证)迭代求解,适用于大规模混合整数规划。
4.2 凸化与简化技术
- 二阶锥规划(SOCP) :将非凸潮流方程转化为凸形式,结合强对偶理论求解。
- 样本平均近似(SAA) :通过采样生成确定性约束,降低随机变量维度。
5. 应用场景与案例分析
5.1 电力系统能量与备用调度
- 风-光-储协同:通过DRJCC优化备用容量分配,减少负荷削减和可再生能源弃电。
- 虚拟电厂(VPP) :基于矩信息的DRO模型实现多能源经济调度,降低运行成本。
5.2 综合能源系统(IES)
- 电-气-热耦合:联合机会约束管理多能流约束,提升系统灵活性。
- 氢能储能:两阶段DRO模型协调氢能生产与电力调度,平衡碳排放与经济性。
5.3 政策驱动的储备调度
- 煤炭产能储备:中国通过产能储备制度应对能源安全,DRO用于优化可调度产能的释放时机。
- LNG储备优化:考虑供应风险与需求波动,设计多周期储备调度模型。
6. 研究挑战与未来方向
6.1 关键挑战
- 非凸性问题:联合约束可能导致非凸优化,全局最优解难以保证。
- 数据依赖性:小样本下Wasserstein模糊集的保守性控制困难。
- 计算复杂度:大规模系统求解需硬件加速(如GPU并行计算)。
6.2 未来研究方向
- 多能源扩展:整合氢能、碳捕集等新型能源,研究跨能源约束建模。
- 动态模糊集:结合在线学习更新模糊集参数,适应非平稳不确定性。
- 市场兼容性:探索DRJCC与电力市场出清规则的协同机制。
7. 结论
分布鲁棒联合机会约束优化为高比例可再生能源系统的调度问题提供了兼顾鲁棒性与经济性的解决方案。通过模糊集建模、联合约束转化及分布式算法,其在电力系统、综合能源及储备调度中展现出显著优势。未来需进一步突破非凸优化、数据质量与计算效率瓶颈,推动其在多能源耦合与动态市场环境中的实际应用。
📚2 运行结果
部分代码:
% Inverse of logit-normal transformation (Eq. (2) in ref. [31])
R = chol(sigma_m);
y = repmat(mu,Nscen,1) + randn(Nscen,size(WindDATA,1))*R;
Wind = (1+exp(-y)).^(-1);
% Checking correlation, mean and true mean of data
corrcoef(Wind);
mean(Wind);
true_mean_Wind = (1+exp(-mu)).^(-1);
% Reshaping the data structure
nWind = Wind';
nWind = reshape(nWind,size(WindDATA,1), N_max+OOS_max, IR_max);
% Initializing the matrices to gather final results
Joint_CVaR_Obj_IR = zeros(IR_sim, OOS_sim, length(rho_vectorC));
CVaR_Obj_IR = zeros(IR_sim, OOS_sim, length(rho_vectorJC));
ICC_TC = NaN(IR_sim,length(rho_vectorC));
JCC_TC = NaN(IR_sim,length(rho_vectorJC));
% Loop for each individual run for 100 coupled datasets
for j = 1:IR_sim
display('out of sample iteration:');
j
% For each coupled dataset, we pick N and N' samples
WPf_max = nWind(:,1:N_max,j)';
WPr_max = nWind(:,N_max+1:N_max+OOS_max,j)';
WPf = WPf_max(1:N,:);
WPr = WPr_max(1:OOS_sim,:);
% Build the corresponding data related to wind power production
all = [1:N];
system_info.Wscen = WPf(all,:)';
system_info.mu = mean(system_info.Wscen,2);
system_info.xi = system_info.Wscen - repmat(system_info.mu, 1, size(system_info.Wscen,2));
% Calculation of A,B,C,b matrices for joint chance constraints
CC_jcc = CC_matrices(system_info, DRO_param);
jcc = CC_jcc.jcc;
% Loop for each value of \rho in P vector
for i = 1:length(rho_vectorC)
% optimize for each value of rho for Bonferroni approximation
DRO_param.rho = rho_vectorC(i);
DRO_ICC_CVaR = DRO_CVaR_ICC(system_info, DRO_param, jcc);
ICC_p_DA{j, i} = DRO_ICC_CVaR.p;
ICC_ru{j, i} = DRO_ICC_CVaR.ru;
ICC_rd{j, i} = DRO_ICC_CVaR.rd;
ICC_obj{j, i} = DRO_ICC_CVaR.Obj;
ICC_flag{j, i} = DRO_ICC_CVaR.Flag;
CVaR_Y{j,i} = DRO_ICC_CVaR.Y * system_info.xi;
CVaR_Qy{j,i} = DRO_ICC_CVaR.q;
CVaR_QY{j,i} = DRO_ICC_CVaR.qY * system_info.xi;
CVaR_Fy{j,i} = DRO_ICC_CVaR.fy;
CVaR_FY{j,i} = DRO_ICC_CVaR.fY * system_info.xi;
% optimize for each value of rho for Zymler approximation
DRO_param.rho = rho_vectorJC(i);
DRO_JCC_CVaR = DRO_JCVaR_All(system_info, DRO_param, jcc);
JCC_p_DA{j, i} = DRO_JCC_CVaR.p;
JCC_ru{j, i} = DRO_JCC_CVaR.ru;
JCC_rd{j, i} = DRO_JCC_CVaR.rd;
JCC_obj{j, i} = DRO_JCC_CVaR.Obj;
JCC_flag{j, i} = DRO_JCC_CVaR.Flag;
Joint_CVaR_Y{j,i} = DRO_JCC_CVaR.Y * system_info.xi;
Joint_CVaR_Qy{j,i} = DRO_JCC_CVaR.q;
Joint_CVaR_QY{j,i} = DRO_JCC_CVaR.qY * system_info.xi;
Joint_CVaR_Fy{j,i} = DRO_JCC_CVaR.fy;
Joint_CVaR_FY{j,i} = DRO_JCC_CVaR.fY * system_info.xi;
% Loop for each out-of-sample realization
for k = 1:OOS_sim
system_info.Wreal = WPr(k,:)';
system_info.DWreal = system_info.Wreal - system_info.mu;
% Solve real-time optimal power flow for the solution of Bonferroni
% approximation
RT_solution_CVaR = RT_solve_R(system_info,DRO_ICC_CVaR.p,DRO_ICC_CVaR.ru,DRO_ICC_CVaR.rd);
CVaR_Obj_IR(j,k,i) = RT_solution_CVaR.Obj_RT;
CVaR_lshed{j,k,i} = RT_solution_CVaR.lshed_RT;
CVaR_flow{j,k,i} = DRO_ICC_CVaR.fy + DRO_ICC_CVaR.fY * system_info.DWreal;
CVaR_p{j,k,i} = DRO_ICC_CVaR.Y * system_info.DWreal;
CVaR_q{j,k,i} = DRO_ICC_CVaR.q + DRO_ICC_CVaR.qY * system_info.DWreal;
CVaR_flag(j,k,i) = RT_solution_CVaR.Flag;
% Solve real-time optimal power flow for the solution of Zymler
% approximation
RT_solution_Joint_CVaR = RT_solve_R(system_info,DRO_JCC_CVaR.p,DRO_JCC_CVaR.ru,DRO_JCC_CVaR.rd);
Joint_CVaR_Obj_IR(j,k,i) = RT_solution_Joint_CVaR.Obj_RT;
Joint_CVaR_lshed{j,k,i} = RT_solution_Joint_CVaR.lshed_RT;
🎉3 参考文献
部分理论来源于网络,如有侵权请联系删除。