随机自适应鲁棒方法!基于恶劣场景辨别法的微网随机自适应鲁棒模型程序代码!

本文主要是介绍随机自适应鲁棒方法!基于恶劣场景辨别法的微网随机自适应鲁棒模型程序代码!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

随着分布式电源(distributed generator,DG)接入电网比例的不断提高,其出力的随机性和间歇性对电力系统的安全稳定运行构成威胁。微网凭借先进的智能计量技术、协调控制技术以及信息通信技术,为有效解决DG并网提供了新的思路。然而,由于电价的波动性和风光出力的随机性,不平衡惩罚依然存在,微网参与市场竞标仍存在很大的风险。微网往往聚合可再生能源、储能、需求响应(demand response,DR)等多种分布式能源,通过协调内部各机组出力,实现作为一个有机整体参与电网运行与调度,极大减小了分布式电源单独并网对公网造成的冲击,并提高了其市场竞争力。多阶段鲁棒优化调度模型能够在仅知道不确定性因素边界值的基础下,严格保证极端条件下的系统运行可靠性,并通过动态迭代降低保守性,克服了静态鲁棒优化的缺点。

恶劣场景概念及现实意义

从现实意义上来讲,所谓最恶劣场景,就是使得微网实时调度收益最低的场景,例如,当光伏出力波动较大,在本该出力较高的10-16(一般认为)时,由于天气等原因,此时光伏出力值较低,为了满足较高的负荷需求,微网在此时需要增加向电网的购电电量或增开燃气轮机组等其余发电设备,相较于成本较低廉的光伏发电,该举措使得微网的发电成本增加,从而其收益有所降低。

事实上,整体目标函数包括两部分,第一阶段基准场景下的日前优化调度收益最大化,由于基准场景一般给定,所以第一阶段为确定性的优化模型。第二阶段考虑了所有可能出现的光伏场景,设该场景集合为Ω,第二阶段的min-max问题其实质含义为,假设Ω集合中共计有ns种光伏场景,则内层max求解的是每一个光伏场景微网的实时调度收益最大化问题,共计有ns种最优解,分别对应不同场景。而外层的min主要用于辨别这ns种场景下使得微网实时收益最低的场景,若假设当取场景si时,对应的微网实时调度收益在所有场景中最低,则可认为此时的si最恶劣场景,也称恶劣场景。

鲁棒性的定义与意义

鲁棒性是指算法模型在面对各种异常情况时,能够保持良好的性能和稳定性。在实际应用中,数据可能存在噪声、缺失、异常值等问题,算法模型需要具备一定的鲁棒性才能在这些情况下正常工作。提高算法模型的鲁棒性可以提高其在真实环境中的适应性和可靠性,为实际问题的解决提供更好的保障。

自适应鲁棒优化求解思路

目前求解自适应鲁棒优化问题主要有4种思路:1)仿射算法;2)Benders分解算法;3)列约束生成法;4)场景法。

首先,仿射算法利用线性决策规则建立决策变量与不确定参数之间的仿射关系,从而将两阶段问题转化为单阶段优化问题,但是结果较为保守;

Benders分解算法以及列约束生成法在线性化过程中会引入大量的边界参数和整数变量,导致问题规模较大时模型求解复杂;

场景法需要列举大量不确定场景集合,导致计算的效率偏低,求解时间过长。

迭代流程图

程序介绍

针对光伏出力的随机性与间歇性,采用动态鲁棒优化法对其进行处理。构建了考虑电价和光伏出力不确定性的微网两阶段鲁棒优化调度模型,并采用恶劣场景辨别算法将原问题分解为主问题和子问题进行迭代求解。子问题用来辨别最恶劣的光伏出力情景,并通过主问题对该情景下的单层优化模型进行求解,从而极大地削减了所需求解情景数量,提高了模型的计算效率。程序中算例丰富,注释清晰,干货满满,创新性和可扩展性很高,足以撑起一篇高水平论文!下面对程序做简要介绍!

程序适用平台:Matlab+Yalmip+Cplex

参考文献:《基于恶劣场景辨别法的微网随机自适应鲁棒模型》-南方电网技术

复现情况:本程序未复现考虑微网同时参与日前能量市场、实时能量市场以及碳交易市场的情况,感兴趣的小伙伴可以自己尝试添加。

程序结果

部分程序

