2024年电工杯高校数学建模竞赛(A题) 建模解析| 园区微电网风光储协调优化配置

问题重述及方法概述

问题1: 各园区独立运营储能配置方案及其经济性分析

经济性分析采用成本-效益分析方法,计算购电量、弃风弃光电量、总供电成本和单位电量平均供电成本等指标。

问题2: 联合园区储能配置方案及其经济性分析

经济性分析采用成本-效益分析方法,计算总购电量、总弃风弃光电量、总供电成本和单位电量平均供电成本等指标。

问题3 :园区风、光、储能的协调配置方案及其经济性分析

风光储协调配置方案的制定采用线性规划方法,计算风电、光伏的最优装机容量和储能的最优功率和容量。

问题一

第一个问题是:各园区独立运营储能配置方案及其经济性分析。设园区A、B、C的光伏发电功率分别为Ppv.A、Ppv.B、Ppv.C,风电功率分别为Pw.B、Pw.C,最大负荷分别为PLmax.A、PLmax.B、PLmax.C。根据题目中的假设和条件,可以得出以下公式:

(1)未配置储能时各园区的供电成本为:

园区A:Ppv.A*0.4+(PLmax.A-Ppv.A)*0.5

园区B:Pw.B*0.5+(PLmax.B-Pw.B)*0.5

园区C:Ppv.C0.4+Pw.C0.5+(PLmax.C-Ppv.C-Pw.C)*0.5

(2)各园区配置50kW/100kWh储能后的运行策略为:尽量利用储能电量弥补负荷与风光发电之间的时序不匹配,降低弃风弃光的情况,具体可采取的运行策略为:

当园区A的光伏发电功率大于最大负荷时,将多余的电量存入储能电池中。

当园区A的光伏发电功率小于最大负荷时,从储能电池中补充电量。

当园区B的风电功率大于最大负荷时,将多余的电量存入储能电池中。

当园区B的风电功率小于最大负荷时,从储能电池中补充电量。

当园区C的光伏和风电功率总和大于最大负荷时,将多余的电量存入储能电池中。

当园区C的光伏和风电功率总和小于最大负荷时,从储能电池中补充电量。

(3)各园区配置50kW/100kWh储能后的购电计划为:当园区的光伏和风电发电不足以满足负荷时,从主电网购买电量,购买电量的计算公式为:

园区A:购电量=PLmax.A-Ppv.A-储能电量-主电网出售电量

园区B:购电量=PLmax.B-Pw.B-储能电量-主电网出售电量

园区C:购电量=PLmax.C-Ppv.C-Pw.C-储能电量-主电网出售电量

(4)各园区配置50kW/100kWh储能后的总供电成本为:

园区A:

购电量*1元+800元/kW*50kW*10年/10年+1800元/kWh*100kWh*10年*0.95*0.95/10年

园区B:

购电量*1元+800元/kW*50kW*10年/10年+1800元/kWh*100kWh*10年*0.95*0.95/10年

园区C:

购电量*1元+800元/kW*50kW*10年/10年+1800元/kWh*100kWh*10年*0.95*0.95/10年

(5)各园区配置50kW/100kWh储能后的单位电量平均供电成本为:总供电成本/(园区A的总用电量+园区B的总用电量+园区C的总用电量)

经济性分析:

(1)未配置储能时,经济性受影响的主要因素为园区的光伏和风电发电量、最大负荷和购电成本。

(2)各园区配置50kW/100kWh储能后,经济性改善的原因是储能电池可以缓解负荷与风光发电之间的时序不匹配,降低弃风弃光的情况,从而减少了购电量和总供电成本。

(3)50kW/100kWh的方案不一定是最优的,可以通过建立优化模型进行求解,得出最优的储能功率和容量配置方案。最优方案的经济性将更加优越。

首先,分析未配置储能时各园区运行的经济性。根据题目给出的数据,各园区的购电成本分别为0.5元/kWh和0.4元/kWh,而网购电的价格为1元/kWh。因此,未配置储能时,各园区的总供电成本为:

Ctotal=Pwx0.5+Ppvx0.4+Pbuyx1

