【电力系统】考虑储能优化的微网能量管理双层模型附matlab代码

news2024/11/10 13:31:45

​✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法  神经网络预测 雷达通信  无线传感器

信号处理 图像处理 路径规划 元胞自动机 无人机  电力系统

⛄ 内容介绍

可再生能源 (RES) 和储能系统 (ESS) 在微电网中的集成为最终用户和系统运营商带来了潜在利益。然而,RES 的间歇性问题和 ESS 的高成本需要对微电网的经济运行进行审查。本文介绍了一种用于微电网的双层预测能量管理系统 (EMS),该系统具有由电池和超级电容器组成的混合 ESS。结合充电深度和寿命方面的混合 ESS 退化成本,电池和超级电容器的长期成本被建模并转化为与实时操作相关的短期成本。为了以最低的运营成本保持较高的系统稳健性,提出了一种分层调度模型来确定有限时间范围内微电网中公用事业的调度,其中上层 EMS 最小化总运营成本,下层 EMS 消除由预测误差引起的波动。仿真研究表明,可以在两个控制层使用不同类型的能量存储来实现多个决策目标。包含不同定价方案、预测范围长度和预测准确性的场景也验证了所提出的 EMS 结构的有效性。仿真研究表明,可以在两个控制层使用不同类型的能量存储来实现多个决策目标。包含不同定价方案、预测范围长度和预测准确性的场景也验证了所提出的 EMS 结构的有效性。仿真研究表明,可以在两个控制层使用不同类型的能量存储来实现多个决策目标。包含不同定价方案、预测范围长度和预测准确性的场景也验证了所提出的 EMS 结构的有效性。

⛄ 部分代码

clear;

clc;

addpath('./datasets' , './examples', './misc', ...

    './model_func', './print_func', './process_func', './user_func' );

%% Do not modify this part

tol_opt       = 1e-8;

opt_option    = 1; 

iprint        = 5;

[tol_opt, opt_option, iprint, printClosedloopDataFunc]...

    = fcnChooseAlgorithm(tol_opt, opt_option, iprint, @printClosedloopData);

%Do not modify this part END

%% Initialization

global fst_output_data ;

global snd_output_data ;

fst_output_data = [];

snd_output_data = [];

fst = fcnSetStageParam('fst');

snd = fcnSetStageParam('snd');

%import datasets

fprintf('Import data....');

importDataTic = tic;

mpcdata = fcnImportData('data/data_all.csv','data/price_seq_RT.csv');

pv_5m_data_all = xlsread('data/pv_5m_5percent.xlsx');

wind_5m_data_all = xlsread('data/wind_5m_5percent.xlsx');

importDataTic = toc(importDataTic);

fprintf('Finish. Time: %4fs\n', importDataTic);

clearvars importDataTic;

% Step (2) of the Nonlinear MPC algorithm:

options = fcnChooseOption(opt_option, tol_opt, fst.u0);

%% Start iteration: first layer

fst.mpciter = 0; % Iteration index

while( fst.mpciter < fst.iter )

    % Read data

    fst.load = mpcdata.load(fst.mpciter+1:fst.mpciter+fst.horizon,:);

    fst.PV = mpcdata.PV(fst.mpciter+1:fst.mpciter+fst.horizon,:);

    fst.wind = mpcdata.wind(fst.mpciter+1:fst.mpciter+fst.horizon,:);

    fst.price = mpcdata.price(fst.mpciter+1:fst.mpciter+fst.horizon,:);

    % FIRST mpc calculation

    tic

    [fst.f_dyn, fst.x_dyn, fst.u_dyn] = fst_mpc( fst, fst_output_data );

    toc

    

