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

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

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

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

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

目录

💥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代码、数据、文章讲解

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

项目实现读写分离操作(mysql)

读写分离 1.问题说明 2.读写分离 Master(主库)----(数据同步)—> Slave(从库) Mysql主从复制 mysql主从复制 介绍 mysql主从复制是一个异步的复制过程,底层是基于mysql数据库自带的二进制日志功能。就是一台或多台…

算法套路十七——买卖股票问题:状态机 DP

算法套路十七——买卖股票问题:状态机 DP 状态机DP是一种将动态规划方法应用于有限状态机(Finite State Machine)的问题求解方法。 状态机DP(State Machine DP)是一种动态规划的思想,它通常用于解决一些具…

如何应用金字塔模型提高结构化表达能力

看一下结构化表达的定义: 结构化表达:是基于结构化思维,理清事物整理与部分之间关系、换位思考后,进行简洁、清晰和有信服力的表达,是一种让受众听得明白、记得清楚、产生认同的精益沟通方式。 结构化表达的基本原则是…

总结如何申请注册 GitHub 教师教育优惠 Benefits for Teachers 来免费使用 copilot

目录 1. GitHub 教师教育优惠有什么2. 如何申请教师教育优惠呢2.1 选择学校2.2 更改个人信息2.3 准备证明材料2.4 提交申请2.5 遇到的问题2.5.1 问题 12.5.2 问题 22.5.3 问题 3 3. 申请免费的 GitHub Copilot 学生注册不在此处赘述了,网上有很多教程可以参考。但是…

前端BFC

一、首先我们要先了解常见的定位方案,总共3种(普通流、浮动、绝对定位) 而BFC是属于普通流的 我们可以把BFC看作为页面的一块渲染区域,他有着自己的渲染规则 简单来说BFC可以看作元素的一种属性,当元素拥有了BFC属性…

Python os模块详解

1. 简介 os就是“operating system”的缩写,顾名思义,os模块提供的就是各种 Python 程序与操作系统进行交互的接口。通过使用os模块,一方面可以方便地与操作系统进行交互,另一方面页也可以极大增强代码的可移植性。如果该模块中相…

二叉堆讲解

