【鲁棒优化、机会约束】具有分布鲁棒联合机会约束的能源和储备调度研究(Matlab代码实现)

news2024/11/27 8:32:06

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码、数据、文章讲解


💥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]。这种观点促使我们同时研究这两个系统。

在存在不确定的可再生能源的情况下,如果实际可再生能源产量偏离其预测,则可能无法实施提前调度。在这种情况下,常规发电厂需要实时调整其生产水平。如果在某些极端情况下,这些工厂不够灵活,无法恢复输电系统的完整性,那么可再生能源溢出或减载可能是必要的。然而,这种严厉的措施会产生高昂的经济成本。

能源和储备调度问题可以通过鲁棒优化[3],随机规划[26]和机会约束规划[24]的方法来解决。稳健的优化模型在规定的不确定性集[4],[35]内实现可再生预测误差的最坏情况下,最大限度地减少了日前调度和纠正追索措施的成本。然而,对最坏情况的关注以及在线性决策规则中解决较大问题实例的必要性可能会导致过于保守的解决方案。另一方面,随机规划模型在规定的离散分布[21],[23]下最小化预期成本,但其解决方案可能会显示出较差的样本外性能,除非离散化点的数量随问题维度呈指数增长。最后,机会约束的编程模型不考虑可再生溢出和减载,但确保系统在没有这些严厉的追索措施的情况下保持稳定,概率很高[5],[18],[25]。当难以甚至不可能以有意义的方式将追索权和不可行性货币化时,机会受限的编程公式特别有吸引力。不利的一面是,这些配方通常不能保证产生具有可行追索权的可实施的第一阶段解决方案。

在本文中,我们将能量和储备调度问题表述为一个数据驱动的分布鲁棒机会约束程序,而不是一个位于 Wasserstein 模糊集上的程序,即概率分布空间中的一个球,相对于 1 型 Wasserstein 度量,以给定训练数据集上的经验分布为中心 [20].在最小化最坏情况下的预期成本的同时,我们的模型防止了违反储备裕度,并通过分配稳健的联合机会约束来执行电力和天然气网络的传输容量限制。这意味着对模糊性集中的所有分布强制执行基础经典机会约束。分布鲁棒优化结合了随机规划的特殊性(通过概率分布对不确定性进行建模)和鲁棒优化的保守性(通过对冲分布不确定性)。所提出的方法承认可用的统计数据通常可以用许多不同的分布来解释,并减轻了基于单个分布的经典随机程序的过拟合效应特征,该分布总是被估计误差破坏。因此,如果相对于不确定问题参数的维数而言,训练样本很少,则基于 Wasserstein 模糊性集的分布稳健方法特别有用,这在大型电力系统中通常就是这种情况。

现有文献中大多数分布稳健的能量模型都基于矩模糊集[9],其中包含共享相同平均向量和协方差矩阵或满足一组广义矩约束[1],[2],[29],[31],[32],[33]的所有分布。 分布稳健的个体机会约束在[2],[33]中研究,而双侧机会约束在[31]中解决。真正的联合机会约束强制要求以高概率同时满足多个安全条件。它们比多个个人机会约束更具表现力,更不保守。例如,100条输电线路中任何一条超载的风险最多为1%(联合机会约束)的操作制度比每条输电线路最多1%的过载风险(100个单独的机会约束)的制度更可取。事实上,在后一种情况下,任何线路过载的风险可能高达100%(例如,如果每天只有一条传输线以随机顺序发生故障)。不幸的是,联合机会约束在计算上不如单个机会约束容易处理。通过使用邦弗朗尼不等式将联合机会约束分解为几个单独的机会约束来获得可处理的保守近似。例如,在我们的示例中,通过将条传输线的单个过载概率限制在 1.0% 以下,可以将任何传输线的联合过载概率推低到 01% 以下。不幸的是,这种邦弗朗尼近似可能过于保守。通过将非凸关节机会约束替换为凸条件风险值(CVaR)约束,可以获得替代的可处理保守近似[22]。对于具有平均协方差模糊设置的分布稳健联合机会约束,最佳CVaR近似是精确的,但识别这种最佳近似仍然很困难[36]。精确可处理的重新表述仅适用于涉及一阶离散测度的限制性矩模糊集[14]。

分布稳健的联合机会约束程序在Wasserstein模糊集合上是NP难的,但如果决策变量和不确定参数是可分的,它们允许精确的混合整数圆锥重新表述[6],[15],[30]。[11]中提出了一个可处理的鲁棒近似。

