解析2024年电工杯A题:园区微电网风光储协调优化配置(完整代码分享)

引言

2024年电工杯数学建模竞赛的A题聚焦于园区微电网的风光储协调优化配置问题。这一问题旨在通过数学建模和优化算法,提高风光发电在园区总发电量中的占比,同时减少因风光发电与负荷不匹配导致的弃电问题。本文将介绍题目背景、解题思路,并提供代码获取方式。

题目背景

园区微电网由风电、光伏发电和主电网联合供电。为了提高风光发电的利用率,需要配置适当的风光发电装机容量。然而,由于风光发电与负荷的时序不匹配,可能会产生弃电现象。储能系统的配置可以有效缓解这一问题,但考虑到电化学储能的成本,需要在投资与收益之间找到平衡点。

解题思路

问题一:独立运营储能配置方案

  1. 未配置储能的经济性分析:首先,我们需要分析在没有储能系统的情况下,各园区的购电量、弃风弃光电量、总供电成本和单位电量平均供电成本。这一步骤的关键在于理解风光发电与负荷的时序不匹配对经济性的影响。

  2. 配置储能的优化策略:在配置了储能系统后,我们需要制定储能的最优运行策略和购电计划,以改善园区的经济性。

  3. 储能配置的优化:最后,我们需要评估50kW/100kWh的储能配置是否为最优解,并提出可能的改进方案。

  4. 问题一第一小问与第二小问代码(第二问代码以A园区为例):

