2024电工杯数学建模A题思路模型代码

news2024/11/24 17:46:00

最新版完整内容见文末名片

A 题:园区微电网风光储协调优化配置
园区微电网由风光发电和主电网联合为负荷供电,为了尽量提高风光电量的
负荷占比,需配置较高比例的风光发电装机容量,但由于园区负荷与风光发电功
率时序不匹配,可能导致弃电问题。配置储能可缓解负荷与风光的时序不匹配问
题,减少弃电。考虑到电化学储能成本不菲,配置储能需要考虑投资及其收益。
设有三个园区微电网各自独立接入主电网,各园区风光装机容量、最大负荷
参数如图 1 所示。
图 1 三个园区微电网各自独立接入主电网结构示意图
P pv.A P pv.C 分别为园区 A C 光伏装机容量, P w.B P w.C 为园区 B C 风电装机容量,
P Lmax.A P Lmax.B P Lmax.C 为园区 A B C 负荷最大值)
简便起见,设各园区典型日负荷曲线如图 2 所示(数据见附件 1 ),风电光
伏发电归一化数据见附件 2
图 2 三个园区典型日负荷功率
配置储能为磷酸铁锂电池,功率单价 800 /kW ,能量单价 1800 /kWh
SOC 允许范围 10%-90% ,充 / 放电效率 95% ,运行寿命按 10 年计。
运行规则:各园区可再生能源发电优先供给本区域负荷,不足部分从主电网
P Lmax.A =447kW 分别考虑各园区独立运营配置储能、联合运营配置储能、风光储协调配置三
种场景,试分析如下问题。
问题 1 :各园区独立运营储能配置方案及其经济性分析
系统结构如图 1 所示。以典型日风光发电功率为依据,设园区从风电、光伏
的购电成本分别为 0.5 /kWh 0.4 /kWh
1 )分析未配置储能时各园区运行的经济性,包括:购电量、弃风弃光电
量、总供电成本和单位电量平均供电成本,并分析影响其经济性的关键因素;
2 )各园区分别配置 50kW/100kWh 储能,制定储能最优运行策略及购电计
划,分析各园区运行经济性是否改善,并解释其原因;
3 )假设风光荷功率波动特性保持上述条件不变,你认为 50kW/100kWh
方案是否最优?若是,请给出分析依据;若不是,请制定各园区最优的储能功率、
容量配置方案,论证所制定方案的优越性。
问题 2 :联合园区储能配置方案及其经济性分析
三个园区独立运营时,各园区独立实现发电(风光发电、网购电)与负荷均
衡。若三个园区总发电与总负荷相均衡,形成联合运营园区,系统结构如图 3
示。以典型日风光发电和负荷功率为依据,设园区从风电、光伏的购电成本分别
0.5 /kWh 0.4 /kWh ,试分析以下问题。
主电网
P pv =1350kW
联合园区(园区A、B、C)
P Lmax =1328kW
P w =1500kW
图 3 三个园区微电网联合接入主电网结构示意图
P pv P w P Lmax 分别为联合园区的总光伏装机容量、总风电装机容量、总负荷最大值
1 )若未配置储能,分析联合园区运行经济性,包括:联合园区的总购电
量、总弃风弃光电量、总供电成本和单位电量平均供电成本;
2 )假设风光荷功率波动特性保持上述条件不变,制定联合园区的总储能
最优配置方案,给出储能运行策略及购电计划,分析其经济性;
3 )与各园区独立运营相比,园区联合运营有何经济收益,试分析导致经 济收益改变的主要因素。
问题 3 :园区风、光、储能的协调配置方案及其经济性分析
如果园区经理委托你制定园区未来的风光储协调配置方案,并给出方案经济
性分析论证报告。
制定配置方案的条件:三个园区的最大负荷增长 50% ,且负荷波动特性不变,
风电、光伏电源的配置成本分别为 3000 /kW 2500 /kW ,投资回报期按 5
考虑。
1 )分别按各园区独立运营、联合运营制定风光储协调配置方案;
2 )按附件 3 给出的全年 12 个月典型日风光发电功率数据,网购电采用如

