(文章复现)考虑微网新能源经济消纳的共享储能优化配置matlab代码

news2024/11/15 13:55:28

参考文献:

[1]谢雨龙,罗逸飏,李智威等.考虑微网新能源经济消纳的共享储能优化配置[J].高电压技术,2022,48(11):4403-4413.

1.基本原理

        双层规划是具有两个层次的优化问题,具有外层和内层两个优化目标,本研究的问题结构如图2所示。两层问题相互耦合,决策结果相互影响,可以在外层先进行决策的条件下,寻找内层问题的最优值。在本文提出的算法中,外层模型用于寻找新能源最优消纳率并求解共享储能电站配置问题,内层模型在外层模型的基础上利用外层模型决策的消纳率和储能电站配置方案求解微网最优化运行问题。

1. 1 外层模型

        外层模型用于求解经济消纳率及共享储能电站配置问题,优化目标为共享储能电站–微网系统综合成本最低,决策变量为新能源经济消纳率及共享储能电站功率容量。

1.1.1 优化目标函数

        共享储能电站–微网系统总成本由3部分构成:共享储能电站投资、微网从电网购电费用、微网购买燃料费用。外层优化目标为共享储能电站–微网系统综合成本最低。优化目标函数可表示为:

        1)共享储能电站投资费用

        共享储能电站投资包含电站建设的一次性投资等年值与每年用于维护的固定投资费用,在计算共享储能电站投资成本时应考虑资金时间价值,故投资成本等年值可表示为:

        2)微网从电网购电费用

        3)微网购买燃料费用

1.1.2 约束条件

        1)能量倍率约束

        储能电池容量与额定功率之间存在能量倍率约束,具体表示为:

        2)充放电约束

        在同一调度时段,电站的充放电状态由各微网用户电站母线处完成能量交换后的总能量需求决定,同时限制共享储能电站在同一调度时段不能同时充电和放电,其约束为:

         3)储能电池荷电状态约束

1.2 内层模型

        内层模型用于求解微网经济运行问题,优化目标为微网年运行成本最低,决策变量为微网内各设备运行情况、微网从电网购电情况、微网与共享储能电站功率交换情况与经济消纳率。

1.2.1 优化目标函数

        内层模型优化目标为微网年运行成本最低,可表示为:

         1)微网向共享储能电站售电收益

        2)微网从共享储能电站购电成本 

        3)微网向共享储能电站缴纳服务费成本 

1.2.2 约束条件

        1)微网供电系统约束

        微网内部电功率需满足发用电平衡,其约束条件为

        微网可以与共享储能电站进行能量交换,且在同一调度时段不能同时充放电,能量交换约束为 

        微网内电气设备出力以及微网从大电网购电功率需满足一定限制,其约束条件为 

        2)微网供冷供热系统约束

        微网供冷供热系统需满足冷热功率平衡及余热平衡,约束条件为

        微网内供冷供热系统设备出力需满足一定限制,约束条件为 

         3)微网新能源消纳约束

2.模型求解

        本文构建的双层规划模型中存在非线性约束,且两层模型相互耦合,难以对其直接进行求解,可使用KKT法对其进行转化求解。该方法可在内层模型凸连续可微的前提下,利用内层模型互补松弛条件将内层模型转换成外层模型的附加约束条件,形成单层模型。转化后的模型优化目标仅包含原外层模型优化目标,原内层模型优化目标及约束条件以约束形式存在。双层规划模型转化求解流程如图3所示,模型转化与线性化过程在附录中给出。通过上述步骤,将内层模型转化为外层模型的附加约束条件,形成单层混合整数线性规划模型,随后可利用求解器 CPLEX 12.8 对其进行求解。

表1 相关参数

表2 决策变量 

 

3.2编程思路

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

        步骤1:输入所需数据

        算例分析用到的部分数据可以从原文以及文献《能源互联网背景下共享储能的商业模式探索与实践》、《考虑电能交互的冷热电多微网系统日前优化经济调度》中找到,大部分数据文献中都没有给出,只能参考其他文献进行设置。然后将所有需要的数据,按照表1的定义格式输入即可。需要说明的是,文中将两个不同的参数都命名为δs,为了区分,把其中一个变量修改为δservice

        步骤2:定义决策变量

        这一步比较简单,按照表2,初始化决策变量即可,同时每个决策变量的维度以及类型(sdpvar还是binvar)不要出错。但需要注意的是,文献的理论部分,每个变量都包含了上下标M,N,但是算例中似乎是把每个典型日分开处理的,所以也可以仿照文章中的做法,把每个典型日分开处理,求解四个不同的优化问题,而不是耦合起来计算。

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

        这一步也比较简单,按照给定的数据和定义的变量,分别写出上下层优化的目标函数即可。需要注意的是,原文的数学模型有点问题,主要的两个问题如下:

        1.在约束6中,应该是所有微电网向储能电站的购售电功率之和等于储能电站的充放电功率之和。原文中应该是有个笔误,改成这样才是正确的:

        2.从下层优化的公式8-17来看,上层共享储能站配置的额定容量与额定功率似乎和下层优化没有任何关系,也就是说如论上层优化的储能电站配置结果咋样,下层优化的结果都是不变的,显然是不合理的。

        从逻辑上分析,微网向储能电站购售电时,应该还受到储能电站充放电功率约束,也就是需要把上层优化中式6的约束添加到下层约束中,同时还要令所有微电网购售电的功率之和小于储能的额定功率,这样才能确保逻辑是合理的。也就是需要把式13改成下面这样:

