(文章复现)面向配电网韧性提升的移动储能预布局与动态调度策略(1)-灾前布局matlab代码

本文主要是介绍(文章复现)面向配电网韧性提升的移动储能预布局与动态调度策略(1)-灾前布局matlab代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考文献:

[1]王月汉,刘文霞,姚齐,万海洋,何剑,熊雪君.面向配电网韧性提升的移动储能预布局与动态调度策略[J].电力系统自动化,2022,46(15):37-45.

1.基本原理

        该文献中,通过两阶段鲁棒优化模对移动储能的配置数量和初始位置进行优化,建立移动储能配置成本和负荷削减总成本最小的目标函数,考虑的约束条件包括移动储能资源约束、配电网辐射拓扑约束、负荷削减约束、分布式电源出力约束、配电网运行约束等,具体内容不再赘述,大家可以自行下载文献进行查看。

2 模型求解

        灾前预防阶段的两阶段鲁棒优化模型,可以采用列约束生成(C&CG)算法求解,具体内容不再赘述,大家可以自行下载文献进行查看。

3.编程思路分析

3.1参数和变量定义

 表1 相关参数

 

表2 决策变量 

3.2编程思路

        根据对文献内容的解读,可以设计下面的编程思路:

        步骤1输入所需数据

        原文献中使用了标准IEEE33节点配电网,原始数据可以在Matpower工具箱的数据文件中找到,其他的相关数据原文献附录中基本已经提供,大体没啥问题。将所需的数据,按照表1的定义格式输入即可。

        步骤2:定义决策变量

        这一步比较简单,按照表2,初始化决策变量即可。要注意的是每个决策变量的维度以及类型(sdpvar还是binvar)不要出错。

        步骤3:定义目标函数和约束条件,尝试求解确定性优化问题

        按照原文中给定的公式1-20,写出相应的目标函数与约束条件即可,需要注意的地方是在yalmip工具箱中,要转换为二阶锥优化,需要使用cone函数。

        上述步骤都完成后,可以假设不确定变量保持不变,尝试求解一下确定性优化问题。如果能正常求解,则可进行下一步,否则需要反复调试,找到问题所在。

        1.原文的约束条件(12)中,为约束DG的功率因数,引入了二次项,增大了模型求解难度。其实要表达功率因数上下限约束,写成P×tanφmax>Q>P×tanφmin即可,效果一样,但是可以避免引入二次项增加模型求解难度。

        2.在这里强调一点,配电网最优潮流最容易踩坑的地方就是标幺值转换上。之前有朋友拿自己写的代码问我,说感觉公式模型都是按照参考文献打的,但一用求解器就是“Infeasible problem”,拿给我一看,参数中有的数值用的是实际值,有的数值用的是标幺值,非常混乱,我把参数统一修改为标幺值就可以正常运行了。建议在编程时都转换为标幺值求解。

        步骤4将目标函数、约束条件写成紧凑形式

        确定性优化问题能正常求解后,就可以加入不确定变量,调试两阶段鲁棒优化问题是否能正常求解。为了便于两阶段鲁棒优化编程求解,需要把所有的系数写成紧凑的矩阵形式,所有的决策变量写成向量形式。这是因为两阶段鲁棒优化问题的子问题是一个双层优化问题,求解时一般需要通过对偶变换转为单层优化问题进行求解,一般变换过程都相当复杂,容易出错。但使用Matlab+Yalmip工具箱求解时,有三种更便捷的方法:

        一是直接使用yalmip工具箱中的kkt函数(kkt - YALMIP),通过KKT条件将双层优化问题转为单层优化问题。

        二是直接使用yalmip工具箱中的dualize函数(dualize - YALMIP),直接将原问题下层优化转为对偶问题,然后和上层优化合并形成单层优化。

        三是采用yalmip内置的鲁棒优化求解方法(Robust optimization - YALMIP),通过uncertain约束不确定变量,直接求解鲁棒优化问题,但这种方法要求不确定集为简单的盒装不确定集、椭圆不确定集或可通过1范数、2范数显式表达的不确定集。

        这份代码为方便起见,采用kkt条件求解子问题,因此将目标函数、约束条件写成紧凑形式这一步可以省略。

        关于式(41)的错误。从目标函数(1)中可以看到,目标函数中包括0-1变量以及连续变量,其中0-1变量包含在X中,连续变量包含在Y中,因此目标函数中应包括含有X的项以及含有Y的项,但式(41)中目标函数只与Y相关,应该是漏写了,代码中应该把这部分加上。

