(文章复现)梯级水光互补系统最大化可消纳电量期望短期优化调度模型matlab代码

参考文献:

[1]罗彬,陈永灿,刘昭伟等.梯级水光互补系统最大化可消纳电量期望短期优化调度模型[J].电力系统自动化,2023,47(10):66-75.

1.基本原理

1.1 目标函数

        考虑光伏出力的不确定性,以梯级水光互补系统的可消纳电量期望最大为目标,函数可表示为:

1.2约束条件

1.2.1 电站约束

1)水量平衡约束

2)水库水位约束

 3)初始水位和末水位控制

4)出库流量约束

5)电站出力约束

6)水位-库容关系

7)尾水位-泄流量关系

1.2.2 机组约束

1)机组出力约束

2)机组发电流量约束

3)机组振动区约束

4)机组开、停机持续时间约束

 

机组在调度期内的最大开机次数,以避免频繁开停机。

5)机组出力爬坡约束

6)机组出力波动限制约束

7)机组发电水头约束

8)水头损失函数

9)机组动力特性关系

1.2.3 电网约束

1)梯级水电出力范围约束

2)分区断面约束

从目标函数和分区断面约束可以看出,弃电量中未设置弃水、弃光的优先级,模型目标会使得梯级水电在允许出力范围内优先蓄水减发,以提升受阻断面内光伏消纳量,从而提升互补系统整体可消纳水平,但为保障电网供电支撑无法继续减发时,受到分区断面限制而造成弃光也不可避免。

2.模型求解

2.1 模型转换

        MILP模型构建的关键在于模型的线性化转换 ,所提模型非线性约束包括式(10)、式(11)、式(16)、式(19)、式(21)和式(22)。其中,水位-库容、尾水位-泄流量以及水头损失函数可采用分段线性的方式进行处理[22]。 机组的动力特性参考文献[26],采用三角形权值技术进行处理。特殊地,对于季调节及以上电站,日内始末水位变化幅度较小,可在初始水位附近采用线性函数表示水位库容关系。

        1)机组振动区约束线性化

        大型机组可能存在多个振动区,将出力在最大最小出力范围内划分为多个非连续的安全运行区间。借鉴文献[21],文中假设机组振动区不随机组水头变化而改变,即固定的振动区,假设机组有 K 个振动区,则有 K + 1 个安全运行区间,即

        2)水电机组出力波动限制约束线性化

        水电机组出力的频繁波动表现为相邻时段出力的向上或向下调节。区别于已有文献中采用的关联搜索[27] 和负荷重构[28] 等方法,文中创新性地通过引入调节指标变量进行处理,可有效提高求解效率。

 

        因此 ,式(19)的非线性约束可用式(29)—式(31)替代。如图1所示机组状态变化示意图,当机组稳定出力时间达到 te 后,机组具有上调、下调和平稳出力 3 种有效状态,假设此时为 t0 时刻,若 t1 时刻上调或下调出力,调整之后则仅有平稳出力状态有效,上调和下调的状态暂时无效,直到稳定出力时间再次达到 te 后,机组上调和下调的状态重新有效,如此逐时段约束保证机组出力的稳定性。 

 

2.2 光伏出力场景构建

        受天气变化、预测方法等因素影响,光伏预测出力与实际出力之间的偏差客观存在。文中以历史偏差数据为样本,采用模糊聚类分析,构建光伏出力场景,具体方法流程如下。

        1)出力偏差处理

        2)模糊聚类分析

        以光伏场站历史日内96 点预测出力与实际出力偏差曲线为样本,进行模糊聚类分析,并采用聚类综合质量确定最佳聚类数,最后以各类别的模糊聚类中心构建预测出力偏差场景,具体公式和详细步骤可参考文献[29]。

        3)光伏出力场景

2.3 求解流程

        本文所述的互补系统最大化可消纳电量期望模型的求解步骤如下:

        步骤 1:读取基础数据并设置计算条件。包括区间流量、梯级发电计划、光伏预测出力、光伏历史预测与实际出力、分区断面约束、爬坡能力等。

        步骤 2:模型转换处理。采用 2.1 节所述模型转换方法,对非线性约束进行线性化处理。

        步骤 3:光伏出力场景构建。根据计划日光伏预测出力以及 2.2 节所述方法构建光伏出力场景。

        步骤 4:模型求解。将目标函数与转化后的约束结合构成的 MILP 模型,在 Java 环境中,编码调用CPLEX 求解类,实现模型求解,附录 Á 给出了编码和求解示例。

        步骤 5:结果输出。输出互补系统整体可消纳电量期望值,不同组合场景下的电站出力、机组出力、机组开停机、出库流量、水库水位等结果信息。

