储能运行约束的Matlab建模方法

        最近一段时间有很多人问我最优潮流计算中储能系统的建模方法。部分朋友的问题我回复了,有些没有回消息的,我就不再一一回复了,在这里我写一篇博客统一介绍一下。

1.储能系统介绍

        首先,让【GPT】简单介绍一下储能系统:

        “储能设备在电力系统中的作用不可忽视。它们能够将多余的电能储存起来,并在需要时释放出来,以平衡电力供求关系。储能设备可以提供电网的稳定性和可靠性,保证电力系统的正常运行。首先,储能设备能够储存电能,以便在高峰期或紧急情况下提供备用电力。其次,当可再生能源如太阳能和风能产生电力过剩时,储能设备可以将其储存起来,以便在能源短缺或可再生能源不可用时供应电力。储能设备还可以提供快速响应的频率调节,以对抗电力波动。此外,通过在储能设备中储存低成本电力,并在高峰期将其释放,可以有效降低能源成本。总之,储能设备在电力系统中的作用是确保电力供应的稳定性和可持续性,提高能源利用效率,降低成本,并促进清洁能源的应用”。

        GPT回答的还算切题,简单来说,储能系统就是电能的存储装置,电力系统中电能过剩时将电能储存在储能中,电能紧缺时将储能中储存的电能释放出来,像抽水蓄能站就是一种典型的储能系统,而最近比较火热的电动汽车,其本质上也是一种特殊的储能系统。

        在对储能系统进行建模时,通常会涉及一些相关概念,在此进行简单介绍。

1.1 额定容量和额定功率

        储能的额定容量是指储能设备能够储存的最大电能量,通常以千瓦时(kWh)或兆瓦时(MWh)为单位。额定容量越大,意味着储能设备能够储存更多的电能,从而提供更长时间的电力供应。

        额定功率是指储能设备输出的最大功率,通常以千瓦(kW)或兆瓦(MW)为单位。额定功率越大,意味着储能存储或者释放电能的速度越快。

        我们在文献中通常见到的“储能优化配置”这一说法,实际上就是通过数学优化方法来选择储能最优的额定容量和额定功率。

1.2 充电和放电

        储能的充电就是将外界的电能存储到储能中,充电功率就是储能装置在充电过程中,单位时间内从外部电源吸收电能的速率,通常以千瓦(kW)或兆瓦(MW)为单位。

        类似地,储能的放电就是将储能中存储的电能释放出来,放电电功率就是储能装置在放电过程中,单位时间内释放电能的速率,通常以千瓦(kW)或兆瓦(MW)为单位。

        需要注意的是,一般文献中所指的储能充电功率和放电功率,都是储能实际存储或者向外界输出的功率,由于存在功率损耗,外界向储能输入的功率和充电功率不一定相等,储能消耗的功率和放电功率不一定相等。这种现象又引出了充电效率和放电效率的概念。

1.3 充电效率和放电效率

        储能的充电效率就是指充电过程中实际存储到储能中的电能外界向储能输入电能的比值,反映了充电过程中电能的损耗情况,充电效率越高表示充电时损耗越低。

        储能的放电效率就是指放电过程中储能实际输出的电能储能所消耗电能的比值,反映了放电过程中电能的损耗情况,放电效率越高表示放电时损耗越低。

1.4 荷电状态

        储能的荷电状态表示储能装置中存储电能的多少,通常可以使用百分比或者kWh(MWh)两种单位。

        当使用%作为单位时,储能的荷电状态表示储能中目前存储的电能和其总容量的比值,理论上可以从0%(没有储存电能)变化到100%(储存电能达到最大容量)。例如,一个储能装置的荷电状态为50%,表示该装置当前储存电能的容量为最大容量的50%。

        当使用kWh(MWh)作为单位时,储能的荷电状态表示储能当前存储电能的实际值,理论上也可以从0kWh(没有储存电能)变化到额定容量(储存电能达到最大容量),例如,一个储能装置的荷电状态为30MWh,表示该装置当前储存电能为30MWh。

2.储能运行的数学建模

        根据上述概念的介绍我们可以知道,储能系统的额定容量、额定功率、充放电效率都是常量(当然,对于储能优化配置问题来说,额定容量和额定功率也是变量),充放电功率和荷电状态是变量。而且它们之间还存在一定关系:储能充电时荷电状态增大,储能放电时荷电状态减小。理解了这一点后,就可以正式开始学习储能的建模方式。

        假设储能在t时刻充电或放电的功率为PS,t,其中当PS,t≥0时,表示储能系统向外界放电,储能自身荷电状态降低;当PS,t≤0时,表示储能系统充电,储能自身荷电状态增大。此时储能的荷电状态ES,t和充放电功率PS,t的关系可以表示为:

        此外,需要注意的是,计算荷电状态时,充放电效率一个要×,一个要÷,这是充放电效率的概念所决定的,大家可以结合上一节充电效率和放电效率的概念自行体会一下。

        这个公式含有非线性函数max(),一般都需要进行线性化再进行求解,文献中通常有三种不同的处理方式,下面分别进行介绍。

2.1 引入一组0-1变量的方式

        文献[1]中通过引入一组0-1变量,可以将储能的非线性约束转为线性约束,具体如下:

        式(4)和式(5)表示储能的充放电功率应小于其额定值,式(6)表示储能在一个调度期内充放电功率数值上相等(也就是调度始末的荷电状态不变)。式(7)表示储能的荷电状态应保持在一定的区间内。

        也有文献为了公式表达更简洁,引入一个中间变量ES,t表示储能的荷电状态,则式(6)和式(7)可以改写为:

        这样处理增加了变量的数目,但是可以使约束条件表达式更加简洁直观。

2.2 引入两组0-1变量的方式

        在储能的实际运行中,对储能控制策略可能存在很多特殊情况,例如在某一时间段,需要禁止储能进行充电和放电,这种情况下只引入一组0-1变量可能就不是很合适。

        举个例子进行说明,假设存在另一个变量Um用于限制储能的充放电行为,当Um=1,表示储能可以进行充放电,当Um=0时,表示禁止储能进行充放电行为,这时候可以增加两组约束条件,表示变量Um对储能充放电行为的限制:

        另一种更常规的方式是引入两组0-1变量,其中一个表示充电状态,另一个表示放电状态,如文献[2]中的方式: 

当存在对储能充放电状态的限制条件时,引入两组0-1分别表示储能的充放电状态,可以更方便地实现对储能运行的建模。实际情况中这样的约束条件有很多,例如电动汽车只有在充电站时才可以充电,抽水蓄能站在不满足水利条件时无法进行操作等等。

2.3 智能优化算法中的简化表示

        采用常规的数学规划算法时,引入0-1变量一般对问题求解效率不会造成太大影响,但对智能优化算法来说,存在0-1变量通常求解难度会更大,此外,非线性条件并不会影响智能优化算法的求解效率,而决策变量的数目越大,一般来说智能优化算法求解性能会更差。因此,使用智能优化算法求解储能运行策略时,要遵循的原则就是:

        1.尽可能避免使用0-1变量。

        2.尽可能减少变量的数目。

        基于上述原则,很多文献提出了各种不同的建模方式,文献[3]中所提的是1种比较常规的做法,具体如下:

 

        由上面的介绍可知,这样建模是假设了储能的充放电效率都为1,就可以只用储能荷电状态 E_S(t)这1个变量表示储能运行过程中的约束。

        另一种方式是只用储能的充放电功率这一个变量表示储能的运行状态,就可以考虑储能的充放电效率,表达方式如下:

3.实例分析

3.1 问题背景

        我编了一个简单的算例来说明三种不同方法的具体应用:

        某地有一个风-光-储互补系统,某一天中风电、光伏出力以及负荷需求都是已知的,现在需要控制储能的充放电策略,尽可能降低负荷短缺以及弃风弃光的现象。其中,储能系统的额定容量为40MW,额定功率为20MW,充放电效率分别为0.95和0.96,最大和最小荷电状态分别为15%和90%,初始荷电状态为30%,风、光、负荷各个小时的数据分别如下表(单位/MW):

光伏出力

风电出力

负荷需求

0

15.9958

15.6378

0

18.4567

14.7866

0

20.2975

14.3611

0

19.0719

13.7227

0

17.2262

13.5099

0.6857

7.3827

10.6378

2.1619

8.6131

13.8297

4.6232

10.4588

16.3831

7.0138

12.3044

16.7878

7.6877

7.3827

19.4884

9.6786

3.6913

16.8517

14.7472

5.5370

14.2982

10.9453

3.0761

12.8087

10.0531

2.4609

11.7448

7.3323

8.6131

12.3831

6.8265

10.4588

14.511

4.1410

16.6110

15.9955

1.3980

16.6110

16.6389

0.1607

11.0740

17.914

0

9.2283

20.1335

0

9.8436

17.2756

0

9.8436

14.8727

0

14.7653

13.1064

0

19.0719

12.2762

         首先看一下风电、光伏出力之和与负荷需求的匹配情况:

        从图中可以看到,风光出力和负荷需求存在明显的不匹配情况,如果没有储能系统的话,将出现弃风弃光与负荷短缺的情况。下面我们使用Matlab编程求解储能的运行策略,使得风电、光伏出力和负荷需求尽可能匹配。目标函数可以表示为: 

        下面使用三种不同的建模方式分别求解该问题。

3.2 引入一组0-1变量的方式

        通过引入一组0-1变量,可以将上述问题表述为:

 

        该优化问题的目标函数是一个二次函数,约束条件均为线性,包含0-1变量,是一个混合整数二次规划问题,可以使用Yalmip求解器进行求解。运行文件夹内的Method1.m文件即可得到如下结果: 

        由图可知,通过加入储能系统,可以明显减少系统的弃风弃光现象,避免出现负荷短缺的情况,增加新能源消纳率。

3.3 引入两组0-1变量的方式

        下面引入两组0-1变量,将上述问题表述为:

        该优化问题的目标函数是一个二次函数,约束条件均为线性,包含0-1变量,是一个混合整数二次规划问题,可以使用Yalmip求解器进行求解。运行文件夹内的Method2.m文件即可得到如下结果: 

        和第一种建模方式的结果完全一致,说明两种方法是等效的。为了说明第二种建模方式的效果,我们假设为了防止储能过度损耗,要求储能系统一天之内的充放电次数不能大于20次。大家可以思考一下,如果只有一组0-1变量,该如何表达这个约束条件。如果是有两组0-1变量,增加的约束条件可以这样表达: 

        将这个约束条件添加到原优化问题中,然后重新进行优化求解。运行文件中的Method2_1.m文件即可得到如下结果: 

        由以上结果可知,增加储能充放电次数约束之后,弃风弃光与负荷短缺的情况略有增加,新能源消纳率略有下降。但约束储能充放电次数一定程度上可以延缓储能寿命,在实际建模中可以适当考虑。

3.4 智能优化算法中的简化表示

        将储能充放电功率作为决策变量,使用经典的粒子群算法进行求解,优化问题可以表述为:

        使用罚函数的方式将约束条件添加到目标函数中,使用粒子群算法进行求解,其中问题维度为24,种群规模设为500,迭代次数设为500,运行文件夹内的Method3.m文件即可得到如下结果: 

        由结果可知,粒子群算法的效果比直接使用数学规划算法要差不少,需要采取一定措施进行改进。另一方面我们也可以知道,对于可以通过线性化表达转为线性规划、二次规划或者二阶锥规划的非线性规划问题,最好还是使用数学优化方法,加上求解器进行求解,一般效果都会比智能优化算法更好。除非模型实在太复杂,才考虑使用智能优化算法。

4.完整代码

        完整代码可以从以下链接获取:

储能运行约束的Matlab建模方法资源

参考文献

[1]刘一欣,郭力,王成山.微电网两阶段鲁棒优化经济调度方法[J].中国电机工程学报,2018,38(14):4013-4022+4307.