步骤4:使用yalmip工具箱中的kkt函数求下层优化的KKT条件

        使用kkt函数,可以直接求出下层优化的KKT条件,并将其作为上层优化的约束,就可以求出双层优化问题的最优解。关于kkt函数的用法,可以参考yalmip工具箱的官方文档。

4.完整Matlab代码

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

(文章复现)考虑微网新能源经济消纳的共享储能优化配置matlab代码

5.运行结果分析

        由于文献中没有给出四个典型日的风、光新能源,以及冷、热、电负荷的曲线,我手上也没有类似的数据,所以这份代码中只有一个典型日的运行结果。如果需要修改为其他数据,自行修改即可。只需修改数据,代码主体不需要变化。

5.1场景1运行结果

 

         场景1不配置共享储能站,所以新能源消纳率很低,只有68%左右。

5.2场景2运行结果

 

         配置共享储能站后,新能源消纳率从场景1的68提升到了91%。

5.3场景3运行结果

 

         场景3中,我把新能源消纳率限定为100%,为实现100%消纳清洁能源,则需要配置94578kWh的共享储能站,成本非常高。

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

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

相关文章

打印机不打印故障检查步骤

第一步:检查打印机电源是否接通、打印机电源开关是否打开、打印机数据线的连接是否正确。 第二步:检查打印机进纸盒中是否有纸,打印机内是否卡纸,感光鼓组件是否有问题。 第三步:检查应用程序是否有问题或存在病毒。 第…

C#,数值计算——分数阶的贝塞尔函数(Bessel functions of fractional order)源代码

分数阶微积分这一重要的数学分支,其诞生在1695年,几乎和经典微积分同时出现。那一年,德国数学家Leibniz 和法国数学家LHopital 通信,探讨当导数的阶变为1/2时,其意义是什么?当时Leibniz也不知道定义与意义&…

强化学习-理解及应用:解决迷宫问题

什么是强化学习? 强化学习(Reinforcement Learning, RL)是一种机器学习方法,旨在让智能体(agent)通过与环境的交互学习如何做出最优的行动选择以获得最大的累积奖励。 7个基本概念 强化学习主要由智能体…

YApi-高效、易用、功能强大的可视化接口管理平台——(三)YApi 项目管理

YApi 项目管理 新建项目修改项目图标项目迁移项目拷贝删除项目配置环境请求配置请求参数示例返回数据示例storage工具函数异步处理(v1.3.13支持) token全局mock 新建项目 点击右上角的 新建项目,进入新建项目页面: 完善项目信息…

JVM理论(三)运行时数据区--PC寄存器/虚拟机栈/本地方法栈

运行时数据区(JVM内存结构) JVM内存结构 内存是非常重要的资源,是硬盘和CPU的中间桥梁,承载操作系统和应用程序的实时运行.JVM内存布局规定java在运行过程中内存申请、分配、管理的策略,保证JVM高效稳定运行。不同的JVM对于内存划分和管理机制存在部分差异(如J9和JR…

Nacos2.3.0源码启动报错找不到符号com.alibaba.nacos.consistency.entity

一. 源码下载编译:找不到符号com.alibaba.nacos.consistency.entity 如果报错找不到符号com.alibaba.nacos.consistency.entity Nacos\consistency\src\main\java\com\alibaba\nacos\consistency\entity 这个包下没有相关的java文件,其实是我们没有编译…

Vue.js 双向数据绑定的具体实现代码(简洁版)

1、 执行初始化,对data执行响应化处理 先来一个构造函数:执行初始化,对data执行响应化处理 class Vue { constructor(options) { this.$options options; this.$data options.data; // 对data选项做响应式处理 observe(this.$data);…

Linux性能优化实践——CPU上下文

CPU上下文切换 Linux是一个多任务操作系统,它支持远大于CPU数量的任务同时运行。这些任务不是真正意义上的并行运行,而是系统在短时间内,将CPU轮流分配给它们,造成任务同时运行的错觉。 CPU需要知道任务从哪里加载,从…

使用 OpenVINO™ 转换和优化 YOLOv8

本教程还可以作为 Jupyter Notebook 提供,可以直接从 GitHub 克隆。请参阅安装指南,了解在 Windows、Linux 或 macOS 上本地运行本教程的说明。 Ultralytics 开发的 YOLOv8 算法是一种尖端、最先进的 (SOTA) 模型,旨在快速、准确且易于使用,使其成为各种物体检测、图像分割…

Cartoon头像 InsCode Stable Diffusion 美图活动一期

一. 简单介绍和活动地址 简单介绍 试用Stable Diffusion 模型生成优质人物好图,更简单地炼丹。 “InsCode是一个集成了在线IDE、在线AI编程、在线算力租赁、在线项目部署以及在线SD 模型使用的综合代码开发平台。不论你是初级软件工程师,还是AI大模型…

【Java】删除集合元素的正确与错误做法

错误做法 一、fori正序 list.remove(num) Test public void test031(){ ArrayList<Integer> list new ArrayList<>(); list.add(1); list.add(3); list.add(3); for (int i 0; i < list.size(); i) { Integer numlist.get(i); if(num3){ list.re…

数据集 VOC转YOLO格式

一、xml转换为txt import os.path import xml.etree.ElementTree as ET import os import random # class_names [palm, stone, scissor, awesome, heartB, OK, ROCK, one, swear, thanks, heartA, # heartC, good, bad, pray, call, take_picture, salute] c…

Java:缓冲流

1.缓冲流分类 2.字节缓冲流 原理:底层自带了长度为8192的缓冲区提高性能。 1.方法&#xff1a; public BufferedInputstream( Inputstream is)&#xff1a;把基本流包装成高级流&#xff0c;提高读取数据的性能。public BufferedOutputStream(OutputStream os)把基本流包装成…

【Java|基础篇】面向对象三大特性之继承(上)

文章目录 1. 前言2. 问题提出3. 什么是继承4. 继承的特点 1. 前言 继承是面向对象三大特性之一. Java的继承也是很复杂. 本篇文章先帮助大家理解继承的概念 2. 问题提出 先来看这两个类: Student类: public class Student {private String name;private int age;private S…

【技能实训】DMS数据挖掘项目-Day02

文章目录 任务3【任务3.1】实现日志实体类【任务3.2】创建日志业务类&#xff0c;实现日志信息的采集及打印输出【任务3.3】创建日志测试类&#xff0c;测试任务3.2中的程序&#xff0c;演示日志信息的采集及打印输出 任务4【任务4.1】物流实体信息类【任务4.2】创建物流业务类…

Slicer学习笔记(六十四) 关于3DSlicer的python脚本和编程

Slicer学习笔记(六十四) 关于3DSlicer的python脚本和编程 目标1. 软件结构2. 在Slicer中使用python控制台 简单的脚本模块示例3. 单独编写简单的脚本模块目标 1. 软件结构 Slicer应用程序架构 模块类型:c++可加载 模块类型:脚本加载 模块类型:CLI Slicer数据模型 MRML

SendGrid 无法注册,Create Account 按钮灰色无法点击

问题描述&#xff1a; 注册SendGrid的时候&#xff0c;账号密码都输好了&#xff0c;就是没办法点【Create Account】。 解释思路&#xff1a; 其实空白处有一个reCAPTCHA 验证码&#xff0c;但是被隐去了。所以我们的思路是如何让网页中的reCAPTCHA 验证码顺利显示出来。 问…

vue实现一个购物车全功能

效果图: 1.静态代码结构渲染 <div class"app-container" id"app"><!-- 顶部banner --><div class"banner-box"><img src"http://autumnfish.cn/static/fruit.jpg" alt"" /></div><!-- 面包…

了解个人所得税

文章目录 1 个人所得税1.1 前置知识&#xff08;一定多看几遍&#xff09;1.2 个人所得税计算 2 汇算清缴参考 1 个人所得税 1.1 前置知识&#xff08;一定多看几遍&#xff09; 首先我们要弄清楚几个概念&#xff1a; ① 应纳税所得额 综合所得额 - 免征 - 扣除 ② 综合所…

Selenium浏览器自动化测试框架简单介绍

目录 selenium简介 介绍 功能 优势 基本使用 获取单节点 获取多节点 节点交互 动作链 执行JavaScript代码 获取节点信息 切换frame 延时等待 前进和后退 cookies 选项卡管理 异常处理 选项卡切换 无头浏览器 selenium简介 介绍 Selenium [1] 是一个用于We…