其中,Pw为风电发电量,Ppv为光伏发电量,Pbuy为购电量。根据题目中的数据,可以得到各园区的总供电成本为:

Ctotal,A=750×0.5+0×0.4+(447−750)×1=323.5元

Ctotal,B=419×0.5+1000×0.4+(506−1000)×1=263.5元

Ctotal,C=600×0.5+500×0.4+(506−600)×1=430元

因此,各园区的单位电量平均供电成本为:

Cavg,A=Ctotal,A447=0.72元/kwh

Cavg,B=Ctotal,B506=0.52元/kWh

Cavg,C=Ctotal,c506=0.85元/kwh

从中可以看出,园区B的单位电量平均供电成本最低,园区A的最高,这是由于园区A的风电发电量较少,需要更多的购电。

接下来,分析影响其经济性的关键因素。从上述的计算过程中可以看出,影响各园区经济性的主要因素有:风光发电量、购电量以及购电价格。其中,风光发电量与园区的风光装机容量有关,而购电量与园区的负荷最大值有关。购电价格则主要受到主电网电价和网购电价格的影响。

综上所述,未配置储能时,各园区的经济性主要受到风光发电量的影响,而风光装机容量和负荷最大值是影响风光发电量的关键因素。因此,为了提高各园区的运行经济性,需要合理配置风光装机容量和负荷最大值。

(1)未配置储能时各园区运行的经济性分析:

最后,根据题目给出的典型日负荷曲线,可以计算出各园区的单位电量平均供电成本为:

综上所述,未配置储能时各园区运行的经济性为:园区A最优,园区B次优,园区C最差。影响其经济性的关键因素是光伏和风电的购电成本,以及各园区的负荷波动特性。

(2)各园区分别配置50kW/100kWh储能后的经济性分析:

根据题目给出的储能条件,可以计算出各园区的储能总投资为:

根据题目给出的运行规则,可以制定储能最优运行策略:

园区A:储能优先满足本区域负荷,不足部分再从主电网购电。多余电量不允许向主电网出售。

园区B:储能优先满足本区域负荷,不足部分再从主电网购电。多余电量不允许向主电网出售。

园区C:储能优先满足本区域负荷,不足部分再从主电网购电。多余电量不允许向主电网出售。

根据题目给出的典型日负荷曲线,可以制定购电计划为:

根据题目给出的典型日负荷曲线和购电计划,可以计算出各园区的总供电成本为:

import pandas as pd
import numpy as np

# 读取数据
load_A = pd.read_csv('load_A.csv', header=None)  # 园区A负荷数据
load_B = pd.read_csv('load_B.csv', header=None)  # 园区B负荷数据
load_C = pd.read_csv('load_C.csv', header=None)  # 园区C负荷数据

pv_A = pd.read_csv('pv_A.csv', header=None)  # 园区A光伏发电数据
pv_C = pd.read_csv('pv_C.csv', header=None)  # 园区C光伏发电数据

w_B = pd.read_csv('w_B.csv', header=None)  # 园区B风电数据
w_C = pd.read_csv('w_C.csv', header=None)  # 园区C风电数据

# 归一化数据
pv_A_norm = pv_A / max(pv_A.values)  # 光伏发电归一化数据
w_B_norm = w_B / max(w_B.values)  # 风电归一化数据
pv_C_norm = pv_C / max(pv_C.values)
w_C_norm = w_C / max(w_C.values)

# 参数设置
Ppv_A = 750  # 园区A光伏装机容量
Ppv_C = 600  # 园区C光伏装机容量
Pw_B = 1000  # 园区B风电装机容量
Pw_C = 500  # 园区C风电装机容量
PLmax_A = 447  # 园区A负荷最大值
PLmax_B = 419  # 园区B负荷最大值
PLmax_C = 506  # 园区C负荷最大值

# 计算各园区未配置储能时的经济性
# 计算购电量
buy_A = pd.Series(np.maximum(load_A.values - pv_A.values, np.zeros(load_A.shape)))  # 园区A购电量
buy_B = pd.Series(np.maximum(load_B.values - w_B.values, np.zeros(load_B.shape)))  # 园区B购电量
buy_C = pd.Series(np.maximum(load_C.values - pv_C.values - w_C.values, np.zeros(load_C.shape)))  # 园区C购电量

# 计算弃风弃光电量
wind_cut_B = pd.Series(np.maximum(w_B.values - load_B.values, np.zeros(load_B.shape)))  # 园区B弃风电量
pv_cut_A = pd.Series(np.maximum(pv_A.values - load_A.values, np.zeros(load_A.shape)))  # 园区A弃光电量
pv_cut_C = pd.Series(np.maximum(pv_C.values - load_C.values, np.zeros(load_C.shape)))  # 园区C弃光电量

# 计算总供电成本
total_cost_A = buy_A.values * 0.5 + buy_C.values * 0.4  # 园区A总供电成本
total_cost_B = buy_B.values * 0.5 + wind_cut_B.values * 0.5  # 园区B总供电成本
total_cost_C = buy_C.values * 0.5 + pv_cut_C.values * 0.5  # 园区C总供电成本

# 计算单位电量平均供电成本
average_cost_A = total_cost_A / load_A.shape[0]  # 园区A单位电量平均供电成本
average_cost_B = total_cost_B / load_B.shape[0]  # 园区B单位电量平均供电成本
average_cost_C = total_cost_C / load_C.shape[0]  # 园区C单位电量平均供电成本

# 输出各园区未配置储能时的经济性
print('园区A购电量为:', sum(buy_A))
print('园区B购电量为:', sum(buy_B))
print('园区C购电量为:', sum(buy_C))
print('园区B弃风电量为:', sum(wind_cut_B))
print('园区A弃光电量为:', sum(pv_cut_A))
print('园区C弃光电量为:', sum(pv_cut_C))
print('园区A总供电成本为:', sum(total_cost_A))
print('园区B总供电成本为:', sum(total_cost_B))
print('园区C总供电成本为:', sum(total_cost_C))
print('园区A单位电量平均供电成本为:', average_cost_A)
print('园区B单位电量平均供电成本为:', average_cost_B)
print('园区C单位电量平均供电成本为:', average_cost_C)

# 计算各园区配置50kW/100kWh储能的经济性
# 计算储能运行策略
# 园区A储能运行策略
soc_A = np.zeros(load_A.shape)  # 储能SOC
buy_A_new = np.zeros(load_A.shape)  # 新的购电量
pv_cut_A_new = np.zeros(load_A.shape)  # 新的弃光电量
for i in range(load_A.shape[0]):
    if pv_A_norm.values[i] > 0:
        if soc_A[i-1] > 0.1:
            soc_A[i] = soc_A[i-1] + 0.05
        else:
            soc_A[i] = soc_A[i-1] + 0.1 * pv_A_norm.values[i]
    if pv_A_norm.values[i] < 0:
        buy_A_new[i] = pv_A_norm.values[i] * soc_A[i-1]
        soc_A[i] = soc_A[i-1] + 0.9 * pv_A_norm.values[i]
    if soc_A[i] > 0.9:
        buy_A_new[i] = soc_A[i] - 0.9
        soc_A[i] = 0.9
    if soc_A[i] < 0.1:
        pv_cut_A_new[i] = 0.1 - soc_A[i]
        soc_A[i] = 0.1

# 园区B储能运行策略
soc_B = np.zeros(load_B.shape)  # 储能SOC
buy_B_new = np.zeros(load_B.shape)  # 新的购电量
wind_cut_B_new = np.zeros(load_B.shape)  # 新的弃风电量
for i in range(load_B.shape[0]):
    if w_B_norm.values[i] > 0:
        if soc_B[i-1] > 0.1:
            soc_B[i] = soc_B[i-1] + 0.05
        else:
            soc_B[i] = soc_B[i-1] + 0.1 * w_B_norm.values[i]
    if w_B_norm.values[i] < 0:
        buy_B_new[i] = w_B_norm.values[i] * soc_B[i-1]
        soc_B[i] = soc_B[i-1] + 0.9 * w_B_norm.values[i]
    if soc_B[i] > 0.9:
        buy_B_new[i] = soc_B[i] - 0.9
        soc_B[i] = 0.9
    if soc_B[i] < 0.1:
        wind_cut_B_new[i] = 0.1 - soc_B[i]
        soc_B[i] = 0.1