步骤5:求解两阶段鲁棒优化的主问题

        关于决策变量。原文式(1)描述的比较清楚,第一阶段的决策变量为两个0-1变量,支路状态以及移动储能安装位置,不确定变量为光伏的出力,第二阶段决策变量为其余变量,可写成下列形式:

        原文中用到的算例是改进的IEEE33节点配电网,NB为33,NL为37,NPV为5,NDG为10,因此变量X为70维列向量,变量u为5维列向量,变量Y为226维列向量。

        在Matlab中编写主问题的求解函数时,输入参数应包括当前迭代次数(用于确定新增加的变量Yl和相应的约束条件)和不确定变量u的取值,输出参数包括决策变量X和LB。

 

        步骤6:求解两阶段鲁棒优化的子问题

        子问题是一个min-max的双层优化问题,文中用到对偶变换转为单层优化问题,具有一定的难度(求优化问题的系数矩阵和对偶转换比较困难),代码中是采用yalmip编程的,直接用yalmip工具箱中的kkt函数就可以解出内层max问题的KKT条件,非常方便。这样就可以将min-max的双层优化子问题转为单层优化问题,并使用求解器求解。

        在matlab编写子问题的函数时,输入参数应包括0-1决策变量X的取值,输出参数包括不确定变量u和UB。

        步骤7:采用C&CG算法迭代求两阶段鲁棒优化问题最优解

        有关算法的基本原理可以看我之前的博客(两阶段鲁棒优化及行列生成算法(C&CG)超详细讲解)。此处不再赘述。因为原文式(41)有点小问题,所以为了方便编程,可以重新写一下主问题和子问题。

        主问题:

        子问题: 

 

        步骤8:输出计算结果

        原文中将移动储能的预布局和优化调度拆成两阶段优化策略。预布局是第一阶段的优化,是一个基于混合整数二阶锥的两阶段鲁棒优化问题。这份代码复现了第一阶段灾前移动储能预布局的结果,后面的灾后多源协同的恢复优化模型,过几天有空了我也会解读并发到博客上。

4.完整Matlab代码

        灾前移动储能预布局阶段的完整的matlab代码可以从这个链接获取:
面向配电网韧性提升的移动储能预布局与动态调度策略(1)-灾前布局matlab代码

        全文复现matlab代码可以从这个链接获取:
面向配电网韧性提升的移动储能预布局与动态调度策略-全文复现matlab代码

5.运行结果分析

5.1确定性优化结果

        (1)考虑移动储能优化配置

 

         (2)不考虑移动储能优化配置

 

5.2 两阶段鲁棒优化结果

        (1)考虑移动储能优化配置

 

         (2)不考虑移动储能优化配置

 

        几种结果的对比如下表所示:

场景

移动储能预配置节点

预布局成本/元

两阶段鲁棒优化

考虑移动储能预配置

节点4,7

4666.1668

不考虑移动储能预配置

节点1,1

8085.7385

确定性优化

考虑移动储能预配置

节点7,25

5085.8315

不考虑移动储能预配置

节点1,1

7665.8694

        根据结果可以看出,不考虑移动储能预配置时,虽能减少移动储能位置预配置成本,但需要承担更高的负荷削减成本,而两阶段鲁棒优化与确定性优化相比,考虑了最恶劣的场景,因此制定的方案更保守,预布局成本略高于确定性优化。

这篇关于(文章复现)面向配电网韧性提升的移动储能预布局与动态调度策略(1)-灾前布局matlab代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作

动态规划---打家劫舍

题目: 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。 思路: 动态规划五部曲: 1.确定dp数组及含义 dp数组是一维数组,dp[i]代表

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

搭建Kafka+zookeeper集群调度

前言 硬件环境 172.18.0.5        kafkazk1        Kafka+zookeeper                Kafka Broker集群 172.18.0.6        kafkazk2        Kafka+zookeeper                Kafka Broker集群 172.18.0.7        kafkazk3

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

代码随想录冲冲冲 Day39 动态规划Part7

198. 打家劫舍 dp数组的意义是在第i位的时候偷的最大钱数是多少 如果nums的size为0 总价值当然就是0 如果nums的size为1 总价值是nums[0] 遍历顺序就是从小到大遍历 之后是递推公式 对于dp[i]的最大价值来说有两种可能 1.偷第i个 那么最大价值就是dp[i-2]+nums[i] 2.不偷第i个 那么价值就是dp[i-1] 之后取这两个的最大值就是d

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip