基于共享储能电站的工业用户日前优化经济调度【复现】

发布时间:2024年01月09日

文章提出一种基于共享储能电站的工业用户日前优化经济调度方法。首先提出共享储能电站的概念,分析其 商业运营模式。然后将共享储能电站应用到工业用户经济优化调度中,通过协调各用户使用共享储能电站进行充电和 放电的功率,实现用户群日运行成本最优。最后以江苏省 3 个工业用户进行算例仿真,与用户不配置储能和用户独立 配置储能场景对比,得出引入共享储能电站可以显著降低用户群日运行成本,并对储能电站年服务费收益、静态投资回 收年限和投资回报率与共享储能电站服务费定价间的关系做进一步的研究。

部分代码

%论文复现——场景3部分
%基于共享储能电站的工业用户日前优化经济调度[J].电力建设


clc
clear
close all


%% 参数设置
P_grid=sdpvar(3,24); %用户从电网购买的电功率
P_ess_b=sdpvar(3,24); %用户使用共享储能电站放电的功率
P_ess_s=sdpvar(3,24); %用户使用共享储能电站充电的功率
U_ess_b=binvar(3,24); %用户使用共享储能的放电状态位,取1时为放电,0为未放电
U_ess_s=binvar(3,24); %用户使用共享储能的充电状态位,取1时为充电,0为未充电
E=sdpvar(1,24); %储能电站的荷电状态
P_abs=sdpvar(1,24); %储能电站的充电功率
P_relea=sdpvar(1,24); %储能电站的放电功率
E_init=sdpvar(1,1); %储能电站的初始容量
E_max=sdpvar(1,1); %储能电站的预配置容量
P_max=sdpvar(1,1); %储能电站的预配置最大充放电功率
U_abs=binvar(1,24); %储能电站的放电状态位,取1时为放电,0为未放电
U_relea=binvar(1,24); %储能电站的充电状态位,取1时为充电,0为未充电
%% 用户参数导入
gamma=[0.37*ones(1,8),1.36*ones(1,4),0.82*ones(1,5),1.36*ones(1,4),0.82*ones(1,3)]; %电网的"峰-平-谷"电价
delta=0.33*ones(1,24); %共享储能电站的服务费
P_load(1,:)=[80,75,75,75,75,75,75,75,95,155,160,180,160,165,150,165,160,175,160,130,140,100,90,85];
P_load(2,:)=[200,50,150,190,25,50,30,20,40,170,220,150,65,160,170,150,230,125,140,200,125,70,110,65];
P_load(3,:)=[105,100,95,100,100,105,110,110,120,110,115,120,135,110,120,125,130,125,115,130,120,120,115,120];
P_pv(1,:)=[0,0,0,0,0,0,0,0,75,275,540,675,750,750,330,170,75,10,0,0,0,0,0,0];
P_pv(2,:)=zeros(1,24);P_pv(3,:)=zeros(1,24);
P_wind(1,:)=zeros(1,24);
P_wind(2,:)=[150,150,175,165,140,130,120,90,50,55,80,100,135,135,130,110,60,50,50,70,90,120,140,120];
P_wind(3,:)=[130,145,155,135,120,125,115,95,40,30,50,85,110,115,110,70,35,40,40,50,80,80,115,95];
%% 约束条件

C2=sum(delta.*(P_ess_b(1,:)+P_ess_s(1,:)))+sum(delta.*(P_ess_b(2,:)+P_ess_s(2,:)))+sum(delta.*(P_ess_b(3,:)+P_ess_s(3,:))); %用户群向储能电站缴纳的服务费
F=C1+C2; %总目标函数
%% 模型求解
ops=sdpsettings('solver','cplex','verbose',2,'usex0',0);
ops.cplex.mip.tolerances.mipgap=1e-6;
result=optimize(C,F,ops);


if result.problem == 0 % problem =0 代表求解成功
else
? ? error('求解出错');
end
%% 数据导出及画图
E_max=value(E_max);P_max=value(P_max);
display(['最优储能电站容量规划值为 : ', num2str(E_max),' kWh']);
display(['最优储能电站充放电功率最大值为 : ', num2str(P_max),' kW']);
P_grid=value(P_grid);P_ess_b=value(P_ess_b);P_ess_s=value(P_ess_s);
E=value(E);P_abs=value(P_abs);P_relea=value(P_relea);
%用户A的电负荷平衡曲线
for t=1:24
? ? if P_grid(1,t)<0.01
? ? ? ? P_grid(1,t)=0; %由于Cplex求解精度,把极小的值设为0
? ? end
end
for t=1:24
? ? Plot_UserA(1,t)=P_grid(1,t);
? ? Plot_UserA(2,t)=P_ess_b(1,t);
? ? Plot_UserA(3,t)=-1*P_ess_s(1,t);
end
Plot_UserA=Plot_UserA';
figure
bar(Plot_UserA,'stacked');
hold on
plot(P_load(1,:),'k-o','LineWidth',1.5);
hold on
plot(P_pv(1,:),'b-o','LineWidth',1.5);
xlabel('时间/h');
ylabel('功率/kW');
title('用户A的电负荷平衡曲线');
legend('从电网购电功率','使用储能电站的放电功率','使用储能电站的充电功率','用户A电负荷','光伏出力');
legend('boxoff');
box off
%用户B的电负荷平衡曲线
for t=1:24
? ? if P_grid(2,t)<0.01
? ? ? ? P_grid(2,t)=0; %由于Cplex求解精度,把极小的值设为0
? ? end
end
for t=1:24
? ? Plot_UserB(1,t)=P_grid(2,t);
? ? Plot_UserB(2,t)=P_ess_b(2,t);
? ? Plot_UserB(3,t)=-1*P_ess_s(2,t);
end
Plot_UserB=Plot_UserB';
figure
bar(Plot_UserB,'stacked');
hold on
plot(P_load(2,:),'k-o','LineWidth',1.5);
hold on
plot(P_wind(2,:),'b-o','LineWidth',1.5);
xlabel('时间/h');
ylabel('功率/kW');
title('用户B的电负荷平衡曲线');
legend('从电网购电功率','使用储能电站的放电功率','使用储能电站的充电功率','用户B电负荷','风电出力)

完整代码

文章来源:https://blog.csdn.net/m0_74905716/article/details/135487539
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。