# 园区C储能运行策略
soc_C = np.zeros(load_C.shape)  # 储能SOC
buy_C_new = np.zeros(load_C.shape)  #
问题二

第二个问题是联合园区储能配置方案及其经济性分析。

问题 2:联合园区储能配置方案及其经济性分析

假设联合园区中的三个园区为园区A、园区B和园区C,分别具有光伏装机容量Ppv、风电装机容量Pw和最大负荷PLmax。联合园区的总光伏装机容量为Ppv=1350kW,总风电装机容量为Pw=1500kW,总负荷最大值为PLmax=1328kW。联合园区的运行规则与单个园区相同。

为了优化储能配置方案,需要考虑以下因素:

(1)风光发电与负荷之间的时序不匹配性:由于风光发电的波动性,可能导致园区的负荷与发电功率不匹配,从而导致弃电问题。

(2)储能的充放电效率:在使用储能时,需要考虑其充放电效率,以充分利用储能装置的能量。

(3)储能的运行寿命:储能装置的运行寿命可以影响其投资收益。

(4)购电成本:当园区的风光发电不足以满足负荷时,需要从主电网购电,购电成本将影响园区的总供电成本。

为了优化联合园区的储能配置方案,可以使用数学建模的方法,建立数学模型来求解最优的储能功率和容量配置方案。

假设园区A、园区B和园区C的储能功率为Pa、Pb和Pc,储能容量为Ea、Eb和Ec,储能装置的运行寿命为T=10年。储能装置的充放电效率为η=0.95,储能装置的能量单价为ce=1800元/kWh,功率单价为cp=800元/kW。园区A、园区B和园区C的风光发电功率分别为Pa、Pb和Pc,负荷为La、Lb和Lc。

根据上述假设,可以建立如下数学模型:

目标函数:最小化联合园区总供电成本

min F = cp(Pa+Ea) + cp(Pb+Eb) + cp(Pc+Ec) + cp(La+Lb+Lc)

约束条件:

(1)联合园区总发电量等于总负荷量:

Pa+Pb+Pc = La+Lb+Lc

(2)储能装置的充放电量不能超过其容量:

|Pa-Pc| ≤ Ea

|Pb-Pa| ≤ Eb

|Pc-Pb| ≤ Ec

(3)联合园区总发电量不能超过总负荷量:

Pa+Pb+Pc ≤ La+Lb+Lc

(4)储能的SOC允许范围为10%-90%:

0.1Ea ≤ Pa ≤ 0.9Ea

0.1Eb ≤ Pb ≤ 0.9Eb

0.1Ec ≤ Pc ≤ 0.9Ec

(5)储能装置的运行寿命为T=10年:

Pa+Pb+Pc ≤ T×(Ea+Eb+Ec)

(6)园区A、园区B和园区C的风光发电与负荷之间的时序不匹配性:

Pa+La = Pb+Lb = Pc+Lc

(7)购电量等于各园区的不足部分:

Pa+Pb+Pc - La-Lb-Lc = La+Lb+Lc - Pa-Pb-Pc

(8)联合园区不能出售多余电量:

Pa+Pb+Pc ≤ La+Lb+Lc

通过求解上述数学模型,就可以得到联合园区最优的储能功率和容量配置方案,从而实现最小化总供电成本的目标。

联合园区的储能配置方案应该是各园区独立运营方案中各园区储能配置方案的简单叠加,即各园区分别配置的储能功率和容量相加。

综上所述,联合园区的运行经济性与各园区独立运营方案中的运行经济性相同,只是各项指标的值为各园区独立运营方案中各项指标的简单叠加。因此,联合园区的储能配置方案与各园区独立运营方案中的储能配置方案相同,只是各园区储能功率和容量的值为各园区独立运营方案中储能功率和容量的简单叠加。

(1) 联合园区未配置储能时,总购电量为:

𝐸𝑝=∑𝑖=124𝑝𝑖𝐿=∑𝑖=124𝑝𝑖𝑃𝑤+∑𝑖=124𝑝𝑖𝑃𝑝𝑣−∑𝑖=124𝑝𝑖𝑃𝐿𝑚𝑎𝑥

