当前位置: 首页 > news >正文

项目实战-基于大数据分析的暖通系统改造模型【感谢Akila公司以及学院的支持】

Akila企业那边给我们的课题是改良暖通系统的SCOP

一.机器学习

我的第一个想法就是通过大量数据进行机器学习,从而找到任意环境条件下的机器最优参数

简单来说就是:

通过 K 均值算法对数据进行聚类分析后,结合 Apriori 算法挖掘高 COP 相关
的操作参数,最后利用 DNN 模型模拟优化效果,实现了在任意天气状况和制冷
量条件下,理论上找到设备 COP 最优参数的目标。这种多算法结合的框架,为
复杂系统的参数优化提供了参考

然而企业那边更加偏向于数据清理、数据处理方向,于是我们将机器学习部分拟为附录中的建议。

二.数据处理

再次感谢Akila企业为我们提供了许多场景的数据。

场景1.无锡某商场

首先我们查询资料明确了我们需要优化的目标(kaggle是一个很好的资料查询、机器学习竞赛的网站)

那么我们就需要从企业的表格中提取我们所需要的数据

在这个案例中企业给我们了进出口的水温差、反馈频率、用电量等等数据

  

 我基于python的pandas库,对照这些数据表的格式,写了一个数据处理脚本,源码如下

import pandas as pd
from datetime import timedeltachiller_temp_template = "{}号冷机冷冻水供回水温度和冷却水供回水温度和冷机功率百分比.xlsx"
pump_freq_file = "冷冻水二次泵频率.xlsx"
electricity_file = "2024逐日用电量_包含冷机_冷冻水一次泵_冷却水一次泵_冷冻水二次泵_冷却塔.xlsx"rated_flow = [950, 950, 950, 700, 700]  #额定流量
rated_freq = 50  #额定频率
water_cp = 4.2  #比热
water_density = 1000  #密度pump_freq = pd.read_excel(pump_freq_file)
pump_freq["时间"] = pd.to_datetime(pump_freq["时间"])electricity = pd.read_excel(electricity_file)
electricity["Date"] = pd.to_datetime(electricity["Date"], format="%m/%d")
electricity["Date"] = electricity["Date"].apply(lambda x: x.replace(year=2024))k_total = 0 #初始化for i in range(1, 6):#遍历5台机器chiller_temp_file = chiller_temp_template.format(i)chiller_temp = pd.read_excel(chiller_temp_file)chiller_temp["时间"] = pd.to_datetime(chiller_temp["时间"])supply_temp_col = f"冷源系统.冷机{i}.冷冻水侧.温度.供水温度(℃)"return_temp_col = f"冷源系统.冷机{i}.冷冻水侧.温度.回水温度(℃)"freq_col = f"冷源系统.冷冻水二次泵{i}.流量.频率反馈(赫兹)"# 合并温度和频率表,按时间对齐merged_data = pd.merge_asof(chiller_temp.sort_values("时间"),pump_freq[["时间", freq_col]].sort_values("时间"),on="时间")merged_data["流量"] = (rated_flow[i - 1] * merged_data[freq_col] / rated_freq)merged_data["温差"] = (merged_data[return_temp_col] - merged_data[supply_temp_col])merged_data["用冷量"] = (merged_data["流量"] * merged_data["温差"])k_total += merged_data["用冷量"].sum()total_cooling_energy = water_cp * water_density * k_total # kWh 转 kJ
total_electricity = electricity["Consumption 2024"].sum() * 3600  # kWh -> kJscop = total_cooling_energy / total_electricityprint(f"总用冷量: {total_cooling_energy:.2f} kJ")
print(f"总用电量: {total_electricity:.2f} kJ")
print(f"COP: {scop:.2f}")

计算结果得到2024年该场景的COP是2.10 

然后我们进行了硬件、软件上的优化(不太方便透露)

新COP约为3.4

场景2.上海市闵行区某研发中心 

首先我们还是先确定目标的计算公式

Akila给了我们该场景的温湿度数据,以及各个房间的二氧化碳浓度

 于是我们借助pandas和numpy库进行了数据清理和数据处理