%Second Layer Initialization

    snd.pv_all = [];

    snd.load_all = [];

    snd.price_all = [];

    snd.u0_ref = [];

    if snd.flag == 0 % initial state of supercap

        snd.xmeasure = [fst.x_dyn(1,:),50]; 

    else

        snd.xmeasure = [fst.x_dyn(1,:),snd.xmeasure(1,3)];

    end

        

    for i = 1:1:snd.from_fst %take care the value of MPCITER

        snd.load_all = [snd.load_all ; repmat(mpcdata.load(fst.mpciter+i),snd.iter,1)];

        snd.price_all = [snd.price_all;repmat(mpcdata.price(fst.mpciter+i), snd.iter,1)];

        snd.u0_ref = [snd.u0_ref, repmat([ fst.u_dyn(:,i);0],1,snd.iter)]; % reference of variables in snd layer  

    end

    snd.u0 = snd.u0_ref(:,1:snd.horizon);

    %% Start iteration: second layer

    snd.mpciter = 0; %iteration Index 

    snd.option = options;

    while (snd.mpciter < snd.iter)

        % data changed in every 5 min

        snd.PV = pv_5m_data_all(snd.mpciter+1+12*fst.mpciter, 1:12)';

        snd.wind = wind_5m_data_all(snd.mpciter+1+12*fst.mpciter, 1:12)';

        % data not changed in every 5 min

        snd.load = snd.load_all(snd.mpciter+1:snd.mpciter+snd.horizon,:);

        snd.price = snd.price_all(snd.mpciter+1:snd.mpciter+snd.horizon,:);

        %%

        %SECOND mpc calculation

        [snd.f_dyn, snd.x_dyn, snd.u_dyn] = snd_mpc( snd, snd_output_data );

        %Next iteration:

        snd.u0 = shiftHorizon(snd.u_dyn); %Estimated control variables

        snd.xmeasure = snd.x_dyn(2,:);

        snd.mpciter = snd.mpciter+1;

        

        snd.x = [ snd.x; snd.x_dyn(1,:) ];

        snd.u = [ snd.u; snd.u_dyn(:,1)' ];

    end

    snd.flag = 1; %

%Second layer ends

    %FIRST: Next iteration

    fst.u0 = shiftHorizon(fst.u_dyn); %Estimated control variables

    fst.xmeasure = snd.xmeasure(1,1:2); % From the second layer if second layer EXISTS

%   fst.xmeasure = fst.x_dyn(2,:); %Estimated state variables, if second layer does not exist

    fst.mpciter = fst.mpciter+1;

    

    %FIRST: Next iteration ends

    fst.f = [fst.f, fst.f_dyn];

    fst.x = [ fst.x; fst.x_dyn(1,:) ];

    fst.u = [ fst.u; fst.u_dyn(:,1)' ];

end

esspower=value(fst.u);

esssoc=value(fst.x);

esspower1=value(fst.u_dyn);

esssoc1=value(fst.x_dyn);

miwind=value(fst.wind);

miPV=value(fst.PV);

miload=value(fst.load);

% costallcal=value(fst.f)

% costvalu=value(costallcal.)

figure(1)

% yyaxis left

bar(esssoc(:,1),'linewidth',0.001)

xlabel('时间段')

ylabel('储能充放电功率')

% yyaxis right

plot(esssoc(:,2),'-g*','linewidth',1.25)

grid

xlabel('时间段')

ylabel('SOC值')

title('储能调度结果')

legend('储能充放电功率','储能SOC值')

figure(2)

plot(esspower(:,1),'-r*','linewidth',1.25)

grid

xlabel('时间段')

ylabel('generation power')

figure(3)

plot(esspower(:,2),'-r*','linewidth',1.25)

grid

xlabel('时间段')

ylabel('batt power')

figure(4)

plot(miload,'-g*','linewidth',1.15)

hold on

grid

plot(miPV,'-r*','linewidth',1.15)

hold on

plot(miwind,'-y*','linewidth',1.15)

xlabel('时间段')

ylabel('功率/MW')

title('风光荷参数曲线')

legend('基本负荷','光伏出力','风电出力')

figure(5)

plot(esssoc1(:,2),'-g*','linewidth',1.25)

grid

hold on

plot(esssoc(:,2),'-r*','linewidth',1.25)

legend('场景1 soc曲线','场景2 soc曲线')

xlabel('时间段')

ylabel('SOC值')

title('储能调度结果')

figure(6)

plot(esssoc1(:,1),'-g*','linewidth',1.25)

grid

hold on

plot(esssoc(:,1),'-r*','linewidth',1.25)

legend('场景1 功率曲线','场景2 功率曲线')

xlabel('时间段')

ylabel('充放电功率')

title('储能调度结果')

%rmpath('./datasets' , './examples', './misc', ...

%    './model_func', './print_func', './process_func', './user_func' );

% save('exportData/fst.mat','fst');

% save('exportData/snd.mat','snd');

% save('exportData/ALL.mat');

⛄ 运行结果

⛄ 参考文献

⛄ Matlab代码关注

❤️部分理论引用网络文献,若有侵权联系博主删除

❤️ 关注我领取海量matlab电子书和数学建模资料

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

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

相关文章

一篇文章带你了解HBase、Zookeeper的安装部署

第 2 章 HBase 快速入门2.1 HBase 安装部署2.1.1 Zookeeper 正常部署2.1.2 Hadoop 正常部署2.1.3 HBase 的解压2.1.4 HBase 的配置文件2.1.5 HBase 远程发送到其他集群2.1.6 HBase 服务的启动2.1.7 查看 HBase 页面2.1.8 高可用&#xff08;可选&#xff09;2.2 HBase Shell 操…

「地表最强」C++核心编程(四)类和对象—对象初始化和清理

环境&#xff1a; 编译器&#xff1a;CLion2021.3&#xff1b;操作系统&#xff1a;macOS Ventura 13.0.1 文章目录一、构造函数和析构函数1.1 构造函数1.2 析构函数1.3 示例二、构造函数的分类及调用1.1 构造函数的分类1.2 构造函数的调用三、拷贝构造函数调用时机3.1 调用时机…

黑*头条_第1章_环境搭建、SpringCloud微服务(注册发现、服务调用、网关)(新版)

黑*头条_第1章_环境搭建、SpringCloud微服务(注册发现、服务调用、网关)&#xff08;新版&#xff09; 文章目录黑*头条_第1章_环境搭建、SpringCloud微服务(注册发现、服务调用、网关)&#xff08;新版&#xff09;1)课程对比2)项目概述2.1)能让你收获什么2.2)项目课程大纲2.3…

计算机毕业设计——基于HTML仿淘宝电商项目的设计与实现管理系统论文源码(21页)

常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 游戏、 节日、 戒烟、 电影、 摄影、 文化、 家乡、 鲜花、 礼品、 汽车、 其他等网页设计题目, A…

毕业设计 stm32便携用电功率统计系统 -物联网 嵌入式 单片机

文章目录0 前言1 简介2 主要器件3 实现效果4 设计原理4.1 降压电路4.2 接口部分4.3 主控4.4 OLED模块5 部分核心代码5 最后0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕业答辩的…

小黑被劝退了,生活学习依然继续的leetcode之旅:572. 另一棵树的子树

小黑代码 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solution:def isSubtree(self, root: Optional[TreeNode],…

PyTorch~cpp_extension

还是pytorch哈~~ 结合 Python 与 C 各自的优点&#xff0c;在 PyTorch 中加入 C / CUDA的扩展&#xff0c;详细解释C/CUDA 算子实现和调用全流程 代码来源&#xff1a;MMCV, PyTorch。 https://github.com/open-mmlab/mmcv https://github.com/pytorch/pytorch 注&#xff1a…

python 编程 函数的返回值

作者简介&#xff1a;一名在校计算机学生、每天分享Python的学习经验、和学习笔记。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.函数 1.函数的返回值介绍 2.函数的返回值定义 例子&#xff1a; 3.函…

【图像去噪】均值+中值滤波图像去噪(含PNSR)【含GUI Matlab源码 372期】

⛄一、图像去噪及滤波简介 1 图像去噪 1.1 图像噪声定义 噪声是干扰图像视觉效果的重要因素&#xff0c;图像去噪是指减少图像中噪声的过程。噪声分类有三种&#xff1a;加性噪声&#xff0c;乘性噪声和量化噪声。我们用f(x,y&#xff09;表示图像&#xff0c;g(x,y&#xff0…

面试题:进程 线程 协程

进程&#xff08;Process&#xff09;是计算机中的程序关于某数据集合上的一次运行活动&#xff0c;是系统进行资源分配和调度的基本单位 通俗的讲&#xff1a;进程可以理解为我们在电脑上正在运行的一个个应用&#xff0c;例如&#xff1a;QQ&#xff0c;微信&#xff0c;LOL…

数据结构---寻找一个整数所有数字全排列的下一个数

寻找一个整数所有数字全排列的下一个数储备知识第一步第二步第三步JAVA实现给出一个正整数&#xff0c;找出这个正整数所有数字全排列的下一个数。说通俗点就是在一个整数所包含数字的全部组合中&#xff0c;找到一个大于且仅大于原数的新整数。 例子&#xff1a; 如果输入123…

【翻译】GPT-3是如何工作的

前排提示 这是我补充的内容&#xff0c;仅代表个人观点&#xff0c;和作者本人无关。 主要是意译我的补充&#xff0c;想看原文表达的拖到最底下有链接。 原文翻译 在科技界我们可以看到很多关于GPT-3的新闻。大型语言模型&#xff08;比如GPT-3&#xff09;已经展示出让我们惊…

[附源码]Python计算机毕业设计Django现代诗歌交流平台

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

一篇ThreadLocal走天下

尺有所短&#xff0c;寸有所长&#xff1b;不忘初心&#xff0c;方得始终。 请关注公众号&#xff1a;星河之码 在面试的时候经常会有人文ThreadLocal是啥&#xff0c;首先明确的一点是&#xff1a;虽然ThreadLocal提供了一种解决多线程环境下成员变量的问题&#xff0c;但是Th…

SSM框架学习记录-SpringMVC_day01

1.SpringMVC概述 SpringMVC功能与优点 SpringMVC是一种基于Java实现MVC模型的轻量级Web框架 SpringMVC技术与Servlet技术功能一样(对Servlet进行了封装)&#xff0c;都属于Web层开发技术 SpringMVC的主要的作用就是用来接收前端发过来的请求和数据然后经过处理并将处理的结果…

自定义注解实现参数校验

个人博客地址&#xff1a; http://xiaohe-blog.top/ 文章目录1. 为什么要进行参数校验2. 如何实现参数校验3. 注解实现参数校验4. 自定义注解实现参数校验1. 为什么要进行参数校验 在后端进行工作时&#xff0c;需要接收前端传来的数据去数据库查询&#xff0c;但是如果有些数…

目前智慧工厂建设面临的急需解决的问题有哪些?

当前国内诸多制造业企业面临着巨大的转型压力。一方面&#xff0c;劳动力成本迅速攀升、产能过剩、竞争激烈、客户个性化需求日益增长等因素&#xff0c;迫使制造企业从低成本竞争策略转向建立差异化竞争优势。具体在工厂层面&#xff0c;制造企业面临着招工难&#xff0c;以及…

去应聘测试管理职位时遇到的面试题

前言&#xff1a; 在测试管理的路上&#xff0c;少不了招聘测试管理的测试人员&#xff0c;或自己去应聘测试管理人员的时候&#xff0c;因此梳理了关于测试管理职位的面试题&#xff1a; 1、请你列举你曾经担任的测试工作职位&#xff1f; 2、你认为项目测试经理的工作职责和…

简单个人网页设计作业 静态HTML个人博客主页 DW个人网站模板下载 大学生简单个人网页作品代码 个人网页制作 学生个人网页设计作业

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

【印刷字符识别】OCR键盘数字+字母识别【含Matlab源码 807期】

⛄一、OCR简介 1 什么是OCR技术&#xff1f; OCR英文全称是Optical Character Recognition&#xff0c;中文叫做光学字符识别。它是利用光学技术和计算机技术把印在或写在纸上的文字读取出来&#xff0c;并转换成一种计算机能够接受、人又可以理解的格式。文字识别是计算机视觉…