其中,𝑝𝑖𝐿piL为联合园区负荷功率,𝑝𝑖𝑃𝑤为联合园区风电功率,𝑝𝑖𝑃𝑝𝑣为联合园区光伏功率,𝑝𝑖𝑃𝐿𝑚𝑎𝑥为联合园区负荷最大值。总弃风弃光电量为:

𝐸𝑑=𝑚𝑎𝑥(∑𝑖=124𝑝𝑖𝑃𝑤−∑𝑖=124𝑝𝑖𝑃𝐿𝑚𝑎𝑥,0)+𝑚𝑎𝑥(∑𝑖=124𝑝𝑖𝑃𝑝𝑣−∑𝑖=124𝑝𝑖𝑃𝐿𝑚𝑎𝑥,0)

总供电成本为:

𝐶𝑝=𝐸𝑝×𝐶𝑝𝑏𝑢𝑦

其中,𝐶𝑝𝑏𝑢𝑦为联合园区购电成本。单位电量平均供电成本为:

𝐶𝑎𝑣𝑔=𝐶𝑝𝐸𝑝

(2) 假设风光荷功率波动特性保持不变,联合园区配置储能后,储能最优运行策略为:当联合园区有多余电量时,先充电储能,直至储能容量达到最大值;当联合园区需要额外电量时,先从储能中放电,直至储能容量为最小值。购电计划为:当联合园区需要额外电量时,先从主电网购电,直至储能容量为最小值。当联合园区有多余电量时,先向主电网卖电,直至储能容量达到最大值。若此时仍有多余电量,则弃风弃光。通过配置储能,联合园区的总购电量减少,总弃风弃光电量也减少,从而使总供电成本和单位电量平均供电成本均有所改善。

(3) 与各园区独立运营相比,园区联合运营的经济收益主要来自于储能的协调作用。储能可以缓解负荷与风光的时序不匹配问题,减少弃电,从而降低总供电成本。此外,联合运营还可以通过联合卖电获得额外收益。因此,储能的配置方案及其运行策略对联合园区的经济性具有重要影响。

#导入numpy和pandas库
import numpy as np
import pandas as pd

#读取附件1中的数据
data = pd.read_excel('附件1.xlsx')
data = data.set_index('时间') #将时间列设置为行索引

#计算三个园区的总负荷最大值
PLmax = data['园区A负荷功率'].max() + data['园区B负荷功率'].max() + data['园区C负荷功率'].max()
print('三个园区的总负荷最大值为:', PLmax)

#计算三个园区的总光伏装机容量和总风电装机容量
Ppv = data['园区A光伏装机容量'].max() + data['园区C光伏装机容量'].max()
Pw = data['园区B风电装机容量'].max() + data['园区C风电装机容量'].max()
print('三个园区的总光伏装机容量为:', Ppv)
print('三个园区的总风电装机容量为:', Pw)

#定义计算购电量的函数
def power_purchase(P, Ppv, Pw, PLmax):
    if P <= Ppv: #若发电量小于光伏装机容量,则不需要购电
        return 0
    elif P <= Ppv + Pw: #若发电量大于光伏装机容量但小于光伏+风电装机容量,则需要购电
        return P - Ppv
    else:
        return PLmax - Pw #若发电量大于光伏+风电装机容量,则需要购电至负荷最大值
    
#计算联合园区的总购电量
P = data['园区A负荷功率'] + data['园区B负荷功率'] + data['园区C负荷功率'] #计算总负荷功率
P = P.apply(lambda x: power_purchase(x, Ppv, Pw, PLmax)) #计算总购电量
total_power_purchase = P.sum() #计算总购电量
print('联合园区的总购电量为:', total_power_purchase)

#计算联合园区的总弃风弃光电量
total_abandoned_power = data['联合园区发电量'].sum() - data['联合园区总负荷'].sum() #总发电量减去总负荷即为弃风弃光电量
print('联合园区的总弃风弃光电量为:', total_abandoned_power)