import pandas as pd
import numpy as npvol_area=pd.read_excel('Vol_Area.xlsx')
enfin_df=pd.read_excel('enfin_df.xlsx')vol_area.drop(['area'], axis=1, inplace=True) 
vol_arearho = 1.2  # 空气密度 (kg/m³)
Cp = 1005  # 空气比热容 (J/kg·K)
L = 2.5e6  # 水的汽化潜热 (J/kg)
k_concrete = 7.5  # 混凝土导热系数 (W/m·K)
k_glass = 90  # 玻璃导热系数 (W/m·K)
delta_t =3600   # 时间间隔 (s)def e_sat(T):"""计算给定温度 T (°C) 下的饱和蒸气压 e_sat(T)公式:e_sat(T) = 6.11 * 10^(7.5 * T / (237.7 + T))"""return 6.11 * np.power(10, (7.5 * T) / (237.7 + T))def e_act(T, RH):"""计算给定温度 T (°C) 和相对湿度 RH (%) 下的实际蒸气压 e_act公式:e_act = (RH / 100) * e_sat(T)"""return (RH / 100) * e_sat(T)# 3. 计算通风量 dot_V
def calc_dot_V(delta_CO2, V_room, delta_t):"""计算通风量 dot_V公式: dot_V = (delta_CO2 * V_room) / delta_t"""return (delta_CO2 * V_room) / delta_tQ_accumulated=0'''
for j in range(len(enfin_df)-1): #每个小时for i in range(23): #每个房间T_in=enfin_df.loc[[j],[f'inner_temp{i+1}']].values.item()T_out=enfin_df.loc[[j],['outer_temp']].values.item()RH_in=enfin_df.loc[[j],[f'inner_humidity{i+1}']].values.item()RH_out=enfin_df.loc[[j],['outer_humidity']].values.item()delta_CO2_pre=enfin_df.loc[[j],[f'inner_co2{i+1}']].values.item()delta_CO2_post=enfin_df.loc[[j],[f'inner_co2{i+2}']].valuesA_concrete=vol_area.loc[[i],['area_concrete']].values.item()A_glass=vol_area.loc[[i],['area_glass']].values.item()delta_CO2 =  delta_CO2_post- delta_CO2_pre  # 室内一小时前后二氧化碳浓度差 (ppm)V_room = vol_area.loc[[i], ['vol']].values.item()  # 室内体积 (m³)# select 的时候,要注意最终得到1x1的df,和一个数值 是不一样的# 计算实际蒸气压e_act_in = e_act(T_in, RH_in)e_act_out = e_act(T_out, RH_out)# 计算通风量dot_V = calc_dot_V(delta_CO2, V_room, delta_t)  # m³/s# 计算建筑外壳传热冷量损失(只与温差有关)K=k_concrete*A_concrete+k_glass*A_glassQ_heat = K * (T_in - T_out)# 计算蒸发冷却损失(基于蒸气压差)Q_evap = dot_V * rho * L * (e_act_in - e_act_out)# 计算通风冷量损失(只与温差有关)Q_vent = dot_V * rho * Cp * (T_in - T_out)# 计算总冷量损失Q = Q_heat + Q_evap + Q_ventQ_accumulated+=Q
'''for j in range(len(enfin_df)-1): #每个小时for i in range(23): #每个房间T_in = enfin_df.at[j,f'inner_temp{i+1}']T_out = enfin_df.at[j,'outer_temp']RH_in = enfin_df.at[j,f'inner_humidity{i+1}']RH_out = enfin_df.at[j,'outer_humidity']delta_CO2_pre = enfin_df.at[j,f'inner_co2{i+1}']delta_CO2_post = enfin_df.at[j,f'inner_co2{i+2}']A_concrete = vol_area.at[i,'area_concrete']A_glass = vol_area.at[i,'area_glass']delta_CO2 = delta_CO2_post - delta_CO2_pre  # 室内一小时前后二氧化碳浓度差 (ppm)V_room = vol_area.at[i,'vol'] # 室内体积 (m³)'''# Debugging printsprint(f"Room {i+1}, Hour {j+1}")print(f"T_in: {T_in}, T_out: {T_out}")print(f"RH_in: {RH_in}, RH_out: {RH_out}")print(f"delta_CO2: {delta_CO2}, V_room: {V_room}")print(f"A_concrete: {A_concrete}, A_glass: {A_glass}")'''# 计算实际蒸气压e_act_in = e_act(T_in, RH_in)e_act_out = e_act(T_out, RH_out)# 计算通风量dot_V = calc_dot_V(delta_CO2, V_room, delta_t)  # m³/s# 计算建筑外壳传热冷量损失(只与温差有关)K = k_concrete * A_concrete + k_glass * A_glassQ_heat = K * (T_in - T_out)# 计算蒸发冷却损失(基于蒸气压差)Q_evap = dot_V * rho * L * (e_act_in - e_act_out)# 计算通风冷量损失(只与温差有关)Q_vent = dot_V * rho * Cp * (T_in - T_out)# 计算总冷量损失Q = Q_heat + Q_evap + Q_ventQ_accumulated += Q# Debugging printsprint(f"Q_heat: {Q_heat}, Q_evap: {Q_evap}, Q_vent: {Q_vent}, Q: {Q}")print(Q_accumulated)