kmp=length(j);P_MP=sdpvar(1,1);​u_GTon=binvar(1,24);
u_GToff=binvar(1,24);u_GT=binvar(1,24);​C_GT=sdpvar(kmp,24);
P_DA=sdpvar(1,24);S_DA=sdpvar(1,24);​P_RT=sdpvar(kmp,24);
S_RT=sdpvar(kmp,24);g_GT=sdpvar(kmp,24);P_D=sdpvar(kmp,24);​
C_GT>=0,​Pmax>=P_DA>=0,
Pmax>=S_DA>=0,Pmax>=P_RT>=0,​Pmax>=S_RT>=0,
g_GT>=0,P_Dmax>=P_D>=0,​
u_GT(t)-u_GT(t-1)<= u_GTon(t),u_GT(t-1)-u_GT(t)<= u_GToff(t),      ​
​2*u_GToff(t)<=2-u_GT(t)-u_GT(t+1);    
2*u_GTon(t)<= u_GT(t)+u_GT(t+1);​
C_GT(s,t)==a*u_GT(t)+k*g_GT(s,t)+SUC*u_GTon(t)+SUD*u_GToff(t),​
g_GT(s,t) <= u_GT(t)*g_GT_max;     ​
​g_GT(s,t)-g_GT(s,t-1)<=RU;  
​g_GT(s,t)-g_GT(s,t-1)>=-RD; 
S_DA(t)+S_RT(s,t) == P_DA(t)+P_RT(s,t)+P_RES(s,t)+g_GT(s,t);    ​
​P_MP<=sum(x_RT.*(S_RT(s,:)-1.1*P_RT(s,:)))-sum(C_GT(s,:));
Obj_MP=Obj_MP+x_DA(t)*(S_DA(t)-1.1*P_DA(t))-SUC*u_GTon(t)-SUD*u_GToff(t);

部分内容源自网络,侵权联系删除!

欢迎感兴趣的小伙伴关注并私信获取完整版代码,小编会不定期更新高质量的学习资料、文章和程序代码,为您的科研加油助力!

这篇关于随机自适应鲁棒方法!基于恶劣场景辨别法的微网随机自适应鲁棒模型程序代码!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/920878

相关文章

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安

Maven 配置中的 <mirror>绕过 HTTP 阻断机制的方法

《Maven配置中的<mirror>绕过HTTP阻断机制的方法》:本文主要介绍Maven配置中的<mirror>绕过HTTP阻断机制的方法,本文给大家分享问题原因及解决方案,感兴趣的朋友一... 目录一、问题场景:升级 Maven 后构建失败二、解决方案:通过 <mirror> 配置覆盖默认行为1. 配置示

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

Java中Map.Entry()含义及方法使用代码

《Java中Map.Entry()含义及方法使用代码》:本文主要介绍Java中Map.Entry()含义及方法使用的相关资料,Map.Entry是Java中Map的静态内部接口,用于表示键值对,其... 目录前言 Map.Entry作用核心方法常见使用场景1. 遍历 Map 的所有键值对2. 直接修改 Ma

Mybatis Plus Join使用方法示例详解

《MybatisPlusJoin使用方法示例详解》:本文主要介绍MybatisPlusJoin使用方法示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录1、pom文件2、yaml配置文件3、分页插件4、示例代码:5、测试代码6、和PageHelper结合6

Python主动抛出异常的各种用法和场景分析

《Python主动抛出异常的各种用法和场景分析》在Python中,我们不仅可以捕获和处理异常,还可以主动抛出异常,也就是以类的方式自定义错误的类型和提示信息,这在编程中非常有用,下面我将详细解释主动抛... 目录一、为什么要主动抛出异常?二、基本语法:raise关键字基本示例三、raise的多种用法1. 抛

Java中实现线程的创建和启动的方法

《Java中实现线程的创建和启动的方法》在Java中,实现线程的创建和启动是两个不同但紧密相关的概念,理解为什么要启动线程(调用start()方法)而非直接调用run()方法,是掌握多线程编程的关键,... 目录1. 线程的生命周期2. start() vs run() 的本质区别3. 为什么必须通过 st

C#之List集合去重复对象的实现方法

《C#之List集合去重复对象的实现方法》:本文主要介绍C#之List集合去重复对象的实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C# List集合去重复对象方法1、测试数据2、测试数据3、知识点补充总结C# List集合去重复对象方法1、测试数据

SpringBoot读取ZooKeeper(ZK)属性的方法实现

《SpringBoot读取ZooKeeper(ZK)属性的方法实现》本文主要介绍了SpringBoot读取ZooKeeper(ZK)属性的方法实现,强调使用@ConfigurationProperti... 目录1. 在配置文件中定义 ZK 属性application.propertiesapplicati