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

news2024/11/19 23:34:06

参考文献:

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

1.基本原理

1. 1 目标函数

        在灾害发生后,配电网失去主网供电,设故障的持续时间可根据灾害强度和抢修资源数量做出预测。以故障持续时间内负荷削减功率加权值最小为目标,建立多源协同的灾后恢复优化模型,通过动态调度移动储能、电动汽车与柴油发电机,最大限度提升配电网韧性,目标函数如下:

1. 2 约束条件

1. 2. 1 移动储能的时空动态调度约束

        在电网-交通网融合系统中,移动储能的调度状态由其充放电状态和交通运输状态共同决定,具有时空耦合特性。考虑移动储能i在节点j与节点 k 间的交通通行时间与安装配置时间,建立移动储能的时空动态调度模型,设运输过程不消耗电能,其时空动态调度如图2所示。

        由于交通网络容易受到实时路况、突发事件影响,在不同灾害时段与路况影响下移动储能在相同道路的实际通行时间可能存在差异[21]。为了保证灾害场景下应急移动储能设备通行的可靠性,本文考虑冰雪等全覆盖型灾害对交通状况的影响,通过交通融合系数来反映移动储能的实际车速与等效通行距离之间的空间调度关系[17] 。

1. 2. 2 电动汽车充放电约束

        假设电动汽车充电桩与电动汽车均满足“车网互动”条件,即可向电网输电。在灾害发生后,接入充电桩的电动汽车可通过电池放电向负荷提供电能,其充放电功率和荷电状态需要满足以下约束:

1. 2. 3 其他约束

        在灾后恢复阶段,各时刻的负荷削减功率、分布式电源出力与配电网运行仍需要满足相应约束,约束条件形式与灾前预布局阶段相同﹐见式(8)—式(20)。

2 模型求解

        灾后恢复优化模型为混合整数二阶锥规划问题,可利用商业求解器 Gurobi 求解。

3.编程思路分析

3.1参数和变量定义

表1 相关参数

 表2 决策变量

 

3.2编程思路

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

步骤1输入所需数据

        部分数据和灾前移动储能预配置阶段的相同,继续用就行其他的数据可在原文提供的附录中获取,这部分主要的问题和难点如下:

        获取各节点的距离矩阵。原文中给出的假设是交通网拓扑与电网相同,相邻电气节点间的道路距离为 2 km。但是,在文章的背景中,由于考虑了配电网重构,配电网拓扑结构可能会不断变化,交通网不可能随着电网拓扑变化。所以假设交通网和初始配电网拓扑相同。另外,需要用到的距离矩阵是所有节点两两之间的距离,目前已知的是相邻节点的距离,需要采用图论算法进行求解。

        步骤2:定义决策变量

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

        需要注意一点,由于文中共有两个移动储能车,33个节点,11个时段,如果采用常规变量定义方式,alpha_ME将是一个2×33×11的三维变量,这么处理会大大降低程序运行速率。为了方便起见,将定义两个33×11的二维变量,alpha_ME1alpha_ME2,就可以避免使用三维决策变量。

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

        按照原文中给定的公式,写出相应的目标函数与约束条件即可。但文中涉及的优化问题是一个多时段的混合整数二阶锥优化,如果采用常规的思维,在写约束条件时经常会用到三层以上的循环,大大拖慢程序运行速度,可以采用一些小技巧避免多层循环的使用,提高程序效率。

        1.以约束条件(26)为例说明如何避免多重循环的使用。式(26)只写了t的取值范围,如果把其他下标的取值范围都标上,式(26)就变成了下面这样:

        按常规思维来看,需要写成5层循环的形式,matlab代码如下:

for t = 1:NT
    for i = 1:NME
        for j = 1:NB
            for k = 1:NB
                for dt = 1:min([floor(T_ME(j,k,t)),NT-t])
                    Constraints = [Constraints , alpha_ME(i,j,t) + alpha_ME(i,k,t+dt) <= 1];
                end
            end
        end
    end
end

        首先,在定义决策变量时,就已经把两个移动储能的决策变量分开表示,可以减小一层循环,另外,可以将j,k两层循环写成一组数对,方法如下:

j_index = zeros(1,33*33);
k_index = zeros(1,33*33);
it = 1;
for j = 1:33
    for k = 1:33
        j_index(it) = j;
        k_index(it) = k;
        it = it + 1;
    end
end

        其中j_indexk_index都是1089(33×33)维的数据,把这两个变量提前存在工作区,使用时读取出来,就可以把5层循环减小到2层循环,如下所示:

for t = 1:NT
    for dt = 1:min([floor(T_ME(j_index(k),k_index(k),t)),NT-t])
        % 式26
        Constraints = [Constraints , alpha_ME1(j_index,t) + alpha_ME1(k_index,t+dt) <= 1 , alpha_ME2(j_index,t) + alpha_ME2(k_index,t+dt) <= 1];
    end
