2024电工杯A题保姆级分析完整思路+代码+数据教学

2024电工杯A题保姆级分析完整思路+代码+数据教学

A题题目:园区微电网风光储协调优化配置 

接下来我们将按照题目总体分析-背景分析-各小问分析的形式来

总体分析:

题目要求对园区微电网进行风光储协调优化配置,具体涉及三个园区(A、B、C)的独立运营和联合运营情况。目标是通过合理配置储能系统,尽量提高风光电量的负荷占比,减少弃电,同时考虑投资及其收益。具体需要解决以下几个问题:

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

  1. 未配置储能时各园区的购电量、弃风弃光电量、总供电成本和单位电量平均供电成本分析。

  2. 配置50kW/100kWh储能系统后的经济性、最优运行策略及购电计划分析。

  3. 判断50kW/100kWh方案是否最优,若不是,制定最优储能配置方案并论证其优越性。

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

  1. 未配置储能时联合园区的总购电量、总弃风弃光电量、总供电成本和单位电量平均供电成本分析。

  2. 制定联合园区的储能最优配置方案及其运行策略、购电计划,分析经济性。

  3. 比较联合运营与独立运营的经济收益,并分析主要影响因素。

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

  1. 考虑负荷增长50%后的独立运营和联合运营方案,制定风光储协调配置方案。

  2. 按全年12个月典型日风光发电数据,结合分时电价制定购电计划并分析经济性。

背景分析:

随着可再生能源(如风电和光伏发电)的普及,如何高效利用这些不稳定的电力资源成为一个重要课题。微电网系统通过结合风电、光伏发电与储能系统,能够在一定程度上解决风光发电的波动性和间歇性问题,优化电力资源配置,提高可再生能源的利用率。

具体背景:

  1. 园区微电网结构:

  • 三个园区(A、B、C)各自独立接入主电网。

  • 每个园区均有其最大负荷及风光发电装机容量(园区A:750kW光伏,447kW负荷;园区B:1000kW风电,419kW负荷;园区C:600kW光伏、500kW风电,506kW负荷)。

  • 经济性考量:

  • 可再生能源优先供给园区负荷,电力不足部分从主电网购电(购电价格1元/kWh)。

  • 由于风光发电的波动特性,可能出现弃电现象(风电、光伏电量超过负荷且不能售回主电网)。

  • 储能系统配置:

  • 配置磷酸铁锂电池储能系统(功率单价800元/kW,能量单价1800元/kWh,SOC范围10%-90%,充/放电效率95%,寿命10年)。

  • 通过配置储能系统,能够缓解负荷与发电功率的不匹配,减少弃电量。

问题分析:

  1. 独立运营的经济性分析:

  • 未配置储能时的经济性:购电量、弃电量、总供电成本及平均供电成本。

  • 配置储能系统后的经济性:储能运行策略及购电计划,分析是否改善经济性。

  • 联合运营的经济性分析:

  • 未配置储能时,三个园区联合运营的经济性:总购电量、总弃电量、总供电成本及平均供电成本。

  • 制定联合运营的储能最优配置方案,并分析其经济性。

  • 比较独立运营与联合运营的经济收益,分析主要影响因素。

  • 风光储协调配置方案:

  • 考虑负荷增长50%后的独立运营和联合运营方案。

  • 使用全年12个月的典型日发电数据,结合分时电价制定购电计划,分析经济性。

通过以上分析,最终来优化储能配置,提高风光发电的利用率,降低总供电成本,实现经济效益的最大化。

数据集分析:

我们以附件1为例,对其进行数据预处理和EDA(探索性数据分析),我们分为以下几步(python代码)

  1. 读取数据

  2. 数据预处理

  • 检查缺失值

  • 数据类型转换

  • EDA

  • 各园区负荷数据的基本统计描述

  • 各园区负荷数据的可视化

1. 读取数据

import pandas as pd

# 读取附件1:各园区典型日负荷数据

file_path = '/mnt/data/附件1:各园区典型日负荷数据.xlsx'

load_data = pd.read_excel(file_path, sheet_name=None)

# 查看数据表名称

sheet_names = load_data.keys()

print("数据表名称:", sheet_names)

# 提取每个园区的数据

load_data_A = load_data['园区A']

load_data_B = load_data['园区B']

load_data_C = load_data['园区C']

# 显示每个园区数据的前几行

print("园区A负荷数据前几行:")

print(load_data_A.head())

print("\n园区B负荷数据前几行:")

print(load_data_B.head())