本文的贡献总结如下:

  • (1)

    我们为GFPP制定了一个两阶段的能源和储备调度随机计划,其中包含燃料约束。 具有Wasserstein模糊集的分布稳健联合机会约束确保不需要高概率的负荷卸减和可再生泄漏。为了使这个问题易于处理,我们用线性决策规则来解决它,并为机会约束开发了一系列CVaR近似。我们还设计了一种顺序凸优化算法来调整CVaR近似。

  • (2)

    我们开发了一个基于实时最佳潮流模型的模拟环境,具有减载和可再生溢出功能,使我们能够评估不同日前调度策略的样本外性能。

  • (3)

    通过数值模拟表明,所提出的CVaR近似帕累托在样本外成本和机会约束的经验违反概率方面在邦弗朗尼近似中占主导地位。我们还表明,考虑到样本外成本的均值和可变性,所提出的模型比没有机会约束两阶段随机程序更可取,后者明确地模拟减载和可再生溢出。

我们的研究结果表明,为了最小化样本外成本,求解分布鲁棒机会约束程序可能比解决(看似更现实的)两阶段分布鲁棒优化问题更好。这可能令人惊讶,因为机会约束程序忽略了所有低概率情景,在这些情景中,电力系统的稳定性只能通过昂贵的追索行动(如减载和可再生泄漏)来维持,而两阶段问题考虑了所有可能的情况,并如实模拟了必要的追索行动及其成本。我们认为,从两阶段问题中获得的操作策略的样本外性能较差,源于有效解决两阶段问题所需的最新决策规则近似导致的最优性显着损失。因此,忽略触发昂贵追索权行动的低概率情景是有好处的,这些行动在两阶段模型中总是会产生较大的近似误差。我们论文的这一关键见解可以作为机会约束能量模型流行的可能解释,这些模型通常在没有严格理由的情况下临时使用。

📚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 参考文献

部分理论来源于网络,如有侵权请联系删除。

🌈4 Matlab代码、数据、文章讲解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/533558.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JAVA中的深情哥-Exception(异常)-上

文章目录 目录 文章目录 前言 一,Exception的起源 二,异常类 三,自定义异常 总结 前言 大家好,我是最爱吃兽奶,今天给大家介绍一下java中的深情哥 - Exception 秋风依依秋水寒,一点离愁两黯然;今生默默唯轻舞&a…

抖音林客系统开发

抖音林客系统是一款基于AI技术的推荐算法系统,主要应用于抖音平台中用户的内容推荐和个性化服务。开发抖音林客系统需要掌握以下关键技术: 数据采集与处理:需要对海量的用户数据进行采集和处理,包括用户的观看历史、互动行为、…

K-Village NFT 作品集

K-Village 是韩国领先的娱乐公司和 Cube 娱乐公司所拥有的空间,引领了元宇宙行业的发展。在这个虚拟的「韩国村」中,可以参观代表韩国文化的韩国公司和品牌。 此外,这个系列的购买者还将获得特别奖励!如果你刚好拥有 20 个 K-Vill…

不懂Spring IOC?你可能已经OUT了!快来了解它的奥秘!

大家好,我是小米,一个热衷于技术分享的小伙伴。今天,我想和大家聊一聊Spring IoC(Inversion of Control)的理解、原理与实现。对于使用Spring框架的开发者来说,IoC容器是一个非常重要的概念,它帮…

C++ ---- 日期类实现+阅读文档(文档可直接下载)

日期类文档下载(日期类详细介绍) word文档 MyDate/MyDate/日期类阅读文档.docx 张喜阳/进阶代码仓库 - Gitee.comhttps://gitee.com/niuniuzxy/advanced-code-warehouse/blob/a25baeee2bd0f0c64f96315bb0d0023308329d92/MyDate/MyDate/%E6%97%A5%E6%9C%9F%E7%B1%BB%E9%98%85…

十六、Config分布式配置中心

目录 分布式配置中心概述 1、为什么需要分布式配置中心? 2、配置中心的作用: Spring Cloud Config简介 新建项目springcloud-config-server 1、引入配置中心config-server的依赖 2、在github/gitee上新建一个远程仓库作为config的远程配置中心 3、…

3年测试技术面一题都看不懂,字节面试真的变态.....

最近我的一个读者朋友去了字节面试,来给我发信息吐槽,说字节的面试太困难了,像他这种三年经验的测试员,在技术面,居然一题都答不上来,这要多高的水平才能有资格去面试字节的测试岗位。 确实,字…

Vue2+CSS实现一个瀑布流布局案例

