计及调频成本和荷电状态恢复的多储能系统调频功率双层优化【蓄电池经济最优目标下充放电】(基于matlab+yalmip+cplex的蓄电池出力优化)

news2024/11/25 2:26:54

摘要:针对电网中不同类型储能电站调频成本、剩余调频
能力存在差异、储能电站内部储能单元 SOC 过高或过低
的问题,提出计及调频成本和 SOC 恢复的多储能系统调
频功率双层优化策略,该策略包含调频功率优化层和
SOC 优化层:在调频功率优化层引入与储能电站剩余调
频能力相关的抗拒系数,与调频成本共同构成目标函数,
根据不同类型储能电站的调频成本和剩余调频能力实现
调频功率优化分配;在 SOC 优化层引入 SOC 权重以恢复
储能单元 SOC 为目标对调频功率优化结果进行再分配。
采用包含三种不同电池类型的区域电网验证所提分配策
略的有效性,结果表明:与 3 种对比策略相比,所提策略
不仅具有较好的经济性,还能恢复各储能单元的 SOC,
显著提高了调频效果。

目标函数经济成本最小如下:
目标函数
目标函数参数:
目标函数参数
蓄电池参数:
  蓄电池参数
蓄电池soc初始值:
soc初值
四种策略方案:
策略
对策略二基于matlab+yalmip+cplex的蓄电池出力优化复现:
蓄电池经济最优目标下充放电
程序如下:

// matlab+yalmip+cplex的蓄电池出力优化
%% 策略二,按经济最优充放电
clc
clear
close all
[agc]=xlsread('agcdata','Sheet1','c2:c181');%agc参数
canshu;
X = sdpvar(8,180);         %电站1
Y = sdpvar(8,180);         %电站2
Z = sdpvar(8,180);         %电站3

%% 约束矩阵
constraint=[];
% objective = 0;

%% 功率平衡约束

    for j=1:180
        if agc(j)>=0
        constraint=[constraint,agc(j) == sum(X(:,j))*e1 + sum(Y(:,j))*e2 + sum(Z(:,j))*e3 ];
        else
        constraint=[constraint,agc(j) == sum(X(:,j))/e1 + sum(Y(:,j))/e2 + sum(Z(:,j))/e3 ];
        end
    end

 %% 储能约束
 for i=1:180
     % 第一单元
     constraint=[constraint,S1*soc_min1 <= S1*soc(1,1) - sum(X(1,1:i)) <= S1*soc_max1];
     constraint=[constraint,S1*soc_min1 <= S1*soc(1,2) - sum(X(2,1:i)) <= S1*soc_max1];
     constraint=[constraint,S1*soc_min1 <= S1*soc(1,3) - sum(X(3,1:i)) <= S1*soc_max1];
     constraint=[constraint,S1*soc_min1 <= S1*soc(1,4) - sum(X(4,1:i)) <= S1*soc_max1];
     constraint=[constraint,S1*soc_min1 <= S1*soc(1,5) - sum(X(5,1:i)) <= S1*soc_max1];
     constraint=[constraint,S1*soc_min1 <= S1*soc(1,6) - sum(X(6,1:i)) <= S1*soc_max1];
     constraint=[constraint,S1*soc_min1 <= S1*soc(1,7) - sum(X(7,1:i)) <= S1*soc_max1];
     constraint=[constraint,S1*soc_min1 <= S1*soc(1,8) - sum(X(8,1:i)) <= S1*soc_max1];
     
     % 第二单元
     constraint=[constraint,S2*soc_min2 <= S2*soc(2,1) - sum(Y(1,1:i)) <= S2*soc_max2];
      constraint=[constraint,S2*soc_min2 <= S2*soc(2,2) - sum(Y(2,1:i)) <= S2*soc_max2];
      constraint=[constraint,S2*soc_min2 <= S2*soc(2,3) - sum(Y(3,1:i)) <= S2*soc_max2];
     constraint=[constraint,S2*soc_min2 <= S2*soc(2,4) - sum(Y(4,1:i)) <= S2*soc_max2]; 
      constraint=[constraint,S2*soc_min2 <= S2*soc(2,5) - sum(Y(5,1:i)) <= S2*soc_max2];
      constraint=[constraint,S2*soc_min2 <= S2*soc(2,6) - sum(Y(6,1:i)) <= S2*soc_max2];
      constraint=[constraint,S2*soc_min2 <= S2*soc(2,7) - sum(Y(7,1:i)) <= S2*soc_max2];
      constraint=[constraint,S2*soc_min2 <= S2*soc(2,8) - sum(Y(8,1:i)) <= S2*soc_max2];
      
      % 第三单元
     constraint=[constraint,S3*soc_min3 <= S3*soc(3,1) - sum(Z(1,1:i)) <= S3*soc_max3];
     constraint=[constraint,S3*soc_min3 <= S3*soc(3,2) - sum(Z(2,1:i)) <= S3*soc_max3];
     constraint=[constraint,S3*soc_min3 <= S3*soc(3,3) - sum(Z(3,1:i)) <= S3*soc_max3];
     constraint=[constraint,S3*soc_min3 <= S3*soc(3,4) - sum(Z(4,1:i)) <= S3*soc_max3];
     constraint=[constraint,S3*soc_min3 <= S3*soc(3,5) - sum(Z(5,1:i)) <= S3*soc_max3];
     constraint=[constraint,S3*soc_min3 <= S3*soc(3,6) - sum(Z(6,1:i)) <= S3*soc_max3];
     constraint=[constraint,S3*soc_min3 <= S3*soc(3,7) - sum(Z(7,1:i)) <= S3*soc_max3];
     constraint=[constraint,S3*soc_min3 <= S3*soc(3,8) - sum(Z(8,1:i)) <= S3*soc_max3];
     
 end
  