print("\n园区C负荷数据前几行:")

print(load_data_C.head())

2. 数据预处理

检查缺失值和数据类型转换

# 检查各园区数据的缺失值情况

print("园区A缺失值情况:")

print(load_data_A.isnull().sum())

print("\n园区B缺失值情况:")

print(load_data_B.isnull().sum())

print("\n园区C缺失值情况:")

print(load_data_C.isnull().sum())

# 检查数据类型

print("\n园区A数据类型:")

print(load_data_A.dtypes)

print("\n园区B数据类型:")

print(load_data_B.dtypes)

print("\n园区C数据类型:")

print(load_data_C.dtypes)

# 如有必要,进行数据类型转换(此处假设数据类型已经正确,不需要转换)

3. 探索性数据分析(EDA)

基本统计描述

# 各园区负荷数据的基本统计描述

print("园区A负荷数据基本统计描述:")

print(load_data_A.describe())

print("\n园区B负荷数据基本统计描述:")

print(load_data_B.describe())

print("\n园区C负荷数据基本统计描述:")

print(load_data_C.describe())

负荷数据可视化

import matplotlib.pyplot as plt

# 设置绘图风格

plt.style.use('seaborn-darkgrid')

# 可视化园区A的负荷数据

plt.figure(figsize=(12, 6))

plt.plot(load_data_A['时间'], load_data_A['负荷'], label='园区A负荷')

plt.xlabel('时间 (小时)')

plt.ylabel('负荷 (kW)')

plt.title('园区A典型日负荷曲线')

plt.legend()

plt.show()

# 可视化园区B的负荷数据

plt.figure(figsize=(12, 6))

plt.plot(load_data_B['时间'], load_data_B['负荷'], label='园区B负荷', color='orange')

plt.xlabel('时间 (小时)')

plt.ylabel('负荷 (kW)')

plt.title('园区B典型日负荷曲线')

plt.legend()

plt.show()

# 可视化园区C的负荷数据

plt.figure(figsize=(12, 6))

plt.plot(load_data_C['时间'], load_data_C['负荷'], label='园区C负荷', color='green')

plt.xlabel('时间 (小时)')

plt.ylabel('负荷 (kW)')

plt.title('园区C典型日负荷曲线')

plt.legend()

plt.show()

问题一分析:

这个问题包含三个部分:

  1. 未配置储能时的经济性分析

  2. 配置储能后的经济性分析

  3. 储能系统配置方案优化

下面详细分析每个部分需要解决的问题和方法。

1.1 未配置储能时的经济性分析

需要解决的问题:

  • 计算各园区的购电量。

  • 计算各园区的弃风弃光电量。

  • 计算总供电成本和单位电量平均供电成本。

  • 分析影响经济性的关键因素。

步骤:

  1. 从负荷数据和风光发电数据中提取各园区的典型日数据。

  2. 计算各时刻的风光发电总量。

  3. 比较风光发电总量与负荷需求,计算购电量和弃电量。

  4. 计算总供电成本和单位电量平均供电成本。

1.2 配置储能后的经济性分析

需要解决的问题:

  • 配置50kW/100kWh储能系统后的经济性分析。

  • 制定储能最优运行策略及购电计划。

  • 分析配置储能后的运行经济性是否改善及其原因。

步骤:

  1. 引入储能系统,考虑储能系统的功率和容量限制,以及充放电效率。

  2. 在负荷需求大于风光发电时,优先使用储能系统提供电力,不足部分从电网购电。

  3. 在风光发电大于负荷需求时,优先充电至储能系统,超出部分视为弃电。

  4. 计算配置储能系统后的购电量、弃电量、总供电成本和单位电量平均供电成本。

  5. 比较未配置储能和配置储能情况下的经济性。

1.3 储能系统配置方案优化

需要解决的问题:

  • 判断50kW/100kWh储能方案是否最优。

  • 如果不是,制定各园区最优的储能功率、容量配置方案。

  • 论证所制定方案的优越性。

步骤:

  1. 通过不同储能配置方案的模拟,比较各配置方案的经济性指标。

  2. 确定在各园区经济性最优的储能功率和容量配置。

  3. 分析最优配置方案的优越性,包括投资成本与运行成本的综合考虑。

下面给大家第一问需要的代码,包括未配置储能时的经济性分析和配置储能后的经济性分析:

读取数据和初步预处理

import pandas as pd

# 读取附件1:各园区典型日负荷数据

file_path = '/mnt/data/附件1:各园区典型日负荷数据.xlsx'

