(文章复现)低温环境下考虑电池寿命的微电网优化调度

2024-06-09 18:52

本文主要是介绍(文章复现)低温环境下考虑电池寿命的微电网优化调度,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考文献:

[1]丁佳昀,胡秦然,吴在军,等.低温环境下考虑电池寿命的微电网优化调度[J].中国电机工程学报,2024,44(10):3815-3824.

1.摘要

        储能系统作为微电网重要组成部分,为微电网协调能量供需提供了解决方案。然而,在低温环境下,储能系统中电池寿命的快速衰减严重影响了系统的经济性和安全性。因此,该文提出一种低温环境下考虑电池寿命的微电网优化调度混合整数模型,来仿真微电网优化调度过程和高效计算储能充放电计划。首先,基于阿伦尼乌斯方程,分析低温环境中电池寿命的受影响机理;接着,采用考虑充放电次数和放电深度的电池寿命方程,构建电池全温度范围的老化模型;最后,构建考虑电池自发热和全温度范围的寿命衰减模型,并通过可行域凸极点组合方法对模型进行转化和简化,来避免模型中非线性项目导致无法获得全局最优解的困境。算例验证和对比分析表明,该文提出的模型能在低温环境中降低系统运行成本,减缓电池衰减速率,延长近一倍的电池寿命。

2.原理介绍

2.1低温下考虑电池寿命的电池成本模型

        在低温环境中,一方面电池的充电效率较低,大量电能消耗于电池的副反应中;另一方面电池寿命损耗较大,加速了电池的更换周期。类似于发电单元,可以将电池的运行成本分为日燃料成本和日运维成本:

        电池的日燃料成本与电池的充电效率和实时电价有关,可考虑为电池充电时损耗的电能成本,即:

        电池的日运维成本主要由电池的损耗引起,与电池的寿命有直接关联,可通过贴现率实现二者的转化:

        由于在放电深度和温度一定时,运维成本和循环次数近似呈线性关系,因此对运维成本作如下分段线性化处理:

2.2目标函数

        通常微电网调度以系统总日运行成本最低作为优化目标,即:

2.3 约束条件

2.4 线性化处理

        由于考虑到电池自热的影响,电池表面温度实则为与 Pbat 相关的函数,式(24)为非线性约束,为提高求解效率和准确性,可利用可行域凸极点线性组合的方法将非凸问题近似转换为凸问题,以便获得全局最优解。

        电池充电和放电时的可行区域均可用一个凸区域表示,分别如图 3、4 所示。

        可行区域的形状和大小由每时刻电网侧的输入输出功率与电池侧的充放电功率及电池充放电效率的函数投影决定,可行域内每个运行点对应的电网侧输入输出功率均可表示为该点电池侧的充放电功率和充放电效率的函数。由于凸可行域内任一点的横纵坐标都可由该区域凸极点的横纵坐标线性组合表示,且线性系数和为 1,可近似将可行域内任一点的 Pin或 Pout也用凸极点的 Pin或 Pout线性组合表示。

优化目标:

        式(6)、(7)、(9)、(10)、(14)

约束条件:

        式(11)—(13)、(15)—(23) 式(25)—(27)、(30)—(39)

        使用MATLAB R2021b中的yalmip工具箱调用gurobi 9.1.2 求解器求解。

3.编程思路

3.1参数和变量定义

4.代码运行结果

5.matlab代码