%% 成本计算
% 投资成本
inv_cost1=(cost_s1*S1*0.08*1.08.^long1)/(365*1440*((1.08.^long1)-1))  ;
inv_cost2= (cost_s2*S2*0.08*1.08.^long2)/(365*1440*((1.08.^long2)-1)) ;
inv_cost3= (cost_s3*S3*0.08*1.08.^long3)/(365*1440*((1.08.^long3)-1))   ;
obj1=inv_cost1+inv_cost2+inv_cost3;

% 损耗成本
loss_cost=520;
obj2_1=0;
obj2_2=0;
obj2_3=0;
% for i=1:180
%      if agc(i)>=0         
%        obj2_1(i)=loss_cost*(1/e1 - 1)*sum(X(1:8,i))  ;%*REF_1(i)
%        obj2_2(i)=loss_cost*(1/e2 - 1)*sum(Y(1:8,i))  ;
%        obj2_3(i)=loss_cost*(1/e3 - 1)*sum(Z(1:8,i))  ;
%      else
%        obj2_1(i)=loss_cost*(1-e1)*sum(X(1:8,i))  ;%*REF_1(i)
%        obj2_2(i)=loss_cost*(1-e2)*sum(Y(1:8,i))  ;
%        obj2_3(i)=loss_cost*(1-e3)*sum(Z(1:8,i))  ;
%      end
% end

for i=1:180
    for n=1:8
       if agc(i)>=0         
       obj2_1=obj2_1+loss_cost*(1/e1 - 1)*X(n,i)  ;%*REF_1(i)
       obj2_2=obj2_2+loss_cost*(1/e2 - 1)*Y(n,i)  ;
       obj2_3=obj2_3+loss_cost*(1/e3 - 1)*Z(n,i)  ;
       else
       obj2_1=obj2_1+loss_cost*(1-e1)*X(n,i)  ;%*REF_1(i)
       obj2_2=obj2_2+loss_cost*(1-e2)*Y(n,i)  ;
       obj2_3=obj2_3+loss_cost*(1-e3)*Z(n,i)  ;
       end
     end
end
obj2=obj2_1 + obj2_2 + obj2_3;

% 折损成本

life_cost1 = 0.5*cost_p1*S1/times1 ;
life_cost2 = 0.5*cost_p2*S2/times2;
life_cost3 = 0.5*cost_p3*S3/times3 ;
obj3_1=0;
obj3_2=0;
obj3_3=0;
for i=1:180
    for n=1:8
     if agc(i)>=0
        obj3_1=obj3_1+life_cost1*(X(n,i))/(S1*e1*3600) ;
        obj3_2=obj3_2+life_cost2*(Y(n,i))/(S2*e2*3600) ;
        obj3_3=obj3_3+life_cost3*(Z(n,i))/(S1*e3*3600) ;
       else
        obj3_1=obj3_1+life_cost1*(X(n,i))*e1/(S1*3600);
        obj3_2=obj3_2+life_cost1*(X(n,i))*e2/(S1*3600);
        obj3_3=obj3_3+life_cost1*(X(n,i))*e3/(S1*3600);
     end
    end