load_data = pd.read_excel(file_path, sheet_name=None)

# 提取每个园区的数据

load_data_A = load_data['园区A']

load_data_B = load_data['园区B']

load_data_C = load_data['园区C']

# 读取附件2:各园区典型日风光发电数据

file_path_gen = '/mnt/data/附件2:各园区典型日风光发电数据.xlsx'

generation_data = pd.read_excel(file_path_gen, sheet_name=None)

# 提取每个园区的发电数据

generation_data_A = generation_data['园区A']

generation_data_B = generation_data['园区B']

generation_data_C = generation_data['园区C']

计算未配置储能时的经济性

# 定义购电成本

grid_cost = 1 # 元/kWh

# 计算未配置储能时的购电量、弃风弃光电量和供电成本

def calculate_no_storage(load, generation):

load['购电量'] = 0

load['弃电量'] = 0

load['供电成本'] = 0

for i in range(len(load)):

generation_total = generation['风电功率'][i] + generation['光伏功率'][i]

if generation_total >= load['负荷'][i]:

load['弃电量'][i] = generation_total - load['负荷'][i]

else:

load['购电量'][i] = load['负荷'][i] - generation_total

load['供电成本'][i] = load['购电量'][i] * grid_cost

total_cost = load['供电成本'].sum()

total_load = load['负荷'].sum()

avg_cost = total_cost / total_load if total_load != 0 else 0

return total_cost, avg_cost, load['购电量'].sum(), load['弃电量'].sum()

# 园区A

total_cost_A, avg_cost_A, total_grid_A, total_discard_A = calculate_no_storage(load_data_A, generation_data_A)

print(f"园区A未配置储能时总供电成本: {total_cost_A} 元, 单位电量平均供电成本: {avg_cost_A} 元/kWh, 总购电量: {total_grid_A} kWh, 总弃电量: {total_discard_A} kWh")

# 园区B

total_cost_B, avg_cost_B, total_grid_B, total_discard_B = calculate_no_storage(load_data_B, generation_data_B)

print(f"园区B未配置储能时总供电成本: {total_cost_B} 元, 单位电量平均供电成本: {avg_cost_B} 元/kWh, 总购电量: {total_grid_B} kWh, 总弃电量: {total_discard_B} kWh")

# 园区C

total_cost_C, avg_cost_C, total_grid_C, total_discard_C = calculate_no_storage(load_data_C, generation_data_C)

print(f"园区C未配置储能时总供电成本: {total_cost_C} 元, 单位电量平均供电成本: {avg_cost_C} 元/kWh, 总购电量: {total_grid_C} kWh, 总弃电量: {total_discard_C} kWh")

计算配置储能后的经济性

# 定义储能系统参数

storage_power = 50 # kW

storage_capacity = 100 # kWh

storage_efficiency = 0.95

soc_min = 0.1

soc_max = 0.9

# 计算配置储能后的购电量、弃风弃光电量和供电成本

def calculate_with_storage(load, generation):

load['购电量'] = 0

load['弃电量'] = 0

load['供电成本'] = 0

soc = storage_capacity * soc_max # 初始SOC设为最大值

for i in range(len(load)):

generation_total = generation['风电功率'][i] + generation['光伏功率'][i]

load_needed = load['负荷'][i]

if generation_total >= load_needed:

surplus = generation_total - load_needed

if soc < storage_capacity * soc_max:

charge_power = min(surplus, storage_power) * storage_efficiency

soc += charge_power

if soc > storage_capacity * soc_max:

soc = storage_capacity * soc_max

surplus -= charge_power / storage_efficiency

load['弃电量'][i] = surplus

else:

deficit = load_needed - generation_total

if soc > storage_capacity * soc_min:

discharge_power = min(deficit, storage_power) / storage_efficiency

soc -= discharge_power

if soc < storage_capacity * soc_min:

soc = storage_capacity * soc_min

deficit -= discharge_power * storage_efficiency

load['购电量'][i] = deficit

load['供电成本'][i] = load['购电量'][i] * grid_cost

total_cost = load['供电成本'].sum()

total_load = load['负荷'].sum()

avg_cost = total_cost / total_load if total_load != 0 else 0

return total_cost, avg_cost, load['购电量'].sum(), load['弃电量'].sum()

# 园区A

total_cost_A_with_storage, avg_cost_A_with_storage, total_grid_A_with_storage, total_discard_A_with_storage = calculate_with_storage(load_data_A, generation_data_A)

