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

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

相关文章

springboot的调度服务与异步服务使用详解

《springboot的调度服务与异步服务使用详解》本文主要介绍了Java的ScheduledExecutorService接口和SpringBoot中如何使用调度线程池,包括核心参数、创建方式、自定... 目录1.调度服务1.1.JDK之ScheduledExecutorService1.2.spring

Deepseek使用指南与提问优化策略方式

《Deepseek使用指南与提问优化策略方式》本文介绍了DeepSeek语义搜索引擎的核心功能、集成方法及优化提问策略,通过自然语言处理和机器学习提供精准搜索结果,适用于智能客服、知识库检索等领域... 目录序言1. DeepSeek 概述2. DeepSeek 的集成与使用2.1 DeepSeek API

Tomcat高效部署与性能优化方式

《Tomcat高效部署与性能优化方式》本文介绍了如何高效部署Tomcat并进行性能优化,以确保Web应用的稳定运行和高效响应,高效部署包括环境准备、安装Tomcat、配置Tomcat、部署应用和启动T... 目录Tomcat高效部署与性能优化一、引言二、Tomcat高效部署三、Tomcat性能优化总结Tom

在Mysql环境下对数据进行增删改查的操作方法

《在Mysql环境下对数据进行增删改查的操作方法》本文介绍了在MySQL环境下对数据进行增删改查的基本操作,包括插入数据、修改数据、删除数据、数据查询(基本查询、连接查询、聚合函数查询、子查询)等,并... 目录一、插入数据:二、修改数据:三、删除数据:1、delete from 表名;2、truncate

解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)

《解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)》该文章介绍了使用Redis的阻塞队列和Stream流的消息队列来优化秒杀系统的方案,通过将秒杀流程拆分为两条流水线,使用Redi... 目录Redis秒杀优化方案(阻塞队列+Stream流的消息队列)什么是消息队列?消费者组的工作方式每

深入理解Apache Airflow 调度器(最新推荐)

《深入理解ApacheAirflow调度器(最新推荐)》ApacheAirflow调度器是数据管道管理系统的关键组件,负责编排dag中任务的执行,通过理解调度器的角色和工作方式,正确配置调度器,并... 目录什么是Airflow 调度器?Airflow 调度器工作机制配置Airflow调度器调优及优化建议最

VScode连接远程Linux服务器环境配置图文教程

《VScode连接远程Linux服务器环境配置图文教程》:本文主要介绍如何安装和配置VSCode,包括安装步骤、环境配置(如汉化包、远程SSH连接)、语言包安装(如C/C++插件)等,文中给出了详... 目录一、安装vscode二、环境配置1.中文汉化包2.安装remote-ssh,用于远程连接2.1安装2

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J