[2]高红均,刘俊勇,沈晓东等.主动配电网最优潮流研究及其应用实例[J].中国电机工程学报,2017,37(06):1634-1645.

[3]陈柯蒙,肖曦,田培根等.一种建筑集成光储系统规划运行综合优化方法[J].中国电机工程学报,2023,43(13):5001-5012.

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt --- 显示相关设置 窗口属性等

主界面,窗口 最小化 最大化 关闭按钮、显示状态自定义: setWindowFlags(Qt::CustomizeWindowHint); setWindowFlags(Qt::WindowCloseButtonHint); //只要关闭按钮 setWindowFlags(Qt::WindowFlags type) Qt::FrameWindowHint:没有边框的窗口 Qt::Window…

WPF基础入门-Class3-WPF数据模板

WPF基础入门 Class3&#xff1a;WPF数据模板 1、先在cs文件中定义一些数据 public partial class Class_4 : Window{public Class_4(){InitializeComponent();List<Color> test new List<Color>();test.Add(new Color() { Code "Yellow", Name &qu…

Spring源码编译-for mac

超详细的spring源码编译 记&#xff1a;编译成功时间&#xff1a;2023.08.19 环境准备&#xff1a; 1.idea 2023.1.1 Community Edition 2.jdk1.8 3.gradlegradle-5.6.4 4.spring源码(版本&#xff1a;spring-framework-v5.2.25.RELEASE) 一.spring源码下载 github 加速网站&…

day-30 代码随想录算法训练营 回溯part06

332.重新安排行程 思路&#xff1a;使用unordered_map记录起点机场对应到达机场&#xff0c;内部使用map记录到达机场的次数&#xff08;因为map会进行排序&#xff0c;可以求出最小路径&#xff09; class Solution { public:vector<string>res;unordered_map<stri…

基于数据湖的多流拼接方案-HUDI概念篇

目录 一、为什么需要HUDI&#xff1f; 1. 传统技术选型存在哪些问题&#xff1f; 2. Hudi有什么优点&#xff1f; 基于 Hudi Payload 机制的多流拼接方案&#xff1a; 二、HUDI的应用场景 1. 什么场景适合使用hudi&#xff1f; 2. 什么场景不适合使用hudi&#xff1f; …

Oracle 查询(当天,月,年)的数据

Trunc 在oracle中&#xff0c;可利用 trunc函数 查询当天数据&#xff0c;该函数可用于截取时间或者数值&#xff0c;将该函数与 select 语句配合使用可查询时间段数据 查询当天数据 --sysdate是获取系统当前时间函数 --TRUNC函数用于截取时间或者数值&#xff0c;返回指定的…

《Go 语言第一课》课程学习笔记(十)

复合数据类型 同构复合类型&#xff1a;从定长数组到变长切片 由多个同构类型&#xff08;相同类型&#xff09;或异构类型&#xff08;不同类型&#xff09;的元素的值组合而成&#xff0c;这类数据类型在 Go 语言中被称为复合类型。 数组有哪些基本特性&#xff1f; Go 语…

Go 语言的实战案例 SOCKS5 代理 | 青训营

Powered by:NEFU AB-IN 文章目录 Go 语言的实战案例 SOCKS5 代理 | 青训营 引入TCP echo serverauth 认证请求阶段relay阶段 Go 语言的实战案例 SOCKS5 代理 | 青训营 GO语言工程实践课后作业&#xff1a;实现思路、代码以及路径记录 引入 代理是指在计算机网络中&#xff…

STL---list

目录 1. list的介绍及使用 1.1 list的介绍 1.2 list的使用注意事项 2.list接口介绍及模拟实现 2.1构造​编辑 2.2容量 2.3修改 3.list迭代器 4.迭代器失效 5.模拟实现 6.vector和list的区别 1. list的介绍及使用 1.1 list的介绍 list的文档介绍 1. list是可以在常…

MySQL下载安装配置

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