```

%% 问题1-1
clear
clc
close all

%% 1.读取数据
data1 = xlsread('附件1:各园区典型日负荷数据.xlsx');
data2 = xlsread('附件2:各园区典型日风光发电数据.xlsx');

Pload = data1(:,2:4);                               % 各园区负荷数据
Ppv0 = [750,0,600];                                 % 各园区光伏装机容量
Pwt0 = [0,1000,500];                                % 各园区风电装机
Ppv = [data2(:,2),zeros(24,1),data2(:,4)].*Ppv0;    % 各园区光伏时序出力
Pwt = [zeros(24,1),data2(:,3),data2(:,5)].*Pwt0;    % 各园区风电时序出力
price_buy = 1;                                      % 主网购电价格为1元/kWh
price_pv = 0.4;                                     % 光伏购电价格为0.4元/kWh
price_wt = 0.5;                                     % 风电购电价格为0.5元/kWh

%% 2.经济性分析
Pdiff = Pload - (Ppv + Pwt);                        % 各园区的功率差额
P_buy = max(Pdiff, 0);                              % 各园区的电网购电量
pv_ab_c = Ppv(:,3) - Pload(:,3);
c_pv_ab = max(pv_ab_c, 0);                          % 园区C弃光量
c_wt_ab = max(Pwt(:,3) + pv_ab_c - c_pv_ab,0);      % 园区C弃风量
P_all_loss = - min(Pdiff, 0);
P_loss = [P_all_loss(:,1),P_all_loss(:,2),c_pv_ab,c_wt_ab];
                                                    % 各园区的弃风弃光
C_buy = sum(P_buy)*price_buy;                       % 各园区电网购电成本
C_pv = sum([Ppv(:,1)-P_loss(:,1),zeros(24,1),Ppv(:,3)-c_pv_ab])*price_pv;      
                                                    % 各园区光伏购电成本
C_wt = sum([zeros(24,1),Pwt(:,2)-P_loss(:,2),Pwt(:,3)-c_wt_ab])*price_wt; 
                                                    % 各园区风电购电成本
C_total = C_buy + C_pv + C_wt;                      % 各园区总供电成本
P_grossbuy = sum(Pload);                            % 各园区总购电量
dC = C_total./ P_grossbuy;                          % 各园区单位电量平均供电成本

%% 3.输出结果
disp(['A园区的总购电量为:',num2str(P_grossbuy(1)), 'kW,总弃光量为:',num2str(sum(P_loss(:,1))), 'kW,总供电成本为:',num2str(C_total(1)), '元,单位电量平均供电成本:',num2str(dC(1)), '元/kWh'])
disp(['B园区的总购电量为:',num2str(P_grossbuy(2)), 'kW,总弃风量为:',num2str(sum(P_loss(:,2))), 'kW,总供电成本为:',num2str(C_total(2)), '元,单位电量平均供电成本:',num2str(dC(2)), '元/kWh'])
disp(['C园区的总购电量为:',num2str(P_grossbuy(3)), 'kW,总弃光量为:',num2str(sum(P_loss(:,3))), 'kW,总弃风量为:',num2str(sum(P_loss(:,4))), 'kW,总供电成本为:',num2str(C_total(3)), '元,单位电量平均供电成本:',num2str(dC(3)), '元/kWh'])
 
%% 4.图形分析
figure
ax1 = subplot(2,1,1);
bar( [ Ppv(:,1)-P_loss(:,1) ],'stacked' )
xlabel('时间/h')
ylabel('功率/kW')
legend('光伏购电')
title('A园区功率平衡分析')  
subplot(2,1,2);
bar( [ P_buy(:,1) ],'stacked' )
xlabel('时间/h')
ylabel('功率/kW')
legend('电网购电')


figure
ax1 = subplot(2,1,1);
bar( [ Pwt(:,2)-P_loss(:,2) ],'stacked' )
xlabel('时间/h')
ylabel('功率/kW')
legend('风电购电')
title('B园区功率平衡分析')  
subplot(2,1,2);
bar( [ P_buy(:,2) ],'stacked' )
xlabel('时间/h')
ylabel('功率/kW')
legend('电网购电')


figure
ax1 = subplot(3,1,1);
bar( [ Ppv(:,3)-P_loss(:,3) ],'stacked' )
xlabel('时间/h')
ylabel('功率/kW')
legend('光伏购电')
title('C园区功率平衡分析')  
subplot(3,1,2);
bar( [ Pwt(:,3)-P_loss(:,4) ],'stacked' )
xlabel('时间/h')
ylabel('功率/kW')
legend('风电购电')

subplot(3,1,3);
bar( [ P_buy(:,3) ],'stacked' )
xlabel('时间/h')
ylabel('功率/kW')
legend('电网购电')

%% 问题1-2
clear
clc
close all 
% 1.读取数据
data1 = xlsread('D:\研究生\研一\研一文件\电工建模竞赛\附件1:各园区典型日负荷数据.xlsx');
data2 = xlsread('D:\研究生\研一\研一文件\电工建模竞赛\附件2:各园区典型日风光发电数据.xlsx');

Pload = data1(:,2:4);                                  % 各园区负荷数据
Psolar0 = [750,0,600];                                 % 各园区光伏装机容量
Pwind0 = [0,1000,500];                                 % 各园区风电装机容量
Psolar = [data2(:,2),zeros(24,1),data2(:,4)].*Psolar0; % 各园区光伏时序出力
Pwind = [zeros(24,1),data2(:,3),data2(:,5)].*Pwind0;   % 各园区风电时序出力
price_grid = 1;                                        % 主网购电价格为1元/kWh
price_solar = 0.4;                                     % 光伏购电价格为0.4元/kWh
price_wind = 0.5;                                      % 风电购电价格为0.5元/kWh

T = 24;                % 时间步数
n = 3;                 % 园区数量
eta_charge = 0.95;     % 储能充电效率
eta_discharge = 0.95;  % 储能放电效率
SOC_min = 0.1;         % 储能最小允许状态
SOC_max = 0.9;         % 储能最大允许状态
P_batt_max = 50;       % 储能最大充放电功率 (kW)
E_batt_max = 100;      % 储能容量(kWh)
C_batt_power = 800;    % 储能功率单价 (元/kW)
C_batt_energy = 1800;  % 储能能量单价 (元/kWh)
%% 园区A
%决策变量
Pgrid_A = sdpvar(24,1);          %电网购电功率
Psolar_A = sdpvar(24,1);         %光伏购电功率
Pcharge_A = sdpvar(24,1);        %储能充电功率
Pdischarge_A = sdpvar(24,1);     %储能放电功率
Ebatt_A = sdpvar(25,1);          %储能能量存储
charge_status = binvar(24,1);    %充电状态二进制变量
discharge_status = binvar(24,1); %放电状态二进制变量

%目标函数:最小化总成本
C_grid_A = sum(Pgrid_A) * price_grid;     %电网购电总成本
C_solar_A = sum(Psolar_A) * price_solar;  %光伏购电总成本
C_total_A = C_grid_A + C_solar_A + ( 50*800+100*1800 ) / 365 / 10;
                                          %园区总购电成本

%约束条件
con = [];
con = [con, Pgrid_A + Psolar_A + Pdischarge_A == Pcharge_A + Pload(:,1)]; 
                                              %功率平衡
con = [con, 0 <= Pgrid_A];                    %电网购电量非负
con = [con, 0 <= Psolar_A <= Psolar(:,1)];    %光伏购电量非负且不超过光伏出力
con = [con, 0 <= Pcharge_A <= P_batt_max];    %储能充电功率限制
con = [con, 0 <= Pdischarge_A <= P_batt_max]; %储能放电功率限制

con = [con, SOC_min*E_batt_max <= Ebatt_A <= SOC_max*E_batt_max]; 
                                              %储能容量限制
                                              
con = [con, Ebatt_A(1) == 0.5*E_batt_max];    %储能第一时段容量
con = [con, Ebatt_A(25) == 0.5*E_batt_max];   %储能下一天第一时段容量

for i = 1:T
    con = [con, Ebatt_A(i+1) == Ebatt_A(i) + (Pcharge_A(i) * eta_charge - Pdischarge_A(i) / eta_discharge) ];
end
con = [con, 0 <= Pcharge_A <= P_batt_max .* charge_status];       % 充电功率与充电状态关联
con = [con, 0 <= Pdischarge_A <= P_batt_max .* discharge_status]; % 放电功率与放电状态关联
con = [con, 0 <= charge_status + discharge_status <= 1];          % 充电和放电不能同时进行
% 3.求解优化问题
options = sdpsettings('solver', 'cplex');
sol = optimize(con, C_total_A, options);
% 4.结果分析
if sol.problem == 0
    % 成功求解
    Pgrid_A = value(Pgrid_A);
    Psolar_A = value(Psolar_A);
    Pcharge_A = value(Pcharge_A);
    Pdischarge_A = value(Pdischarge_A);
    Ebatt_A = value(Ebatt_A);
else
    disp('无法求解');
end
% 5.图形分析
figure
ax1 = subplot(3,1,1);
bar( [ Psolar_A ],'stacked' )
xlabel('时间/h')
ylabel('功率/kW')
legend('光伏购电')
title('A园区功率平衡分析')  
subplot(3,1,2);
bar( [ Pgrid_A ],'stacked' )
xlabel('时间/h')
ylabel('功率/kW')
legend('电网购电')

subplot(3,1,3);
bar( [ Pdischarge_A-Pcharge_A ],'stacked' )
xlabel('时间/h')
ylabel('功率/kW')
legend('储能充放电')

% 6.经济性分析
P_solarloss_A = sum(Psolar(:,1)) - sum(Psolar_A);                       %弃光电量
Pgrid__A = sum(Pgrid_A);                                              %电网购电量
Psolar__A = sum(Psolar_A);                                            %光伏购电量
P_gross_A = Pgrid__A + Psolar__A;                                     %总购电量
C_total_A = Pgrid__A * price_grid + Psolar__A * price_solar;          %总供电成本
dC_A = C_total_A./ P_gross_A;                                         %单位电量平均供电成本

```

问题二:联合园区储能配置方案

  1. 联合运营的经济性分析:在三个园区联合运营的情况下,分析总购电量、总弃风弃光电量、总供电成本和单位电量平均供电成本。

  2. 联合园区的储能配置:制定联合园区的总储能最优配置方案,并分析其经济性。

  3. 独立运营与联合运营的比较:比较两种运营模式下的经济收益,并分析导致经济收益改变的主要因素。

问题三:风光储协调配置方案

  1. 独立运营与联合运营的配置方案:在负荷增长50%的条件下,分别制定各园区独立运营和联合运营的风光储协调配置方案。

  2. 全年分时电价的配置方案:根据全年12个月的典型日风光发电功率数据和分时电价,制定各园区独立运营的风光储协调配置方案。

代码获取

对于有需要获取本题完整代码与答案的朋友,可以通过以下方式联系我:

  • QQ:1758479970

请注意,获取代码的过程中,我们将提供必要的技术支持和解答。

结语

2024年电工杯A题是一个具有实际应用价值的数学建模问题。通过解决这个问题,我们不仅能够提升园区微电网的经济效益,还能够为可再生能源的高效利用提供参考。希望本文的介绍和解题思路能对参赛者有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值