目录
聊聊暖通空调系统的优化控制方法
这篇文章简单分享一下暖通空调(HVAC)领域常常提到的”优化控制“这一概念指的是什么,它控制的是哪些参数?领域学者又是通过什么手段实现优化的?
-
优化控制的目的
简单来说,优化控制的目的就是通过调节系统的运行参数,使得能够满足末端用户负荷需求的同时最优化系统的性能,最常见的性能指标就是系统的运行能耗。以下图所示的中央空调系统为例,假设当前冷负荷需求为Q,那么如何控制中央空调系统各设备的运行参数(例如冷机、水泵的启停,或冷机的出水温度设定值),使得冷机、水泵、冷却塔的运行总能耗最小呢?在实际中,由于各设备能耗大多存在”此消彼长“的现象,比如提高冷冻水温度能够降低冷机能耗,但是会导致冷冻水泵能耗增加(以向末端提供足够的冷量)。因此需要引入优化控制的技术,对最优的运行参数进行确定。
-
优化控制的参数
暖通空调设备的整体工艺如下图, 暖通空调工作原理就是制冷剂在制冷机组的蒸发器中与冷冻水进扮热量的交换而汽化从而使冷冻水的温度降低然后被汽化的制冷剂在压缩机作用下变成高温高压气体流经制冷机组的冷凝器时被来自冷却塔的冷却水冷却又从气体变成了低温低压的液体同时被降温的冷冻水经冷冻水 水泵送到空气处理单元的热交换器中与混风进行冷热交换形成冷风源通过送风管道送入被调房间。 如此循环在夏季房间的热量就被冷水所带走在流经冷却塔 时释放到空气中。
它控制参数主要可以分为两类:设备启停参数和设备设定值参数。设备的启停往往出现在存在多台同类型设备的复杂系统中,此时需要针对不同的工况对设备的组合进行时序控制。对于优化控制而言,人们更多关心的是设备的设定值参数。不同暖通空调设备的控制参数不同,文献1中提出的控制参数分类方式,即分为高、中、低三个层次,如下表所示。
参数 | 冷机 | 冷冻/冷却水泵 | 冷却塔 | 空气处理机组 | 末端房间 |
---|---|---|---|---|---|
高 | 冷量 / 能耗 | 能耗 | 排热量 / 能耗 | 供冷量 / 能耗 | 房间温度设定值 |
中 | 冷冻水出水温度设定值 | 冷冻 / 冷却水流量设定值 | 冷却水出水温度设定值 | 送风温度 / 流量设定值 | 送风流量设定值 |
低 | 压缩机转速 | 变频器频率 | 风机转速 | 表冷阀开度 / 风机转速 | 阀门开度 |
最顶层的控制参数是设备提供/消耗/传递的能量,这类参数是目前综合能源领域最常见的优化调度变量,即源-荷-网-储不同设备之间应该传递多少能量。这类参数是调控的“终极目标”,当暖通空调系统需要参与需求侧响应或建筑集群调度时,往往上级协调商传递的就是此类参数。但是需要指出的是,如果只是单独考虑暖通空调系统的优化控制时,基本不会对能量参数进行寻优,这样既不利于实际调控,也没有什么实际意义。
中间层的控制参数是暖通空调系统中最重要、最常优化的一类控制参数。常见的控制参数包括:冷水机组的冷冻水出水温度设定值,冷冻/冷却水泵的冷冻/冷却水流量设定值,冷却塔的出水温度设定值、空气处理机组的送风温度和送风流量设定值等等。暖通空调系统依靠流体介质(水、空气等)进行能量传输,因此对流体介质的温度、流量、压力等进行控制,要比直接控制能量的流动有意义的多。
最底层的控制参数一般为执行器所需的参数,例如冷水机组内部压缩机的转速,水泵变频器的频率,冷却塔风机的转速,空气处理机组表冷阀的开度等等。在实际控制中,一般不会直接对这些控制参数进行优化,因为这些参数与设备能耗的关系式往往非常复杂,且执行器本身存在精度问题,计算得到的结果执行器难以精确跟随。这里稍有例外的是频率参数,目前也有相当一部分将频率等价为流量,并针对频率进行优化,这种假设在末端阻抗特性变化不大时有其合理性,能够简化模型,且变频器的控制精度相比阀门开度等精度较高,能够实现频率的精确控制。
从中可以看到,不同层级的参数呈现出串级控制的特性。如下图所示,以冷机为例,最顶层的控制变量是冷机的冷量,中间层的控制参数是冷机冷冻水出水温度设定值,底层的控制参数是压缩机的转速。在实际控制中,为了使冷机提供的冷量达到设定值,需要不断调节冷冻水出水温度,而为了调节冷冻水出水温度,需要不断调节冷机压缩机的转速。而不同层级之间的调控,一般通过PID控制实现。值得注意的是,对于一般的暖通空调系统优化控制任务,是不考虑最顶层的控制参数的(除了房间温度设定值外)。