3.编程思路分析

3.1参数和变量定义

表1 相关参数

 

 表2 决策变量

 

3.2编程思路

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

        步骤1:输入所需数据

算例分析用到的部分数据可以从原文中找到,大部分数据文献中都没有给出,只能参考其他文献进行设置。然后将所有需要的数据,按照表1的定义格式输入即可。包括区间流量、梯级发电计划、光伏预测出力、光伏历史预测与实际出力、分区断面约束、爬坡能力等。

        步骤2:光伏出力的场景生成与削减

        这部分就是根据计划日光伏预测出力以及原文中2.2节所述方法构建光伏的出力场景。原文中只是简单提到采用了参考文献[29]中所用方法进行场景生成与削减,并未详细介绍,此类方法比较简单,网上也能找到很多示例。另外,本来这个模型就是涉及非常多0-1变量,问题规模比较大,如果再加上多个场景,变量的数目将呈倍数增加,所以在复现的代码中,我就没有写场景生成与缩减的程序,直接给出了数据,选取典型的光伏出力场景作为算例。如果有需要的话可以自己修改数据,或者加入场景生成与削减的代码。

        步骤3:定义决策变量

        这一步比较简单,按照表2,初始化决策变量即可,同时每个决策变量的维度以及类型(sdpvar还是binvar)不要出错。另外,代码中变量定义的方式和文献中稍微有点不一样,这里不再详细介绍,具体可以去代码中查看。

        步骤4:写目标函数和约束条件

        写目标函数比较简单,按照给定的数据和定义的变量,写出目标函数即可。约束条件的处理比较复杂,文中只给出了约束条件16和19的线性化方法,其他几个非线性约束都是一笔带过,只说了用到某某文献中的方法。方便起见,我在这里把所有非线性约束都写出来,并介绍处理方法:

        1)式10

        原文中只给出了水位和库容的关系示意,一般情况下水位可以表示为库容的三次多项式,具体如下:

        四个不同的水电站水位-库容关系可以分别表示为:

y1=0.0006x^3-0.0811x^2+4.769x+1031, 10<=x<=45

y1=0.0269x^3-0.8958x^2+14.77x+891.8, 3.6<=x<=8.8

y1=0.01307x^3-0.699x^2+10.41x+803.5, 10<=x<=25

y1=0.005465x^3-0.1435x^2+3.495x+700.2, 5<=x<=22

        针对上述非线性函数关系,可采用分段线性化的方法将其转为线性约束,如图所示

2)式11

        尾水位是泄流量的非线性函数,通常表示为泄流量的2次多项式:

        四个不同的水电站尾水位-泄流量关系可以分别表示为:

y2=7.619e-07q^2-0.000672q+976.1

y2=7.081e-08q^2-9.372e-05q+839.1

y2=7.086e-08q^2+0.00032345q+752.6

y2=1.327e-07q^2-0.0005827q+655.9

        针对上述非线性函数关系,可采用分段线性化的方法将其转为线性约束,和约束10处理方法一致。

        3)式16、19

        原文中有详细解释,此处不再赘述。

        4)式21

        约束21是一个二次约束,也可以通过分段线性化的方式转为线性约束。不再赘述。

        5)式22

        水电站的非线性出力曲线,可以表示如下:

 

为了说明采用三角权值法是如何对这个表达式进行线性化的,首先把表达式简化如下:

        假设将Q的取值范围分为n1-1个区间,区间的端点值分别为Q1,Q2,...,Qn1,将H的取值范围分为n2-1个区间,区间的端点值分别为H1,H2,...,Hn2。那么对于任意的Q和H,都可以表示为区间端点值的线性组合,例如Q的取值在Q1和Q2之间,就可以用Q1和Q2表示Q,H的取值范围在H3和H4之间,就可以用H3和H4表示H。

        我们令pij=Hi×Qj,那么表达式也可以表示为:

        下面举个例子,假设H取值范围是[10,25],分为3个区间,区间端点分别为H1=10, H2=15, H3=20, H4=25,H取值范围是[80,100],分为4个区间,区间端点分别为H1=80, H2=85,H3=90, H4=95, H5=100。假设H是13,Q是86,就可以写成H=0.6H1+0.4H2,Q=0.8Q2+0.2Q3,QH就可以写成(0.6H1+0.4H2)(0.8Q2+0.2Q3)。也就是λ21=0.6×0.8,λ31=0.6×0.2,λ22=0.4×0.8,λ32=0.4×0.2。因此,可以将机组的输出功率表示为变量λij和已知量pij的表达式,从非线性表达式转为线性表达式。