end

        经过这样处理,运行时间从原本的0.383611秒减小到0.001126秒,提升的效率达到了99.71%。我只是以约束条件(26)为例进行说明,当优化问题非常复杂时,减少循环语句的使用对程序运行效率的提升是非常惊人的。

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

        这一步是最难的部分,需要有耐心,反复调试。为了避免在大段约束条件中寻找错误,建议是每加上一条约束条件,便调试一下模型是否可解,如果可解,再加入下一个约束条件,否则需要反复调试,找到问题所在。

        步骤4:输出计算结果

        原文中将移动储能的预布局和优化调度拆成两阶段优化策略,第二阶段为多源协同的灾后恢复优化模型,是一个混合整数二阶锥规划模型(MISOCP)。这份代码复现了第二阶段多源协同的灾后恢复优化模型的结果,第一阶段的结果可以查看我之前的博客。

4.完整Matlab代码

        完整的matlab代码可以从这个链接获取:

🍞两阶段鲁棒韧性提升策略

5.运行结果分析

5.1表2 移动储能的动态调度结果

 

5.2 图B3 灾害发生后光伏机组的预测出力 

5.3 图4 各时段负荷功率和恢复比例 

5.4 图B4 移动储能有功功率输出与接入位置的关系

5.5 图B5 移动储能荷电状态与接入位置的关系 

5.6 图B6 灾后恢复阶段柴油发电机有功功率输出

 

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

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

相关文章

基于SpringBoot+Vue的酒店管理系统设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架下…

代码随想录 二叉树 Java(二)

文章目录 &#xff08;*中等&#xff09;222. 完全二叉树的节点个数&#xff08;*简单&#xff09;110. 平衡二叉树&#xff08;*简单&#xff09;257. 二叉树的所有路径&#xff08;简单&#xff09;404. 左叶子之和&#xff08;简单&#xff09;513. 找树左下角的值&#xff…

设计模式的原则(一)

相信自己&#xff0c;无论自己到了什么局面&#xff0c;请一定要继续相信自己。 新的世界开始了&#xff0c;接下来&#xff0c;老蝴蝶带领大家学习一下设计模式。 我们先了解一下 设计原则 一.设计模式 一.一 设计原则 设计模式常用的七大原则: 单一职责原则接口隔离原则…

【项目】接入飞书平台

前言 项目有和飞书打通的需求&#xff0c;因为是第一次打通&#xff0c;摸索过程还是花了些时间的&#xff0c;现在相关笔记分享给大家。 步骤 1、熟悉开发文档 熟悉飞书的开发文档&#xff1a;开发文档 &#xff0c;找到你需要的接口&#xff0c;拿我为例&#xff0c;我需…

长生的秘密:肠道菌群代谢组学

欲遂长生志&#xff0c;但求千金方。长生不老是人类文明历程中苦苦追寻的目标之一&#xff0c;影响人类寿命的因素也复杂多样&#xff0c;包括但不限于遗传因素如性别、线粒体状态、染色体稳定性、端粒长短、疾病、干细胞活性&#xff1b;环境因素如肠道微生物、饮食、运动、空…

如何解决“RuntimeError: CUDA Out of memory”问题

当遇到这个问题时,你可以尝试一下这些建议,按代码更改的顺序递增: 减少“batch_size” 降低精度 按照错误说的做 清除缓存 修改模型/训练 在这些选项中,如果你使用的是预训练模型,则最容易和最有可能解决问题的选项是第一个。 修改batchsize 如果你是在运行现成的代码或…

页面置换算法的模拟与比较

前言 在计算机操作系统中&#xff0c;页面置换算法是虚拟存储管理中的重要环节。通过对页面置换算法的模拟实验&#xff0c;我们可以更深入地理解虚拟存储技术&#xff0c;并比较不同算法在请求页式虚拟存储管理中的优劣。 随着计算机系统和应用程序的日益复杂&#xff0c;内存…

技术管理方法论

今天来跟大家分享一下我对于技术管理的理解。先介绍一下对于管理最普遍的认识&#xff0c;我们每一个人在公司里面都有两种类型的角色&#xff0c;一种是通过个人的能力和产出来实现组织利益的最大化&#xff0c;另外一类人就是通过管理使得一群人产出结果最大化。 也就是我们…

阿里P8传授的80K+星的MySQL笔记助我修行,一周快速进阶

MySQL 是最流行的关系型数据库之一&#xff0c;广泛的应用在各个领域。下面这些问题对于程序员的你来说应该很常见&#xff0c;来看看你面对这些问题是否会胆怯? MySQL数据库作发布系统的存储&#xff0c;一天五万条以上的增量&#xff0c;预计运维三年,怎么优化&#xff1f; …