-
优化控制的方式
和电力系统或综合能源系统的优化调度不同,暖通空调系统的优化控制更多侧重其实时的、在线的控制过程。前者在优化调度时,往往考虑多个时间片下的综合最优调度结果,例如日前调度往往以1h为间隔、24h为控制长度进行调控。对于暖通空调系统则不然,它往往只需要针对当前的工况情况做出当前时刻下的最优控制决策。例如,早上9点时,自控系统通过传感器对运行信息进行采集,输入PLC中进行计算,获得当前状态下的最优控制动作,并输出至对应的控制点位。而在下一个控制间隔(以15min为例),即早上9:15时,自控系统重复上述过程,输出新一轮的最优控制动作,如此反复。
-
优化控制的分类
优化控制的分类多种多样,早期领域学者喜欢采用硬控制(hard control)-软控制(soft control)-混合控制(hybrid control)的分类方法2 ,这种分类方法个人认为更加偏向于自控方法在发展过程中的一种中间产物。目前,优化控制方法的发展已经趋于稳定,我认为下图所示的分类方法更能够让初学者快速的入门领域:
建模
导入包文件
# 导入必要的包文件
import time
import pandas as pd
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt
from sklearn.neural_network import MLPRegressor
from matplotlib import font_manager as fm, rcParams
plt.rcParams['font.sans-serif']=['Heiti TC'] #显示中文标签
plt.rcParams['axes.unicode_minus']=False #这两行需要手动设置
读取数据
# 读取数据
df = pd.read_csv('len_data/filtered_data.csv')
df['时间'] = pd.to_datetime(df['时间'])
#添加外源因素 经纬度 楼面积 商业属性等
df['建筑面积'] = 68000.00
df.head
# 计算相关性矩阵
correlation_matrix = df.iloc[:, 1:].corr()
# 可视化相关性矩阵
plt.figure(figsize=(12, 10))
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', linewidths=0.5)
plt.title('各参数相关性矩阵')
plt.show()
初版回归模型
非负最小二乘回归 (Non-Negative Least Squares Regression, NNLS)
为了确保预测值不为负数,你可以选择使用正回归模型或非负性约束的回归模型。其中,sklearn 提供的 非负最小二乘回归 (Non-Negative Least Squares Regression, NNLS) 是一种常用的选择。你也可以使用 神经网络回归模型,并通过自定义激活函数确保输出为正值。
以下是使用 神经网络回归模型 并确保输出不为负值的完整步骤:
使用 MLPRegressor 构建神经网络回归模型 我们使用 MLPRegressor 并通过 ReLU激活函数 确保输出为非负值。ReLU (Rectified Linear Unit) 是一种常用的激活函数,其输出非负(即 max(0, x))。
# 构建神经网络回归模型,使用 ReLU 激活函数
model = MLPRegressor(hidden_layer_sizes=(100, 50), activation='relu', random_state=42, max_iter=1000)
# 训练模型
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
# 将预测值中的负数变为0
y_pred = np.maximum(0, y_pred)
# 评估模型
mse = mean_squared_error(y_test, y_pred)
print(f"Mean Squared Error: {mse}")
# 可视化真实值与预测值之间的差异
plt.figure(figsize=(15, 10))
for i, target in enumerate(targets):
plt.subplot(4, 1, i+1)
plt.plot(y_test[target].values, label='True')
plt.plot(y_pred[:, i], label='Predicted')
plt.title(target)
plt.legend()
plt.tight_layout()
plt.show()
结果效果一般呢🤔,可以发现预测结果虽然可以大致还原出各组件真实功率变化的趋势,但是差别还是比较大
part2 更新的回归网络
树模型回归
XGBoost 回归:改进的梯度提升树模型,性能优异,常用于比赛和实际应用中。
import xgboost as xgb
model = xgb.XGBRegressor(n_estimators=100, learning_rate=0.1, random_state=42)
# 训练模型
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
# 将预测值中的负数变为0
y_pred = np.maximum(0, y_pred)
# 评估模型
mse = mean_squared_error(y_test, y_pred)
print(f"Mean Squared Error: {mse}")
# 可视化真实值与预测值之间的差异
plt.figure(figsize=(15, 10))
for i, target in enumerate(targets):
plt.subplot(4, 1, i+1)
plt.plot(y_test[target].values, label='True')
plt.plot(y_pred[:, i], label='Predicted')
plt.title(target)
plt.legend()
plt.tight_layout()
plt.show()
# 可视化模型中的决策树(以第0棵树为例)
plt.figure(figsize=(6, 5), dpi=600)
xgb.plot_tree(model, num_trees=0)
# 调整布局以避免裁剪内容
plt.tight_layout()
plt.savefig('XGBRegressor.png', dpi=600)
plt.show()
# 可视化特征重要性
plt.figure(figsize=(30, 10))
xgb.plot_importance(model)
# 调整布局以避免裁剪内容
plt.tight_layout()
plt.savefig('XGBRegressor_importance.png')
plt.show()
舒服了😌,效果好了一些,以下为原因分析(来自GPT🚄):
树回归(如决策树、随机森林、XGBoost等)在处理回归任务时通常比线性回归更好,尤其是在数据复杂且关系非线性的情况下。这背后的主要原因如下:
1. 处理非线性关系
- 线性回归:线性回归假设目标变量和特征之间的关系是线性的。因此,它对数据中的非线性模式无法很好地建模。如果数据中的特征和目标变量之间的关系不是简单的线性关系,线性回归的表现会较差。
- 树回归:树回归方法(如决策树、随机森林等)不依赖于线性假设。它们可以自动捕捉特征和目标变量之间的复杂非线性关系,通过划分特征空间来找到数据中的非线性模式。这使得树回归在非线性回归任务中更加灵活和高效。
2. 对特征的处理能力
- 线性回归:线性回归对数据的要求较高,通常需要标准化和处理多重共线性。此外,线性回归的效果依赖于特征的正确选择或特征工程。
- 树回归:树回归方法对特征的要求较少,不需要特征标准化或去除多重共线性。它们能够自动选择重要的特征,并根据数据中的复杂性调整模型。因此,树回归可以处理含有冗余或无关特征的数据,表现更加鲁棒。
3. 处理交互效应
- 线性回归:线性回归无法自动捕捉特征之间的交互效应。虽然可以通过手动增加交互项来扩展模型,但在高维数据中,手动添加交互项非常复杂。
- 树回归:树回归方法能够自动捕捉特征之间的交互效应。例如,决策树通过逐步划分特征空间,隐式地建模特征之间的交互关系。这使得树回归能够更好地理解特征之间的复杂交互。
4. 鲁棒性和灵活性
- 线性回归:线性回归对异常值较为敏感,因为它通过最小化均方误差(MSE)来找到最佳拟合线,而异常值可能对模型造成较大影响。
- 树回归:树回归对异常值相对不敏感,尤其是在使用随机森林或XGBoost等集成模型时。因为这些模型通过多个决策树的平均或加权组合,可以减少单个异常值对整体预测的影响。此外,树回归方法在高维度和大规模数据上也更加灵活。
5. 可解释性
- 线性回归:线性回归模型通常比较简单,且每个特征的系数能够直接解释特征对目标变量的线性影响。然而,当特征之间存在复杂的非线性关系时,线性模型的可解释性可能变得误导性。
- 树回归:尽管单个决策树的可解释性较好(通过树结构可以清楚地看到决策路径),但集成方法如随机森林和XGBoost会引入额外的复杂性,模型的可解释性有所下降。然而,这些模型可以提供特征重要性(Feature Importance),帮助我们理解哪些特征对模型预测最为重要。
6. 过拟合与泛化能力
- 线性回归:线性回归较少出现过拟合问题,但其表现依赖于数据的线性假设。如果数据中存在复杂的模式,线性回归模型的泛化能力可能较差。
- 树回归:单个决策树容易过拟合,但像随机森林、XGBoost等集成方法通过训练多个树并对结果进行加权平均,能够有效降低过拟合的风险,增强泛化能力。
7. 处理高维数据的能力
- 线性回归:线性回归在特征数量较大时,尤其是当特征数量接近或超过样本数量时,可能表现不佳(容易陷入过拟合问题),并且需要正则化(如Lasso或Ridge回归)来约束模型复杂度。
- 树回归:树回归,尤其是集成模型,如随机森林和XGBoost,在处理高维数据时表现更好。它们通过随机选择特征或样本构建模型,能够有效应对特征维度高、样本量大的数据。
总结:
树回归方法比线性回归在处理复杂、非线性数据时表现更好,因为它可以自动捕捉非线性关系和特征交互,且对数据的假设较少、更加灵活。线性回归尽管简单易用,但在数据复杂度较高时,往往无法提供准确的预测。而树回归(尤其是随机森林和XGBoost)则能够适应这些复杂数据,表现出更好的预测效果。
未完待续