最终得到Q值为79474551923.88536 J

(在数据处理期间层一度没有输出结果,一开始我以为是代码错误,经过对数据的查找后发现有几处数据缺失,于是加上了特判后就可以跑了,所以耐心和细心是很重要滴) 

三.心得

这次项目做下来最终的几点感受如下:

1.要学会团队沟通和协作。一个人猛干往往无法实现大规模项目的成功,需要及时地进行如腾讯会议等方式的周期性的研讨,交流各模块的需求和难点,才能“众志成城,金石为开”

2.资源收集+数据处理。在接触这个项目时我们完全没有这方面的知识储备,刚开始完全懵懵的,但是我们稳定军心,进行资源收集和数据处理后慢慢开始上道,后面也算是熟悉了这块领域的一些知识

http://www.xdnf.cn/news/149509.html

相关文章:

  • Lobechat使用WolframAlpha MCP工具减少LLM幻觉
  • Java 设计模式心法之第23篇 - 状态 (State) - 让对象的行为随状态优雅切换
  • 【蓝桥杯选拔赛真题104】Scratch回文数 第十五届蓝桥杯scratch图形化编程 少儿编程创意编程选拔赛真题解析
  • IPOF(Input-Process-Output-Feedback)方法学简介
  • XMOS空间音频——在任何设备上都能提供3D沉浸式空间音频且实现更安全地聆听
  • 【计算机视觉】CV实践项目- 基于PaddleSeg的遥感建筑变化检测全解析:从U-Net 3+原理到工程实践
  • numpy.random.normal与numpy.random.randn的区别与联系
  • 雷电模拟器怎么更改IP地址
  • 使用 Python 项目管理工具 uv 快速创建 MCP 服务(Cherry Studio、Trae 添加 MCP 服务)
  • Jetpack Compose 基础组件学习2.1:Surface
  • stack __ queue(栈和队列)
  • 分布式事务 两阶段提交协议(2PC的原理、挑战)
  • 大模型微调 - 自注意力机制
  • 【统计学习】递归最小二乘算法与奇异值分解
  • #什么是爬虫?——从技术原理到现实应用的全面解析 VI
  • Vue回调函数中的this
  • 【CF】Day43——Codeforces Round 906 (Div. 2) E1
  • Libconfig 修改配置文件里的某个节点
  • Linux 系统用户管理与权限掌控:从基础到精通
  • 《深入理解计算机系统》阅读笔记之第三章 程序的机器级表示
  • Python判断语句-语法:if,if else,if elif else,嵌套,if else语句扁平式写法,案例
  • LatentSync - 字节联合北交大开源的端到端唇形同步框架-附整合包
  • Cannot read properties of null (reading ‘classList‘)
  • 人工智能的100个关键词系统学习计划
  • Trae 实测:AI 助力前端开发,替代工具还远吗?
  • mysql 导入很慢,如何解决
  • 猿人学题库13题—动态css字体加密 记录
  • JavaScript性能优化实战(5):数据结构与算法性能优化
  • Python爬取天猫畅销榜接口的详细教程
  • Python基础语法:字符串格式化(占位拼接,精度控制,format()函数,快速格式化,表达式格式化)