end
obj3=obj3_1+obj3_2+obj3_3;
% obj4=obj3_1*(REF_1);
%% 目标函数
      objective=obj1+obj2 +obj3;
% objective=sum(objective_);

 %% 求解
ops=sdpsettings('verbose', 1, 'solver', 'cplex');
sol=optimize(constraint,objective,ops);
objective=value(objective)
%% 输出
figure
plot(agc)
X=value(X);
Y= value(Y);
Z=value(Z);
P=zeros(1,180);
for i=1:180
    for n=1:8
        P(i)=P(i)+X(n,i)+Y(n,i)+Z(n,i);
    end
end
hold on
plot(P)

运行结果如下:
电平衡结果图

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

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

相关文章

覆盖libc.so.6的惨痛教训

覆盖libc.so.6的惨痛教训背景问题原因解决1、当前session未断开2、OS崩溃重启&#xff0c;所有ssh session断开惨痛教训1、对于上产环境的内核依赖库文件不能随意覆盖、删除。2、 scp 文件覆盖问题总结参考背景 发生时间: 2022年11月28日08:55:20 偷了个懒&#xff0c;在安装t…

Allegro走线自动关闭其它飞线操作指导

Allegro走线自动关闭其它飞线操作指导 Allegro在走线时候有一个自动关闭其它网络飞线的功能,具体操作如下 点击add connect命令 在option里面选择Auto-blank other rats 未勾选的状态 勾选后的状态,其它网络的飞线都被关闭了 This section is describe what the functio…

楼盘vr虚拟样板间,为售楼中心带来财气

房企也进入业绩冲刺期。为了完成销售目标&#xff0c;扩大市场销售面积&#xff0c;各大房企必将加大楼盘推出&#xff0c;降价冲销量已成常态。虚拟样板间采用创意化的营销策略&#xff0c;在激烈的竞争中脱颖而出。 所谓的VR虚拟样板间就是&#xff0c;利用数字化技术把建成或…

使用AWS的API Gateway实现websocket

问题 最近业务上面需要使用到WebSocket长连接来解决某些业务场景。 一图胜千言 注意&#xff1a;这里承担WebSocket服务器的是AWS API Gateway&#xff1b;后面的EC2业务服务&#xff0c;其实都是REST接口服务。 这里主要关注API Gateway和REST业务服务怎么实现API Gateway要…

Mysql事务机制

目录 一&#xff1a;定义 二&#xff1a;事务的特质 三&#xff1a;检测ACID特性 1. 准备工作. 2. 测试原子性和持久性 case1&#xff1a; 模拟原子性的全部失败 case2&#xff1a;模拟原子性的全部成功 case3&#xff1a;检查 持久性。 3. 测试一致性 case1&#xff…

[附源码]计算机毕业设计springboot餐馆点餐管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

马尔可夫链

目录 1.相关概念 2.马尔可夫链的状态概率分布推演及稳态分布 3.马尔可夫链的应用 4.稳态分布性质 1.相关概念 小明同学每日选择早餐的概率转化如下图所示&#xff1a; 并且当日的选择只受前一日的结果以及对应的转移概率影响&#xff0c;与之前的选择无关。———> …

Spring Cloud Alibaba 容器化部署最佳实践 | 本地部署版本 | Seata服务端组件安装

Seata 是一款开源的分布式事务解决方案&#xff0c;致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式&#xff0c;为用户打造一站式的分布式解决方案。 下载地址 https://github.com/seata/seata/releases Seata安装-修改配…

PyQt5 信号(Signal)与槽(Slot)

PyQt5 信号与槽信号与槽介绍内置信号与槽的使用自定义信号与槽的使用自定义信号和内置槽函数自定义信号和自定义槽函数自定义有参信号使用自定义信号参数装饰器信号与槽信号与槽的断开和连接多线程中信号与槽的使用信号与槽介绍 信号(Signal)与槽(Slot)是Qt中的核心机制&#…

基于Spring Boot的个人博客系统(源码+数据库)