二叉堆讲解 大顶堆和小顶堆 从二叉堆的结构说起,它是一棵二叉树,并且是完全二叉树,每个结点中存有一个元素(或者说,有个权值)。 堆性质:父亲的权值不小于儿子的权值(大根堆&#x…

什么是JS事件流

什么是JS事件流? 一&#xff1a;事件冒泡 <!DOCTYPE html> <html lang"en"> <head><title>事件冒泡例子</title> </head> <body><div id"box">点击我</div> </body> </html>上述的代…

利用暴力攻击破解登陆密码

长久以来&#xff0c;入侵远程计算机系统的工具和技术并没有发生翻天覆地的变化。例如&#xff0c;在许多情况下&#xff0c;普通用户只要知道了相关密码&#xff0c;就能立刻变身为管理员。虽然这些情形听起来不够曲折&#xff0c;但在大多数情况下&#xff0c;暴力攻击是通过…

css3 flex弹性布局详解

css3 flex弹性布局详解 一、flexbox弹性盒子 2009年&#xff0c;W3C 提出了一种新的方案----Flex 布局&#xff0c;可以简便、完整、响应式地实现各种页面布局。目前&#xff0c;它已经得到了所有浏览器的支持&#xff0c;这意味着&#xff0c;现在就能很安全地使用这项功能。…

【一起啃书】《机器学习》第五章 神经网络

文章目录 第五章 神经网络5.1 神经元模型5.2 感知机与多层网络5.3 误差逆传播算法5.4 全局最小与局部极小5.5 其他常见神经网络5.6 深度学习 第五章 神经网络 5.1 神经元模型 神经网络是由具有适应性简单单元组成的广泛并行互连的网络&#xff0c;它的组织能够模拟生物神经系统…

生产流程图怎么制作?思路提供

生产流程图是一种图表&#xff0c;用来展示生产流程中的各个环节及其顺序。这种图表可以帮助企业管理者更好地了解生产过程中的各个环节&#xff0c;从而更好地进行管理和优化。生产流程图通常包括各个生产环节的名称、所需时间、参与人员、设备和工具等信息。 在制作生产流程图…

七大软件架构设计原则详解

目录 1、概述 2、七大设计原则 2.1、开闭原则 2.2、里氏替换原则 2.3、依赖倒置原则 2.4、单一职责原则 2.5、接口隔离原则 2.6、迪米特法则 2.7、合成复用原则 3、最后 VC常用功能开发汇总&#xff08;专栏文章列表&#xff0c;欢迎订阅&#xff0c;持续更新...&…

基于jdk1.8的Java服务监控和性能调优

JVM的参数类型 X参数 非标准参数-Xint: 解释执行-Xcomp: 第一次使用就编译成本地代码-Xmixed: JVM自己来决定是否编译成本地代码 默认使用的是mixed mode 用的不多, 只需要做了解, 用的比较多的是XX参数 XX参数 非标准化参数相对不稳定主要用来JVM调优和Debug Boolean: …

【Vue3+TS项目】硅谷甄选day02--后台管理系统模板搭建/项目配置

1 项目初始化 一个项目要有统一的规范&#xff0c;需要使用eslintstylelintprettier来对我们的代码质量做检测和修复&#xff0c;需要使用husky来做commit拦截&#xff0c;需要使用commitlint来统一提交规范&#xff0c;需要使用preinstall来统一包管理工具。 1.1 环境准备 n…

阿里云u1服务器通用算力型CPU处理器性能测评

阿里云服务器u1通用算力型Universal实例高性价比&#xff0c;CPU采用Intel(R) Xeon(R) Platinum&#xff0c;主频是2.5 GHz&#xff0c;云服务器U1实例的基准vCPU算力与5代企业级实例持平&#xff0c;最高vCPU算力与6代企业级实例持平&#xff0c;提供2c-32c规格和1:1/2/4/8丰富…

elasticsearch结构化查询(一)

在上一篇中我们介绍了DSL相关的知识&#xff0c;接下来我们将会学习elasticsearch的结构化查询&#xff0c;同时也实践一下上一篇的DSL的查询用法 什么是结构化搜索? 从《Elasticsearch权威指南》上摘取部分解释如下: 结构化搜索是指查询包含内部结构的数据。日期&#xff0…

MATLAB 之 函数文件、特殊形式的函数和程序调试与优化

文章目录 一、函数文件1. 函数文件的基本结构2. 函数调用2.1 函数调用的格式2.2 函数的递归调用2.3 函数参数的可调性2.4 全局变量与局部变量 二、特殊形式的函数1. 子函数2. 内联函数3. 匿名函数 三、程序调试与优化1. 程序调试方法1.1 利用调试函数进行程序测试1.2 利用调试工…

MySQL数据库,JDBC连接数据库操作流程详细介绍

前言&#xff1a; 在学完 MySQL 和 Java 后&#xff0c;我们通常会尝试使用 Java编译器 连接 MySQL数据库&#xff0c;从而达到使用编译器来操作数据库的效果。连接的这个过程会用 JDBC 相关知识&#xff0c;因此我把 JDBC 包的下载及导入流程&#xff0c;以及 JDBC 的使用流程…

1.Buffer_Overflow-1.Basic_Jump

github上面的练习题 git clone https://github.com/Adamkadaban/LearnPwn 然后开始做 先进行 readelf 然后进行执行看看 是怎么回事 ./buf1发现就是一个输入和输出 我们checksec看看 发现stack 保护关闭 开启了NX保护 我们进入ida64看看反汇编 我习惯先看看字符串 SHITF…