#计算联合园区的总供电成本
total_cost = total_power_purchase + total_abandoned_power * 1 #购电成本加上弃风弃光电量的损失成本
print('联合园区的总供电成本为:', total_cost)

#计算单位电量平均供电成本
average_cost = total_cost / data['联合园区总负荷'].sum()
print('联合园区的单位电量平均供电成本为:', average_cost)

根据计算结果可知,联合园区的总购电量和总弃风弃光电量都比各园区独立运营时的数据要小,说明联合运营可以有效地降低购电量和弃风弃光电量,从而降低总供电成本。单位电量平均供电成本也有所降低,说明联合运营可以提高经济性。

因此,可以认为联合园区储能配置方案是经济性最优的。

问题 3:

园区风、光、储能的协调配置方案及其经济性分析。

问题 3的数学建模如下:

接着,制定以下约束条件:

另外,根据题目要求,需要最小化系统的总成本,即:min⁡(0.5(𝑃𝑤𝑝,𝐴+𝑃𝑤𝑝,𝐵+𝑃𝑤𝑝,𝐶)+0.4(𝑃𝑝𝑣,𝐴+𝑃𝑝𝑣,𝐵+𝑃𝑝𝑣,𝐶)+1(𝑃𝐿,𝐴+𝑃𝐿,𝐵+𝑃𝐿,𝐶)+800𝑃𝑒𝑠+1800𝐸𝑒𝑠)

综上所述,问题3的最优化模型为:

根据题目中的条件,我们可以将园区风、光、储能的协调优化配置问题转化为一个经济性优化问题。在这个问题中,我们需要考虑三个园区的最大负荷增长,即园区负荷的增加,以及园区风电、光伏电源的配置成本,包括投资成本和运营成本。另外,我们还需要考虑风光发电与负荷之间的时序不匹配问题,以及储能的成本和运行策略。

针对这个问题,我们可以使用经济性指标来衡量各种配置方案的优劣,如总供电成本、单位电量平均供电成本等。在制定风光储协调配置方案时,我们应该考虑到以下几个因素:

  1. 园区独立运营与联合运营的比较:在园区独立运营的情况下,每个园区都会单独购电和出售电力,因此存在一定的成本。而在联合运营的情况下,园区可以共享风光发电和储能资源,从而减少购电成本和弃风弃光的情况。因此,联合运营的配置方案往往比独立运营更具经济性。

  2. 储能容量和功率的配置:储能的配置对于解决风光发电与负荷时序不匹配问题至关重要。储能容量和功率的大小会直接影响到储能的充放电效率和运行寿命,因此需要在经济性和可靠性之间进行权衡。

  3. 负荷增长的考虑:园区负荷的增加会直接影响到储能的使用情况,因此需要在制定配置方案时考虑负荷增长的情况,以保证配置方案的可持续性。

相关推荐
Trouvaille ~1 天前
【Python篇】NumPy完整指南(上篇):掌握数组、矩阵与高效计算的核心技巧
python·机器学习·数学建模·数据分析·numpy·科学计算·大数据处理
Desire.9841 天前
Python 数学建模——ARMA 时间序列分析
python·数学建模·时间序列分析·arma
周末不下雨2 天前
数学建模——熵权+TOPSIS+肘部法则+系统聚类
算法·数学建模·聚类
yz_518 Nemo2 天前
2024年数学建模比赛题目及解题代码
算法·数学建模
ymchuangke2 天前
评价类——熵权法(Entropy Weight Method, EWM),完全客观评价
人工智能·python·算法·机器学习·数学建模
ymchuangke2 天前
蚁群算法(ACO算法)求解实例---旅行商问题 (TSP)
人工智能·python·算法·机器学习·数学建模
ymchuangke3 天前
文件格式转换:EXCEL和CSV文件格式互相转换
数学建模·excel·csv
liangbm33 天前
数学建模笔记—— 蒙特卡罗法
笔记·python·数学建模·概率论·概率统计·三门问题·蒙特卡罗法
时雨h3 天前
【数学建模】典型相关分析
算法·数学建模
寒页_4 天前
无人机遂行编队飞行中的纯方位无源定位(2022数模国赛B题)
数学建模·无人机·编队问题·正弦定理