目录 一、系统功能框架图 二、开发技术 三、开发环境 四、页面展示 1.登录页面 2.首页 3.文章详情页面 4.文章评论页面 ​5.后台页面 6.后台文件编辑页面 ​7.后台文章管理列表页面 五、文件组织结构 六、数据库设计 1. 文章详情表t_article 2.文章评论表t_comm…

Elasticsearch:构建地图以按国家或地区比较指标

标如果你不熟悉 Elastic 地图&#xff0c;本教程是一个不错的起点。 它会指导你完成处理位置数据的常见步骤。在完成本教程后&#xff0c;你将学会: 创建具有多个图层和数据源的地图使用符号、颜色和标签来设置数据值的样式在仪表板中嵌入地图在仪表板中跨仪表盘搜索 完成本教…

【Scala专栏】数据类型、变量常量、类和对象

本文内容主要分为3节&#xff0c;依次讲解&#xff1a;Scala的数据类型有哪些&#xff1f; 变量常量如何使用&#xff1f; 类和对象如何理解&#xff1f; 受限于博主的大脑容量&#xff0c;大概是无法做到事无巨细的&#xff0c;不过其实也没必要那么"细"&#xff0c…

Java核心技术卷Ⅰ-第三章Java的基本程序设计结构

重点 1.数据类型 2.运算符 3.字符串 4.控制流程 5.数组 1.数据类型 整型&#xff1a;Java程序必须保证在所有机器上都能得到相同的运行结果&#xff0c;所以各种数据类型的取值范围是固定的&#xff1b;在C/C中&#xff0c;int和long类型的大小与目标平台相关 类型存储需求取值…

基于粒子群算法的线性规划问题求解matlab程序

基于粒子群算法的线性规划问题求解matlab程序 1 基本粒子群算法流程 粒子群算法基于“种群”和“进化”的概念&#xff0c;通过个体间的协作与竞争&#xff0c;实现复杂空间最优解的搜索&#xff0c;其流程如下&#xff1a; &#xff08;1&#xff09;初始化粒子群&#xff…

Apache Maven

Apache Maven简介安装Eclipse中安装内置的Maven插件Maven官网下载&#xff0c;直接安装在电脑上Maven安装目录结构bin目录boot目录conf目录lib目录Maven生命周期与命令Maven生命周期clean&#xff1a;清理cleanup&#xff1a;清理所有default&#xff1a;默认site&#xff1a;站…

做数据集增强时,训练一半出现IndexError: tuple index out of range这种错误,不知道怎么改,有神仙赐教一下嘛?

在用YOLOv5做图像训练时&#xff0c;首先做了数据集的增强&#xff0c;但是增强中出现了如下的错误 首先出现这样的警告 (A:/stdy py37-g/agu_img.py:153: DeprecationWarning: An exception was ignored while fetching the attribute __array_interface__ from an object of …

maven部署方案之分离业务包

一、思想&#xff1a; 通过将业务包和公共包分离&#xff0c;集中管理所有包&#xff0c;打包时只构建业务包减少项目包的大小和传输时间。 为了观测稳定性&#xff0c;暂通过环境区分&#xff0c;较为频繁的联调环境采用该方式&#xff0c;测试、预发、正式暂保持一体化打包…

golang实现andflow流程引擎

1、andflow引擎 andflow_js可以实现在Html端设计流程&#xff0c;并将设计结果保存为json模型&#xff0c;andflow可以用于设计业务流程、数据处理流程、工作流、控制流等一切可流程化的过程。 由于golang具备高效、跨平台、并且还能够直接编译成可执行文件&#xff0c;这些优…

selenium 找不到元素:Unable to find element on closed window

浏览器&#xff1a;IE 报错信息&#xff1a; Unable to find element on closed window Unable to get browser 过程&#xff1a;登录》跳转页面&#xff08;同窗口&#xff09;》点击备份按钮 已知代码没有改过&#xff0c;而且部署到多个机子上&#xff0c;很多机子没有问…

C++11(一)

&#x1f9f8;&#x1f9f8;&#x1f9f8;各位大佬大家好&#xff0c;我是猪皮兄弟&#x1f9f8;&#x1f9f8;&#x1f9f8; 文章目录一、列表初始化initializer_list二、声明1.auto2.decltype3.nullptr三、C11 STL中的变化1.array2.forward_list3.STL其他变化四、C关键字新功…