步骤5求解模型

        原文中使用的是java和cplex求解,这份代码使用的是matlab+yalmip+cplex求解。

步骤6输出结果

        按原文中的格式输出优化结果,但由于文中提供的数据非常少,大部分数据都是自己设定的,所以结果肯定不一样,但原理都是一样的。

4.Matlab代码

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

https://download.csdn.net/download/weixin_44209907/88130711

5.运行结果分析

5.1光伏出力曲线

 5.2运行机组台数

 

5.3梯级水电站群出力 

 

5.4水电机组出力 

 

 5.5梯级水电站水位变化

 5.6各个断面出力

 

 

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

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

相关文章

uni-app:实现分页功能,单击行获取此行指定数据,更改行样式

效果&#xff1a; 分段解析代码 分页功能实现&#xff1a; 一、标签 1、搜索栏-模糊查询 <!-- 搜索框--><form action"" submit"search_wip_name"><view class"search_position"><view class"search"><…

uniapp 小程序实时且持续获取定位信息(全局设置一次)(单页面监听定位改变)(不采用定时器)

本篇文章实现了uniapp 微信小程序实时获取定位信息,小程序打开即可持续获取定位信息, 位置更新也会触发相关自定义事件 优点 只设置一次不采用定时器的方式无需多个页面调用单独页面若想获取当前位置是否变化 可单独设置监听,并调用不同逻辑事件 原理: 采用uniapp推出的: un…

数据结构——单链表OJ题

单链表OJ题 前言一、删除链表中等于给定值 val 的所有节点二、反转一个单链表三、返回链表的中间结点四、输出该链表中倒数第k个结点五、将两个有序链表合并六、链表的回文结构七、将链表分割成两部分八、找出第一个公共结点九、判断链表中是否有环总结 前言 在前面的博客中我…

中国农村程序员学习此【JavaScript教程】购买大平层,开上帕拉梅拉,迎娶白富美出任CEO走上人生巅峰

注&#xff1a;最后有面试挑战&#xff0c;看看自己掌握了吗 文章目录 在 Switch 语句添加多个相同选项从函数返回布尔值--聪明方法undefined创建 JavaScript 对象通过点号表示法访问对象属性使用方括号表示法访问对象属性通过变量访问对象属性给 JavaScript 对象添加新属性删除…

青大数据结构【2016】

一、单选 二、简答 3.简述遍历二叉树的含义及常见的方法。 4.简要说明图的邻接表的构成。 按顺序将图G中的顶点数据存储在一维数组中&#xff0c; 每一个顶点vi分别建立一个单链表&#xff0c;单链表关联依附顶点vi的边&#xff08;有向图为以vi为尾的弧&#xff09;。 邻接…

[LeetCode]只出现一次的数字相关题目(c语言实现)

文章目录 LeetCode136. 只出现一次的数字ⅠLeetCode137. 只出现一次的数字 IILeetCode260. 只出现一次的数字 IIILeetCode268. 丢失的数字 LeetCode136. 只出现一次的数字Ⅰ 题目: 给你一个 非空 整数数组 nums &#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元…

Pytorch深度学习-----神经网络的基本骨架-nn.Module的使用

系列文章目录 PyTorch深度学习——Anaconda和PyTorch安装 Pytorch深度学习-----数据模块Dataset类 Pytorch深度学习------TensorBoard的使用 Pytorch深度学习------Torchvision中Transforms的使用&#xff08;ToTensor&#xff0c;Normalize&#xff0c;Resize &#xff0c;Co…

【vue】 Tinymce 富文本编辑器 不想让上传的图片转换成base64,而是链接

前言&#xff1a;最近项目上需要使用富文本编辑器&#xff0c;觉得tinymce很不错就用了&#xff0c;具体怎么在项目中使用参考 【vue】 vue2 中使用 Tinymce 富文本编辑器 【vue】 Tinymce 数据 回显问题 | 第一次正常回显后面&#xff0c;显示空白bug不能编辑 这两天又遇到了…

“用户登录”测试用例总结

前言&#xff1a;作为测试工程师&#xff0c;你的目标是要保证系统在各种应用场景下的功能是符合设计要求的&#xff0c;所以你需要考虑的测试用例就需要更多、更全面。鉴于面试中经常会问“”如何测试用户登录“”&#xff0c;我们利用等价类划分、边界值分析等设计一些测试用…

iOS--frame和bounds