Linux防火墙学习笔记8

iptables的白名单和黑名单&#xff1a; iptables -t filter -I INPUT -s 192.168.2.20 -p tcp --dport 80 -j DROP 之前内网的机器可以访问到80端口&#xff0c;现在添加了这条规则&#xff0c;那么就192.168.2.10这个用户就不能访问了。 案例&#xff1a;白名单&#xff1a;…

系列二、RuoYi前后端分离(登录密码加密去除公钥)

一、问题描述 系列一虽然实现了登录时密码加密&#xff0c;但是/getPublicKey返回的结果中&#xff0c;把私钥也返回了&#xff0c;这样显然是不合理的&#xff0c;如下&#xff1a; 二、后端代码修改 2.1、RSAUtil package com.tssl.business.utils;import org.apache.comm…

STM32单片机蓝牙APP LORA无线远程火灾报警温度烟雾监控系统

实践制作DIY- GC0145蓝牙APP LORA无线远程火灾报警 基于STM32单片机设计---蓝牙APP LORA无线远程火灾报警 二、功能介绍&#xff1a; 1个主机&#xff1a;STM32F103C系列单片机LCD1602显示器蜂鸣器 LORA无线模块3个按键&#xff08;设置、加、减&#xff09;HC-05蓝牙模块&…

Node包管理工具

包管理工具 package代表了一组特定功能的源码集合。 管理包的应用软件&#xff0c;可以对包进行下载安装&#xff0c;更新&#xff0c;删除&#xff0c;上传等操作 借助包管理工具&#xff0c;可以快速开发项目&#xff0c;提高开发效率 前端常用包管理工具 npm Node Pack…

【算法系列 | 3】深入解析排序算法之——选择排序

序言 你只管努力&#xff0c;其他交给时间&#xff0c;时间会证明一切。 文章标记颜色说明&#xff1a; 黄色&#xff1a;重要标题红色&#xff1a;用来标记结论绿色&#xff1a;用来标记一级论点蓝色&#xff1a;用来标记二级论点 决定开一个算法专栏&#xff0c;希望能帮助大…

基于Hexo和Butterfly创建个人技术博客,(3) 创建博客文章及文章模板配置

Hexo官司网查看 这里 笔者个人站查看 这里 特别说明&#xff1a; hexo博客站点发布的文件全是静态文件&#xff0c;没有任何后台服务。博文的发布过程是&#xff1a;1、在本地用hexo new命令创建.md文件----2、经hexo g命令生成.html文件-----3、再通过hexo d命令发布到远程主机…

知网CN期刊《才智》简介及投稿邮箱

《才智》杂志成立于2001年&#xff0c;隶属吉林省人事厅&#xff0c;是经国家新闻出版总署批准的&#xff0c;吉林省人事系统唯一一本面向全国公开发行的杂志。是一本专业发表各类论文评定职称的省级理论性杂志。以挖掘各行各业拔尖人才、促进科教兴国、振兴人才市场为己任&…

python套接字(二):实现一个服务器和多客户端连接

文章目录 前言一、问题二、实现一个服务器连接多个客户端1、问题分析2、代码实现a、服务器端b、客户端 3、运行 前言 在上一篇博客python套接字(一)&#xff1a;socket的使用简单说明了一下套接字的使用&#xff0c;也实现了使用套接字来传输消息&#xff0c;但是也有一个问题…

深度学习应用篇-推荐系统[12]:经典模型-DeepFM模型、DSSM模型召回排序策略以及和其他模型对比

【深度学习入门到进阶】必看系列&#xff0c;含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、预训练模型、对抗神经网络等 专栏详细介绍&#xff1a;【深度学习入门到进阶】必看系列&#xff0c;含激活函数、优化策略、损失函数、模型调优、归一化…

JavaWeb笔记(五)

JavaWeb后端 经过前面的学习&#xff0c;现在终于可以正式进入到后端的学习当中&#xff0c;不过&#xff0c;我们还是需要再系统地讲解一下HTTP通信基础知识&#xff0c;它是我们学习JavaWeb的基础知识&#xff0c;我们之前已经学习过TCP通信&#xff0c;而HTTP实际上是基于T…

使用SonarLint在开发阶段提高代码质量

使用SonarLint在开发阶段提高代码质量 SonarLint是什么 SonarLint是一个免费的IDE插件&#xff0c;是一个代码质量工具。 它可以在我们编写代码的时候&#xff0c;就帮我我们发现问题并提醒我们。可以帮助我们养成良好的代码习惯。 它支持5000条规则&#xff0c;可以帮助我…