电脑文件删除了可以找回吗?分享一种简单恢复删除电脑文件办法!

电脑文件删除了可以找回吗&#xff1f;可以。在原理上讲电脑删除的文件是有希望恢复的&#xff0c;因为操作系统在删除文件的时候并会不会立刻将文件彻底删除。当文件被删除的时候&#xff0c;其文件记录被删除&#xff0c;并且被文件占用的磁盘空间被标记为空闲。 这样对于用户…

成集云 | 旺店通多包裹数据同步钉钉 | 解决方案

源系统成集云目标系统 方案介绍 随着品牌电商兴起&#xff0c;线上线下开始逐渐融为一体&#xff0c;成集云以旺店通ERP系统为例&#xff0c;通过成集云-旺店通连接器&#xff0c;将旺店通ERP系统多包裹数据同步至钉钉实现数据互通&#xff0c;帮助企业解决了电商发货存在的错…

【STM32RT-Thread零基础入门】 7. 线程创建应用(多线程运行机制)

硬件&#xff1a;STM32F103ZET6、ST-LINK、usb转串口工具、4个LED灯、1个蜂鸣器、4个1k电阻、2个按键、面包板、杜邦线 文章目录 前言一、RT-Thread相关接口函数1. 获取当前运行的线程2. 设置调度器钩子函数 二、程序设计1. 头文件包含及宏定义2. 线程入口函数定义3. main函数设…

掌握指针和数组:经典笔试题攻略(万字详解)

&#x1f341;博客主页&#xff1a;江池俊的博客 &#x1f4ab;收录专栏&#xff1a;C语言刷题专栏 &#x1f4a1;代码仓库&#xff1a;江池俊的代码仓库 &#x1f3aa;我的社区&#xff1a;GeekHub &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐ 文章目录 前…

C语言练习2(巩固提升)

C语言练习2 选择题 前言 “志之所趋&#xff0c;无远弗届&#xff0c;穷山距海&#xff0c;不能限也。”对想做爱做的事要敢试敢为&#xff0c;努力从无到有、从小到大&#xff0c;把理想变为现实。要敢于做先锋&#xff0c;而不做过客、当看客&#xff0c;让创新成为青春远航的…

全行业线上商城系统一体化平台,个性化设计-免费更新-亿发

移动互联网成为了现代人生活中不可或缺的一部分。人们已经习惯了通过手机应用完成日常任务&#xff0c;从购物到社交&#xff0c;都能在手指间直接搞定。 随着小程序的兴起&#xff0c;2023年的线上商城系统在不断发展的数字化环境中&#xff0c;如今&#xff0c;线上商城正以…

面试之快速学习STL-迭代适配器

先放一张大图 参考&#xff1a;http://c.biancheng.net/view/7255.html 1. 反向迭代器 例子&#xff1a; std::list<int> values{1,2,3,4,5};auto start_it values.rbegin();const auto end_it values.rend();//start_it end_it std::reverse_iterator<std::lis…

Node.js下载安装及环境配置教程

一、进入官网地址下载安装包 https://nodejs.org/zh-cn/download/ 选择对应你系统的Node.js版本&#xff0c;这里我选择的是Windows系统、64位 Tips&#xff1a;如果想下载指定版本&#xff0c;点击【以往的版本】&#xff0c;即可选择自己想要的版本下载 二、安装程序 &a…

stm32之15.超声波与灯光功能一起实现(进阶)

主函数代码修改 --------------------- 源码 int main(void) {uint32_t t0;uint32_t distance;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);led_init();key_init();/* 初始化串口1波特率为115200bps&#xff0c;若发送/接收数据有乱码&#xff0c;请检查PLL */usart1_ini…

传感网应用开发1+X实训室建方案

一、概述 1.1建设背景 从院校实际教学情况与人才培养计划为出发点&#xff0c;贯彻传感网应用开发1X实训室职业技能等级标准&#xff0c;充分考虑传感网应用开发1X实训室从业人员的职业发展路径与成长路径&#xff0c;以职业素养、职业技能、知识水平为主要框架结构&#xff…