%% 清除内存空间
clc
clear
close all
warning off%% 系统参数
data = xlsread('data.xlsx');                % 相关数据
cbuy = data(:,2);                           % 购电电价
csell = data(:,3);                          % 售电电价
cwind = 0.52;                               % 风电运行成本
cpv = 0.72;                                 % 光伏运行成本
Ta = data(:,4:6);                           % 环境温度
Pwind = data(:,7:9);                        % 风电出力
Ppv = data(:,10:12);                        % 光伏出力
Pload = data(:,13:15);                      % 负荷需求
Pbat_max = 40;                              % 电池充放电功率上限
Smax = 300;                                 % 储能额定容量
SOC_min = 0.3;                              % 荷电状态下限
SOC_max = 0.95;                             % 荷电状态上限
SOC0 = 0.4;                                 % 初始荷电状态
[ncha,ndis] = cal_efficiency(Ta);           % 充放电效率
Pnet_max = 160;                             % 交互功率上限
r = 0.07;                                   % 贴现率
C1kwh = 0.02;                               % 电池的度电运维成本
NT = 24;                                    % 时段数
NS = 3;                                     % 典型场景数
D = 4;                                      % 分段数
dt = 1;                                     % 时段间隔
a_Ta = 0.05;                                % 自发热比例因子
Zth = 0.1;                                  % 电池热阻
dDOD1_min = [0.05,0.2,0.4,0.6];             % 第d段放电深度的下限
dDOD1_max = [0.2,0.4,0.6,0.7];              % 第d段放电深度的上限%% 优化变量
gd = binvar(NT + 1,NS,D);                   % 0-1变量,放电深度处于第d分段时为1,否则为0
Pbat = sdpvar(NT,NS);                       % 储能输出功率
Pcha = sdpvar(NT,NS);                       % 储能充电功率
Pdis = sdpvar(NT,NS);                       % 储能放电功率
Qcha = binvar(NT,NS);                       % 储能充电状态变量
Qdis = binvar(NT,NS);                       % 储能放电状态变量
Qstadic = binvar(NT,NS);                    % 储能静置状态变量
Ssoc = sdpvar(NT + 1,NS);                   % 储能SOC
Sbat = binvar(NT,NS);                       % 储能荷电状态改变标志
Pbuy = sdpvar(NT,NS);                       % 微电网购电功率
Psell = sdpvar(NT,NS);                      % 微电网售电功率
Pnet = sdpvar(NT,NS);                       % 交互功率
Qnet = binvar(NT,NS);                       % 购售电状态变量
dDOD = sdpvar(NT + 1,NS);                   % 储能放电深度
dDOD1 = sdpvar(NT + 1,NS,D);                % 储能放电深度分段
Tb = sdpvar(NT,NS);                         % 电池温度
n_cycle = sdpvar(1,NS);                     % 充放电循环数
U_Sbat = binvar(NT,NS,5);%% 约束条件
Constraints = [];%% 目标函数
C_COE = cbuy'*((1./ncha - 1).*Pcha);
LT = -0.0623*mean(Tb) + 2.56;
ad = [0.01,0.115,0.23,0.45];
kd = [1.23,3.77,6.28,15.43];
C_OM = sdpvar(NT,NS);
Ugd = sdpvar(NT,NS,D);
for t = 1:NTfor s = 1:NSC_OM(t,s) = 0;for d = 1:DConstraints = [Constraints, Ugd(t,s,d) >= 0 , Ugd(t,s,d) <= 10000*gd(t,s,d) , Ugd(t,s,d) <= n_cycle(s)*ad(d) + kd(d) , Ugd(t,s,d) >= n_cycle(s)*ad(d) + kd(d) - 10000*(1 - gd(t,s,d))];C_OM(t,s) = C_OM(t,s) + Ugd(t,s,d)*LT(s);endend
endC_buy = cbuy'*Pbuy;
C_sell = csell'*Psell;
C_wind = cwind*sum(Pwind);
C_pv = cwind*sum(Ppv);
objective = C_COE + max(C_OM) + C_buy + C_sell + C_wind + C_pv;
Ps = [0.5;0.25;0.25];%% 设求解器
% gurobi求解器
ops = sdpsettings('verbose', 3, 'solver', 'gurobi','showprogress',1);
ops.gurobi.TimeLimit = 600;                 % 运行时间限制为10min
ops.gurobi.MIPGap = 0.01;                   % 收敛精度限制为0.01% cplex求解器
% ops = sdpsettings('verbose', 3, 'solver', 'cplex','showprogress',1,'debug',1);
% ops.cplex.timelimit = 600;                  % 运行时间限制为10min
% ops.cplex.mip.tolerances.mipgap = 0.01;     % 收敛精度限制为0.01% mosek求解器
% ops=sdpsettings('verbose', 3, 'solver', 'MOSEK','cachesolvers',1);
% ops.mosek.MSK_DPAR_OPTIMIZER_MAX_TIME=600;% 运行时间限制为10min
% ops.mosek.MSK_DPAR_MIO_TOL_REL_GAP=0.01;  % 收敛精度限制为0.01
sol = optimize(Constraints, objective*Ps, ops);%% 分析错误标志
if sol.problem == 0disp('求解成功');
elsedisp('运行出错');yalmiperror(sol.problem)
end%% 运行结果
show_result;

        以上为部分代码,完整代码获取方式如下:

(文章复现)低温环境下考虑电池寿命的微电网优化调度matlab代码资源-CSDN文库

这篇关于(文章复现)低温环境下考虑电池寿命的微电网优化调度的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1046016

相关文章

MySQL索引的优化之LIKE模糊查询功能实现

《MySQL索引的优化之LIKE模糊查询功能实现》:本文主要介绍MySQL索引的优化之LIKE模糊查询功能实现,本文通过示例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一、前缀匹配优化二、后缀匹配优化三、中间匹配优化四、覆盖索引优化五、减少查询范围六、避免通配符开头七、使用外部搜索引擎八、分

Linux之计划任务和调度命令at/cron详解

《Linux之计划任务和调度命令at/cron详解》:本文主要介绍Linux之计划任务和调度命令at/cron的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux计划任务和调度命令at/cron一、计划任务二、命令{at}介绍三、命令语法及功能 :at

Python如何自动生成环境依赖包requirements

《Python如何自动生成环境依赖包requirements》:本文主要介绍Python如何自动生成环境依赖包requirements问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录生成当前 python 环境 安装的所有依赖包1、命令2、常见问题只生成当前 项目 的所有依赖包1、

Redis在windows环境下如何启动

《Redis在windows环境下如何启动》:本文主要介绍Redis在windows环境下如何启动的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Redis在Windows环境下启动1.在redis的安装目录下2.输入·redis-server.exe

Pytest多环境切换的常见方法介绍

《Pytest多环境切换的常见方法介绍》Pytest作为自动化测试的主力框架,如何实现本地、测试、预发、生产环境的灵活切换,本文总结了通过pytest框架实现自由环境切换的几种方法,大家可以根据需要进... 目录1.pytest-base-url2.hooks函数3.yml和fixture结论你是否也遇到过

浅谈配置MMCV环境,解决报错,版本不匹配问题

《浅谈配置MMCV环境,解决报错,版本不匹配问题》:本文主要介绍浅谈配置MMCV环境,解决报错,版本不匹配问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录配置MMCV环境,解决报错,版本不匹配错误示例正确示例总结配置MMCV环境,解决报错,版本不匹配在col

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

SpringBoot首笔交易慢问题排查与优化方案

《SpringBoot首笔交易慢问题排查与优化方案》在我们的微服务项目中,遇到这样的问题:应用启动后,第一笔交易响应耗时高达4、5秒,而后续请求均能在毫秒级完成,这不仅触发监控告警,也极大影响了用户体... 目录问题背景排查步骤1. 日志分析2. 性能工具定位优化方案:提前预热各种资源1. Flowable

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N