坐标系 首先&#xff0c;我们来看一下iOS特有的坐标系&#xff0c;在iOS坐标系中以左上角为坐标原点&#xff0c;往右为X正方向&#xff0c;往下是Y正方向如下图&#xff1a; bounds和frame都是属于CGRect类型的结构体&#xff0c;系统的定义如下&#xff0c;包含一个CGPoint…

【Docker】初识Docker以及Docker安装与阿里云镜像配置

目录 一、初识Docker 二、安装Docker 三、Docker架构 四、配置Docker镜像加速器 一、初识Docker Docker是一个开源的应用容器引擎&#xff0c;诞生于2013年&#xff0c;基于Go语言实现&#xff0c;dotCloud公司出品&#xff0c;Docker开源让开发者打包他们的应用以及依赖包到…

我的会议(会议通知)

前言: 我们在实现了发布会议功能&#xff0c;我的会议功能的基础上&#xff0c;继续来实现会议通知的功能。 4.1实现的特色功能&#xff1a; 当有会议要参加时&#xff0c;通过查询会议通知可以知道会议的内容&#xff0c;以及当前会议状态&#xff08;未读&#xff09; 4.2思路…

Python selenium对应的浏览器chromedriver版本不一致

1、chrome和chromedriver版本不一致导致的&#xff0c;我们只需要升级下chromedriver的版本即可 浏览器版本查看 //打开google浏览器直接访问&#xff0c;查看浏览器版本 chrome://version/ 查看chromedriver的版本 //查看驱动版本 chromedriver chromedriver下载 可看到浏…

在 Amazon EMR 上构建实时数据湖

前言 当公司业务发展遇到瓶颈时&#xff0c;业务分析师以及决策者们总会希望通过交叉分析大量的业务数据和用户行为数据&#xff0c;以解答“为什么利润会下滑&#xff1f;”“为什么库存周转变慢了&#xff1f;”等问题&#xff0c;最终整点“干货”出来从而促进业务发展。 …

一文了解JavaScript 与 TypeScript的区别

TypeScript 和 JavaScript 是两种互补的技术&#xff0c;共同推动前端和后端开发。在本文中&#xff0c;我们将带您快速了解JavaScript 与 TypeScript的区别。 一、TypeScript 和 JavaScript 之间的区别 JavaScript 和 TypeScript 看起来非常相似&#xff0c;但有一个重要的区…

替换linux的文泉驿正黑fonts-wqy-zenhei字体 替换linux默认中文字体

WSL 怎么替换 linux 的文泉驿正黑 fonts-wqy-zenhei 字体 WSL 怎么替换 linux 默认中文字体 在 wsl 中默认是没有 gnome 界面或者 xface 的&#xff0c;但是我需要使用 wsl 开发 electron 或者使用 chrome 浏览器。这个时候系统就会调用默认的系统字体了。 我使用的是 debian…

风辞远的科技茶屋:来自未来的信号枪

很久之前&#xff0c;有位朋友问我&#xff0c;现在科技资讯这么发达了&#xff0c;你们还写啊写做什么呢&#xff1f; 我是这么看的。最终能够凝结为资讯的那个新闻点&#xff0c;其实是一系列事情最终得出的结果&#xff0c;而这个结果又会带来更多新的结果。其中这些“得出”…

低代码开发平台源码:基于模型驱动,内置功能强大的建模引擎,零代码也能快速创建智能化、移动化的企业应用程序

管理后台低代码PaaS平台是一款基于 Salesforce Platform 的开源替代方案&#xff0c;旨在为企业提供高效、灵活、易于使用的低代码开发平台。低代码PaaS平台的10大核心引擎功能:1.建模引擎 2.移动引擎 3.流程引擎 4.页面引擎 5.报表引擎 6.安全引擎 7.API引擎 8.应用集成引擎 9…

SkyEye与Jenkins的DevOps持续集成解决方案

在技术飞速发展的当下&#xff0c;随着各行各业的软件逻辑复杂程度提升带来的需求变更&#xff0c;传统测试已无法满足与之相对应的一系列测试任务&#xff0c;有必要引入一个自动化、可持续集成构建的DevOps平台来解决此类问题。本文将主要介绍SkyEye与Jenkins的持续集成解决方…

IDEA中文UT方法执行报错问题、wps默认保存格式

wps默认保存格式、IDEA中文UT方法执行报错问题 背景 1、wps修改文件后&#xff0c;编码格式从UTF-8-bom变成UTF-8&#xff08;notepad可以查看&#xff09;&#xff1b; 2、IDEA中文UT执行报错&#xff1a; 解决方案 1、语言设置中不要勾选 “Beta版。。。。” 2、cmd中执…