print(f"园区A配置储能后总供电成本: {total_cost_A_with_storage} 元, 单位电量平均供电成本: {avg_cost_A_with_storage} 元/kWh, 总购电量: {total_grid_A_with_storage} kWh, 总弃电量: {total_discard_A_with_storage} kWh")

# 园区B

total_cost_B_with_storage, avg_cost_B_with_storage, total_grid_B_with_storage, total_discard_B_with_storage = calculate_with_storage(load_data_B, generation_data_B)

print(f"园区B配置储能后总供电成本: {total_cost_B_with_storage} 元, 单位电量平均

当然,第一问想要做的出彩,可以使用以下方法:

混合整数线性规划(Mixed-Integer Linear Programming, MILP)

混合整数线性规划适用于包含整数变量的优化问题。储能系统配置中的开关状态、充放电决策可以用整数变量表示,通过MILP求解最优配置方案。

元启发式算法(Metaheuristic Algorithms)

例如,遗传算法(Genetic Algorithm)、粒子群优化(Particle Swarm Optimization, PSO)等,这些算法能够有效搜索复杂的非线性和非凸优化空间,找到近似最优解。

仿真建模与蒙特卡洛模拟(Simulation Modeling and Monte Carlo Simulation)

这里给大家讲解一下粒子群优化如何做这道题目:

PSO算法概述

PSO通过模拟鸟群觅食行为来优化问题,主要包括以下步骤:

  1. 初始化一群粒子,每个粒子表示一个潜在解。

  2. 更新每个粒子的速度和位置,使其趋向于自身和群体的最佳位置。

  3. 评估每个粒子的适应度值,根据适应度值更新全局最佳位置。

  4. 重复以上步骤直到满足终止条件(如达到最大迭代次数或适应度值变化小于设定阈值)。

Python实现

下面是一个使用PSO算法优化储能系统配置方案的示例代码。假设我们需要优化储能系统的功率和容量,以最小化总供电成本。

import numpy as np

import pandas as pd

from pyswarm import pso

# 读取数据

file_path = '/mnt/data/附件1:各园区典型日负荷数据.xlsx'

load_data = pd.read_excel(file_path, sheet_name=None)

load_data_A = load_data['园区A']

file_path_gen = '/mnt/data/附件2:各园区典型日风光发电数据.xlsx'

generation_data = pd.read_excel(file_path_gen, sheet_name=None)

generation_data_A = generation_data['园区A']

# 定义PSO优化目标函数

def cost_function(x):

storage_power, storage_capacity = x

storage_efficiency = 0.95

soc_min, soc_max = 0.1, 0.9

grid_cost = 1

T = len(load_data_A)

soc = storage_capacity * soc_max # 初始SOC设为最大值

total_cost = 0

for t in range(T):

generation_total = generation_data_A['风电功率'][t] + generation_data_A['光伏功率'][t]

load_needed = load_data_A['负荷'][t]

if generation_total >= load_needed:

surplus = generation_total - load_needed

if soc < storage_capacity * soc_max:

charge_power = min(surplus, storage_power) * storage_efficiency

soc += charge_power

if soc > storage_capacity * soc_max:

soc = storage_capacity * soc_max

surplus -= charge_power / storage_efficiency

else:

deficit = load_needed - generation_total

if soc > storage_capacity * soc_min:

discharge_power = min(deficit, storage_power) / storage_efficiency

soc -= discharge_power

if soc < storage_capacity * soc_min:

soc = storage_capacity * soc_min

deficit -= discharge_power * storage_efficiency

total_cost += deficit * grid_cost

return total_cost

# PSO参数

lb = [10, 50] # 储能功率和容量的下界

ub = [200, 500] # 储能功率和容量的上界

maxiter = 100 # 最大迭代次数

swarmsize = 30 # 粒子群大小

# 执行PSO优化

best_x, best_cost = pso(cost_function, lb, ub, swarmsize=swarmsize, maxiter=maxiter)

print(f"最优储能功率: {best_x[0]} kW")

print(f"最优储能容量: {best_x[1]} kWh")

print(f"最小总供电成本: {best_cost} 元")

通过上述代码,我们使用PSO算法优化了储能系统的功率和容量配置,找到了使总供电成本最小化的最优配置方案。可以根据具体问题和数据调整PSO算法的参数(如粒子群大小、最大迭代次数)来获得更优的结果。

问题2-3后续更新

其中更详细的思路、各题目思路、代码、讲解视频、成品论文及其他相关内容,可以点击下方名片获取哦!

  • 9
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值