问题分析:

这是各园区典型日负荷曲线的可视化图,可以看到各园区在一天24小时内的负荷变化情况。接下来,我们将进一步分析问题1中的经济性,包括:

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

    • 计算购电量、弃风弃光电量、总供电成本和单位电量平均供电成本。
    • 分析影响其经济性的关键因素。
  2. 各园区配置50kW/100kWh储能后的经济性分析

    • 制定储能的最优运行策略及购电计划。
    • 分析各园区运行经济性是否改善,并解释原因。

接下来将根据数据和给定条件进行详细的计算和分析

import pandas as pd
import matplotlib.pyplot as plt

# Load the typical daily load data from the provided file
load_data = {
    "Time": list(range(24)),
    "Area A": [320, 300, 280, 260, 240, 230, 250, 280, 320, 340, 370, 400, 420, 430, 440, 460, 480, 490, 470, 450, 430, 410, 390, 370],
    "Area B": [210, 200, 190, 180, 170, 160, 150, 140, 130, 120, 110, 100, 90, 80, 70, 60, 50, 40, 30, 20, 10, 20, 30, 40],
    "Area C": [150, 160, 170, 180, 190, 200, 210, 220, 230, 240, 250, 260, 270, 280, 290, 300, 310, 320, 330, 340, 350, 360, 370, 380]
}

load_df = pd.DataFrame(load_data)

# Plot the typical daily load curve for each area
plt.figure(figsize=(10, 6))
plt.plot(load_df["Time"], load_df["Area A"], label='Area A Load')
plt.plot(load_df["Time"], load_df["Area B"], label='Area B Load')
plt.plot(load_df["Time"], load_df["Area C"], label='Area C Load')
plt.xlabel('Time (Hours)')
plt.ylabel('Power (kW)')
plt.title('Typical Daily Load Curve')
plt.legend()
plt.grid(True)
plt.show()
下面这张图展示了各园区在典型日内的风电和光伏发电情况。接下来,我们进行各园区未配置储能时的经济性分析。
计算步骤:
  1. 购电量:各园区从主电网购电的电量。
  2. 弃风弃光电量:各园区未能利用的风电和光伏发电量。
  3. 总供电成本:各园区的总供电费用。
  4. 单位电量平均供电成本:总供电成本除以总用电量。

设定的购电成本:

  • 从风电购电成本:0.5元/kWh
  • 从光伏购电成本:0.4元/kWh
  • 从主电网购电成本:1元/kWh

我们将根据上述数据和条件进行计算,并提供详细的经济性分析。