在练习代码的时候,看到了携程的首页下方的布局还挺好看 就是一个瀑布流的布局效果,在携程上是一共两列布局,然后每个格子的高度都会根据图片的高度做排布 一开始是想使用flex进行布局,先让每个格子各占百分之49,然后贴…

微信小程序实现电子书搜索与下载

1、背景 自己已经做了一版电子书下载网站(走蛟电子书),但用户使用手机更方便些,为改善用户体验,准备做一款微信小程序实现电子书搜索与下载的功能。 2、技术栈 由于功能较为单一,因此前端使用原生的微信…

CSS基础语法

CSS基础语法知识 文章目录 CSS基础语法1. CSS的引入方式1.1 内部样式1.2 外部样式1.3 内联样式 2. CSS标签选择器2.1 标签选择器2.2 类选择器2.3 id选择器2.4 复合选择器 3. CSS常见属性3.1 字体相关3.2 文本相关3.3 颜色的写法3.4 背景相关3.5 边框相关3.6 元素的显示模式3.7 …

【链表应用】| 一元多项式的操作

目录 一. 🦁 要求:二. 代码实现(Java & c)1. Java实现2.C语言实现 三. 🦁 总结 一. 🦁 要求: 设有两个一元多项式: p(x)p0p1xp2x2pnxn q(x)q0q1xq2x2qmxm 多项式项的系数为实数,指数为整数&#xff0c…

11个免费的数据可视化工具推荐

数据可视化之所以流行,不仅是因为它简化了我们查看复杂数据的方式,更是因为数据可视化可以加快我们获取数据信息的速度。 本文专门为您列出了11个免费的数据可视化工具,帮助您快速掌握数据可视化技能。 1.即时设计 即时设计是可云端编辑的…

物通博联工业物联网解决方案,助力工厂实现设备远程运维

各类设备制造工厂随着经营规模与业务的扩张,设备可以销往全国各地甚至是全球,是工厂实力的体现。当设备越来越多、分布越来越广,设备管理的工作量和成本直线上升,可能面对维护不及时的情况,影响到客户经济效益和对工厂…

spark源码 spark on yarn环境的创建

1.入口类 sparkSubmit 的main方法 提交application submitnew SparkSubmit submit.doSubmit(args) -> super.doSubmit(args): parseArguments(args) :参数解析 方法 中 new sparkSubmitArguments(args) 点进去该类(主要解析参数),然后找到parse&am…

C/C++ 内存管理 new delete operator new与operator delete函数 内存泄漏

C/C 内存分布 在C/C 当中有 : 局部数据静态数据和全局数据常量数据动态申请数据 上述不同的数据存储的位置也不同,: 1. 栈又叫堆栈--非静态局部变量/函数参数/返回值等等,栈是向下增长的。2. 内存映射段是高效的I/O映射方式&…

Java运算符详解

目录 🔑前言 🎽算式运算符 ⚙赋值运算符 🍊关系运算符 🍺逻辑运算符 🍒位运算符 🌹移位运算符 🍃条件运算符 🍉运算符优先级 🔑前言 任何一个程序都离不开计算问题&…

IOC/DI配置管理第三方bean(Druid/C3P0)

文章目录 1 案例:数据源对象管理1.1 环境准备1.2 思路分析1.3 实现Druid管理步骤1:导入druid的依赖步骤2:配置第三方bean步骤3:从IOC容器中获取对应的bean对象步骤4:运行程序 1.4 实现C3P0管理步骤1:导入C3P0的依赖步骤2:配置第三方bean步骤3:运行程序 2 加载properties文件2.1…

详解MySQL的并发控制

目录 1.概述 2.事务 2.1.什么是事务 2.2.事务的隔离级别 2.2.1.三种数据一致性问题 2.2.2.四种隔离级别 2.3.如何设置隔离级别 3.锁 3.1.锁与事务的关系 3.2.分类 3.3.表锁 3.3.1.概述 3.3.2.读锁 3.3.3.写锁 3.3.4.保护机制 3.4.行锁 3.4.1.概述 3.4.2.什么…

Redis Java API操作

1、普通maven工程方式 Redis不仅可以通过命令行进行操作&#xff0c;也可以通过JavaAPI操作&#xff0c;通过使用Java API来对Redis数据库中的各种数据类型操作 导入POM依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http…

【Linux Network】传输层协议——UDP

目录 传输层 端口号 端口号范围划分 认识知名端口号(Well-Know Port Number) netstat pidof UDP协议 UDP协议端格式 UDP的特点 面向数据报 UDP的缓冲区 UDP使用注意事项 基于UDP的应用层协议 UDP详解&#x1f337; 传输层 在TCP/IP协议中可以把网络简单的划分为四个部分&#…