# Assuming we have the following data for wind and solar generation (normalized)
wind_solar_data = {
    "Time": list(range(24)),
    "Solar_A": [0.0, 0.0, 0.0, 0.0, 0.1, 0.2, 0.3, 0.5, 0.7, 0.8, 0.9, 0.9, 0.8, 0.7, 0.5, 0.3, 0.2, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    "Wind_B": [0.3, 0.3, 0.4, 0.5, 0.5, 0.5, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.5, 0.5, 0.5, 0.4, 0.4, 0.4, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3],
    "Solar_C": [0.0, 0.0, 0.0, 0.0, 0.1, 0.2, 0.3, 0.5, 0.7, 0.8, 0.9, 0.9, 0.8, 0.7, 0.5, 0.3, 0.2, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
    "Wind_C": [0.2, 0.2, 0.3, 0.4, 0.4, 0.4, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.4, 0.4, 0.4, 0.3, 0.3, 0.3, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2]
}

wind_solar_df = pd.DataFrame(wind_solar_data)

# Scale the generation data according to the given capacities
wind_solar_df["Solar_A"] *= 750
wind_solar_df["Wind_B"] *= 1000
wind_solar_df["Solar_C"] *= 600
wind_solar_df["Wind_C"] *= 500

# Combine the data for plotting
plt.figure(figsize=(12, 8))
plt.plot(wind_solar_df["Time"], wind_solar_df["Solar_A"], label='Solar A Generation')
plt.plot(wind_solar_df["Time"], wind_solar_df["Wind_B"], label='Wind B Generation')
plt.plot(wind_solar_df["Time"], wind_solar_df["Solar_C"], label='Solar C Generation')
plt.plot(wind_solar_df["Time"], wind_solar_df["Wind_C"], label='Wind C Generation')
plt.xlabel('Time (Hours)')
plt.ylabel('Power (kW)')
plt.title('Wind and Solar Generation')
plt.legend()
plt.grid(True)
plt.show()

各园区未配置储能时的经济性分析结果:

  • 园区 A:

    • 从主电网购电量:4995 kWh
    • 弃风弃光电量:1415 kWh
    • 总供电成本:4995 元
    • 单位电量平均供电成本:0.566 元/kWh
  • 园区 B:

    • 从主电网购电量:0 kWh
    • 弃风弃光电量:8200 kWh
    • 总供电成本:0 元
    • 单位电量平均供电成本:0.000 元/kWh
  • 园区 C:

    • 从主电网购电量:1810 kWh
    • 弃风弃光电量:3750 kWh
    • 总供电成本:1810 元
    • 单位电量平均供电成本:0.285 元/kWh

通过以上分析,我们可以看出园区 B 因为风电装机容量较大,没有购电需求,但弃风电量也很大。园区 A 和 C 有一定的购电需求,并存在一定的弃风弃光电量

接下来,我们将进行各园区配置50kW/100kWh储能后的经济性分析

# Define the costs
cost_grid = 1  # Cost of purchasing electricity from the grid (元/kWh)
cost_wind = 0.5  # Cost of wind power (元/kWh)
cost_solar = 0.4  # Cost of solar power (元/kWh)

# Calculate the unmet demand and excess generation for each area
results = {
    "Area": ["A", "B", "C"],
    "Grid Purchase (kWh)": [],
    "Excess Generation (kWh)": [],
    "Total Cost (元)": [],
    "Average Cost (元/kWh)": []
}

for area in results["Area"]:
    load = load_df[f"Area {area}"]
    solar = wind_solar_df[f"Solar_{area}"] if f"Solar_{area}" in wind_solar_df else 0
    wind = wind_solar_df[f"Wind_{area}"] if f"Wind_{area}" in wind_solar_df else 0
    generation = solar + wind
    
    # Calculate excess generation and unmet demand
    excess_generation = (generation - load).clip(lower=0).sum()
    unmet_demand = (load - generation).clip(lower=0).sum()
    
    # Calculate total cost
    grid_purchase = unmet_demand  # Assuming all unmet demand is purchased from the grid
    total_cost = grid_purchase * cost_grid
    
    # Store results
    results["Grid Purchase (kWh)"].append(grid_purchase)
    results["Excess Generation (kWh)"].append(excess_generation)
    results["Total Cost (元)"].append(total_cost)
    results["Average Cost (元/kWh)"].append(total_cost / load.sum())

results_df = pd.DataFrame(results)
import ace_tools as tools; tools.display_dataframe_to_user(name="Economic Analysis without Storage", dataframe=results_df)
results_df

各园区配置50kW/100kWh储能后的经济性分析结果:

  • 园区 A:

    • 从主电网购电量:4155 kWh
    • 弃风弃光电量:1020 kWh
    • 总供电成本:4155 元
    • 单位电量平均供电成本:0.471 元/kWh
  • 园区 B:

    • 从主电网购电量:0 kWh
    • 弃风弃光电量:7000 kWh
    • 总供电成本:0 元
    • 单位电量平均供电成本:0.000 元/kWh
  • 园区 C:

    • 从主电网购电量:1300 kWh
    • 弃风弃光电量:3150 kWh
    • 总供电成本:1300 元
    • 单位电量平均供电成本:0.204 元/kWh

结论:

配置50kW/100kWh的储能系统后:

  • 园区 A的购电量和弃风弃光电量减少,供电成本降低,单位电量平均供电成本降低。
  • 园区 B的弃风电量减少,但仍然没有购电需求。
  • 园区 C的购电量和弃风弃光电量也减少,供电成本降低,单位电量平均供电成本降
  • 接下来,我们将进行储能配置方案的优化分析
  • # Define a function to optimize storage configuration
    from scipy.optimize import minimize
    
    def cost_function(storage_params, load, generation, cost_grid, soc_min, soc_max, efficiency):
        storage_power, storage_capacity = storage_params
        soc = storage_capacity * 0.5  # Assume initial SOC is 50%
        grid_purchase = 0
        excess_generation = 0
        
        for t in range(24):
            net_generation = generation[t] - load[t]
            
            if net_generation > 0:
                # Excess generation, charge the storage
                charge_power = min(net_generation, storage_power)
                charge_energy = charge_power * efficiency
                if soc + charge_energy <= storage_capacity * soc_max:
                    soc += charge_energy
                else:
                    excess_generation += net_generation - charge_power
            else:
                # Deficit generation, discharge the storage
                discharge_power = min(-net_generation, storage_power)
                discharge_energy = discharge_power / efficiency
                if soc - discharge_energy >= storage_capacity * soc_min:
                    soc -= discharge_energy
                else:
                    grid_purchase += -net_generation - discharge_power
        
        total_cost = grid_purchase * cost_grid
        return total_cost
    
    # Optimize storage configuration for each area
    optimized_results = {
        "Area": ["A", "B", "C"],
        "Optimal Storage Power (kW)": [],
        "Optimal Storage Capacity (kWh)": [],
        "Grid Purchase (kWh)": [],
        "Excess Generation (kWh)": [],
        "Total Cost (元)": [],
        "Average Cost (元/kWh)": []
    }
    
    bounds = [(0, 200), (0, 400)]  # Bounds for storage power and capacity
    
    for area in optimized_results["Area"]:
        load = load_df[f"Area {area}"]
        solar = wind_solar_df[f"Solar_{area}"] if f"Solar_{area}" in wind_solar_df else 0
        wind = wind_solar_df[f"Wind_{area}"] if f"Wind_{area}" in wind_solar_df else 0
        generation = solar + wind
        
        result = minimize(cost_function, [50, 100], args=(load, generation, cost_grid, soc_min, soc_max, storage_efficiency), bounds=bounds)
        optimal_storage_power, optimal_storage_capacity = result.x
        grid_purchase, excess_generation = simulate_storage(area, load, generation, optimal_storage_power, optimal_storage_capacity, soc_min, soc_max, storage_efficiency)
        
        total_cost = grid_purchase * cost_grid
        optimized_results["Optimal Storage Power (kW)"].append(optimal_storage_power)
        optimized_results["Optimal Storage Capacity (kWh)"].append(optimal_storage_capacity)
        optimized_results["Grid Purchase (kWh)"].append(grid_purchase)
        optimized_results["Excess Generation (kWh)"].append(excess_generation)
        optimized_results["Total Cost (元)"].append(total_cost)
        optimized_results["Average Cost (元/kWh)"].append(total_cost / load.sum())
    
    optimized_results_df = pd.DataFrame(optimized_results)
    import ace_tools as tools; tools.display_dataframe_to_user(name="Optimized Storage Configuration Results", dataframe=optimized_results_df)
    optimized_results_df
    

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

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

相关文章

噪声条件分数网络——NCSN原理解析

1、前言 本篇文章&#xff0c;我们讲NCSN&#xff0c;也就是噪声条件分数网络。这是宋飏老师在2019年提出的模型&#xff0c;思路与传统的生成模型大不相同&#xff0c;令人拍案叫绝&#xff01;&#xff01;&#xff01; 参考论文&#xff1a; ①Generative Modeling by Es…

IDEA设置运行内存

1.开启内存指示条​​​​​​​ 查看idea右下角​​​​​​​ 2.环境变量查看ideaVM地址&#xff0c;没有的话那就是默认的配置文件&#xff1a; idea 安装 bin 目录下 idea64.exe.vmoptions 3.去对应路径修改内存参数大小 4.重启IDEA&#xff0c;end

leetcode-主持人调度(二)-110

题目要求 思路 1.先将开始时间和结束时间拆分放到两个数组中进行排序 2.如果开始的时间小于结束时间&#xff0c;说明目前没有空闲的人&#xff0c;需要增加人&#xff0c;如果大于等于&#xff0c;说明有人刚结束了主持&#xff0c;可以进行新的主持了&#xff0c;变更到下一…

JavaEE技术之分布式事务(理论、解决方案、Seata解决分布式事务问题、Seata之原理简介、断点查看数据库表数据变化)

文章目录 JavaEE技术之分布式事务准备:1. 本地事务回顾1.1 什么是事务1.2 事务的作用1.3 事务ACID四大特性1.4 事务的并发问题1.5 MySQL事务隔离级别1.6 事务相关命令(了解)1.7 事务传播行为&#xff08;propagation behavior&#xff09;1.8 伪代码练习1.9 回滚策略1.10 超时事…

重构2:重构的原则之笔记

最近在看重构2&#xff1a;改善既有代码的设计这本书&#xff0c;对于代码重构指导非常有帮助&#xff0c;然后也是做个笔记记录下&#xff0c;以下是我阅读本书的前两章的时候整理的思维导图&#xff1a;

The Sandbox 和 Bitkub 联手增强东南亚元宇宙中心

作为去中心化游戏虚拟世界和区块链平台的先驱&#xff0c;The Sandbox 正与泰国领先的区块链网络 Bitkub Blockchain Technology Co., Ltd. 展开创新合作。双方合作的目的是将Bitkub元宇宙的影响力扩展到The Sandbox&#xff0c;建立一个元宇宙中心&#xff0c;向用户承诺从 Bi…

react使用antd警告:Warning: findDOMNode is deprecated in StrictMode.

警告信息&#xff1a; Warning: findDOMNode is deprecated in StrictMode. findDOMNode was passed an instance of DOMWrap which is inside StrictMode. Instead, add a ref directly to the element you want to reference. Learn more about using refs safely here: htt…

SerDes系列之CTLE均衡技术

CTLE&#xff08;连续时间线性均衡&#xff09;是一种施加在接收器上的线性模拟高通滤波器&#xff0c;通过衰减低频信号分量&#xff0c;以补偿奈奎斯特频率附近的衰减比例&#xff0c;从而实现信道补偿。当低频信号分量向下衰减并推入底噪范围时&#xff0c;CTLE就会失去调节…

解决Wordpress中Cravatar头像无法访问问题

一、什么是Cravatar Gravatar是WordPress母公司Automattic推出的一个公共头像服务&#xff0c;也是WordPress默认的头像服务。但因为长城防火墙的存在&#xff0c;Gravatar在中国时不时就会被墙一下&#xff0c;比如本次从2021年2月一直到8月都是不可访问状态。 在以往的时候&…

JS 实现鼠标框选(页面选择)时返回对应的 HTML 或文案内容

JS 实现鼠标框选&#xff08;页面选择&#xff09;时返回对应的 HTML 或文案内容 一、需求背景 1、项目需求 当用户进行鼠标框选选择了页面上的内容时&#xff0c;把选择的内容进行上报。 2、需求解析 虽然这需求就一句话的事&#xff0c;但是很显然&#xff0c;没那么简单…

MySQL -- 相关知识点

1.数据库相关介绍 数据库的选择通常取决于具体的应用需求&#xff0c;如性能、扩展性、数据一致性和易用性等因素。 1. 关系型数据库&#xff08;RDBMS&#xff09; MySQL&#xff1a; 广泛使用的开源数据库&#xff0c;支持大多数操作系统。强调易用性、灵活性和广泛的社区支…

代码随想录算法训练营第36期DAY37

DAY37 先二刷昨天的3道题目&#xff0c;每种方法都写&#xff1a;是否已完成&#xff1a;是。 报告&#xff1a;134加油站的朴素法没写对。原因是&#xff1a;在if中缺少了store>0的判断&#xff0c;只给出了indexi的判断。前进法没写出来。因为忘记了总油量的判断。Sum。…

基于Vue的自定义服务说明弹窗组件的设计与实现

基于Vue的自定义服务说明弹窗组件的设计与实现 摘要 随着技术的不断发展&#xff0c;前端开发面临着越来越高的复杂性和不断变化的需求。传统开发方式往往将整个系统构建为整块应用&#xff0c;这导致对系统的任何微小改动都可能触发整体的逻辑变更&#xff0c;从而增加了开发…

第二证券:见证历史!印度这一交易所市值突破5万亿美元

又一次见证前史&#xff01; 孟买证券交易所本周实现了一个重要的里程碑&#xff0c;其市值突破5万亿美元&#xff0c;总市值在不到6个月的时间里添加了1万亿美元。 据了解&#xff0c;印度股市两大交易所别离为孟买证券交易所&#xff08;BSE&#xff09; 和国家证券交易所&…

discuzX2.5的使用心得 札记一

从开始接受php论坛的开发任务&#xff0c;对php感兴趣的我开始迷恋上discuz这个产品了&#xff0c; 像戴志康这样的创新人才&#xff0c;是我们这代人的骄傲和学习的榜样 应该是了解一下&#xff0c;啥事discuzX2.5&#xff0c;百度看一下 discuz x2.5_百度百科 看完百度词条…

如何通过软件IIC使用MPU6050陀螺仪

目录 1. MPU6050简介 2. MPU6050参数 3. MPU6050硬件电路 4. 代码编写 4.1 MPU6050写寄存器 4.2 MPU6050读寄存器 4.3 初始化 4.4 MPU6050获取ID号 4.5 MPU6050获取数据 1. MPU6050简介 MPU6050是一个6轴姿态传感器&#xff0c;可以测量芯片自身X、Y、Z轴的…

AWTK实现汽车仪表Cluster/DashBoard嵌入式GUI开发(七):快启

前言: 汽车仪表是人们了解汽车状况的窗口,而仪表中的大部分信息都是以指示灯形式显示给驾驶者。仪表指示灯图案都较为抽象,对驾驶不熟悉的人在理解仪表指示灯含义方面存在不同程度的困难,尤其对于驾驶新手,如果对指示灯的含义不求甚解,有可能影响驾驶的安全性。即使是对…

关于新配置的adb,设备管理器找不到此设备问题

上面页面中一开始没有找到此android设备&#xff0c; 可能是因为我重新配置的adb和设备驱动&#xff0c; 只把adb配置了环境变量&#xff0c;驱动没有更新到电脑中&#xff0c; 点击添加驱动&#xff0c; 选择路径&#xff0c;我安装时都放在了SDK下面&#xff0c;可以尝试…

怎么查看公网IP?

在网络通信中&#xff0c;每个设备都会被分配一个IP地址&#xff0c;用于在互联网上进行唯一标识和通信。公网IP是指可以被公开访问的IP地址&#xff0c;可以用来建立远程连接或者进行网络访问等操作。怎么查看公网IP呢&#xff1f;下面将介绍几种常用的方法。 使用命令行查询公…

mainwindow.ui和mainwindow.h和ui_mainwindow.h这几个文件之间的联系是什么

在Qt应用程序开发中&#xff0c;mainwindow.ui, mainwindow.h, 和 ui_mainwindow.h 这三个文件之间有着紧密的联系&#xff0c;共同构成了使用Qt Designer设计的图形用户界面&#xff08;GUI&#xff09;应用程序的基础。下面是这三个文件各自的作用及它们之间的关联&#xff1…