课程首页· 代码速查· 第 2 课· 第 3 课 / 共 8 课

Lesson 03 · 基线

物理基线:建筑的"真实方程"与规则控制

在追 BrainBox 的 Neural ODE 之前,先问一句——这栋楼的热演化,物理上到底服从什么方程?

BrainBox 反复强调"physics-based principles"。这句话不是营销词——它指向一个事实:建筑的温度演化本质上是一个常微分方程(ODE)。Neural ODE 之所以在 HVAC 上好用,正是因为它的结构和这个物理 ODE 同形。

这一课给你两件东西:① 这个物理 ODE 的具体形式(热 RC 网络模型),它是第 5 课 PINN 正则化的"物理项"来源;② 一个规则 / PID 基线控制器,作为后面 Neural ODE 预测和 RL 控制的对标基准——没有基准,你不知道自己进步了多少。

一、建筑热演化是一个 ODE

把一个房间想成一个"热容"(电容 C)接一堵墙(电阻 R)到室外。这就是电阻-电容类比:电压 ↔ 温度,电流 ↔ 热流,电荷 ↔ 热能。最简单的单区域模型叫 1R1C

       Q_solar (太阳辐射热)    Q_int (人员/设备内热)    Q_hvac (空调供冷/热)
              │                       │                       │
              ▼                       ▼                       ▼
           ┌──────────────────────────────────────────────┐
           │   T_z (区域空气温度)      电容 C_z (热容)       │
           └──────────────────────────────────────────────┘
              │
             R_env (墙体/窗户/渗风的等效热阻)
              │
              ▼
           T_out (室外温度)

对区域空气列能量守恒,得到:

1R1C 区域热 ODE复制
C_z · dT_z/dt = (T_out − T_z)/R_env  +  Q_solar  +  Q_int  +  Q_hvac

读法:区域温度的变化率,等于"从室外渗进来的热 + 太阳晒进来的热 + 人员设备发的热 + 空调供的热"之和,再除以热容。这就是 dz/dt = f(z, t) 的形态——和 Neural ODE 一模一样。

二、动手做:用这个 ODE 自己仿真一个房间

不依赖 EnergyPlus,先用几十行代码把这个 ODE 数值积分一遍——建立"我对物理有手感"。用 scipy.integrate.solve_ivp

动手做 3.1 · 用 1R1C 仿真一个房间的温度演化(约 15 分钟)
python · rc_sim.py复制
import numpy as np
from scipy.integrate import solve_ivp
import matplotlib.pyplot as plt

# —— 物理参数(一间隔热一般的办公室,量级参考)——
C_z   = 1.0e6   # 区域热容 J/K
R_env = 5.0e-3  # 围护结构等效热阻 K/W

def zone_rhs(t, T_z, T_out, Q_solar, Q_int, Q_hvac):
    # 1R1C 右端:dT_z/dt
    return ((T_out(t) - T_z) / R_env
            + Q_solar(t) + Q_int(t) + Q_hvac(t)) / C_z

# —— 外部扰动(室外温度 + 热源),随时间变 ——
T_out   = lambda t: 20.0 + 10.0 * np.sin(2*np.pi*t/24)   # 日变化 10~30°C
Q_solar = lambda t: 2000.0 * max(0.0, np.sin(2*np.pi*(t-6)/24))  # 白天有日照
Q_int   = lambda t: 1000.0 if 9 <= (t % 24) < 18 else 200.0  # 工作时间有人

# —— 基线控制:简单制冷规则(温度>24°C 就供冷)——
T_set, Q_cool_max = 24.0, -5000.0   # 设定 24°C,最大制冷 -5000W
def Q_hvac(t, T_z=24.0):
    if T_z > T_set + 0.5: return Q_cool_max   # 过热→满冷
    if T_z < T_set - 0.5: return 0.0            # 过冷→停
    return 0.0

# 注意:Q_hvac 依赖 T_z(反馈控制),用闭包把当前温度喂进去
def rhs_closed(t, y):
    T_z = y[0]
    qh = Q_hvac(t, T_z)
    return [zone_rhs(t, T_z, T_out, Q_solar, Q_int, lambda t: qh)]

sol = solve_ivp(rhs_closed, [0, 48], [22.0], t_eval=np.linspace(0,48,200))

# 画图
plt.plot(sol.t, sol.y[0], label="T_zone")
plt.axhline(24.0, ls="--", color="r", label="设定 24°C")
plt.xlabel("时间 (h)"); plt.ylabel("温度 (°C)"); plt.legend(); plt.show()
预期结果:一条曲线,白天被室外高温 + 日照往上推,制冷规则把它压在 24°C 附近抖动(带死区 ±0.5°C 的"砰-砰"控制特征)。你能直观看到热惯性:关掉制冷后温度不会立刻降,而是滞后一段——这正是 BrainBox 要靠"前瞻预测"来优化的物理根源。

这个 ODE 就是第 5 课 PINN 损失里 zone_rhs(...) 那一项的来源。先在这儿把它摸熟。

三、规则 / PID 基线:你必须打过的"假想敌"

BrainBox 自称比传统控制节能 25%。那"传统控制"是什么?就是今天 90% 楼宇在跑的东西:规则控制(死区 / 时间表)和 PID 控制。你要复刻 BrainBox,就得先有一个可量化对比的基线,否则"节能 25%"无从谈起。

规则控制(上一步已经写了)

上面动手做里的 Q_hvac(t, T_z) 就是一个最简规则控制器:温度高于设定+死区就满功率制冷,低于设定-死区就停。业内叫砰-砰控制(bang-bang)或带死区的开关控制。简单、鲁棒,但没有前瞻——它只在温度已经越界后才反应。

PID 控制:行业事实标准

PID = 比例 + 积分 + 微分。它根据"当前偏差 + 累积偏差 + 偏差变化率"算一个连续控制量,比砰-砰平滑得多,是 BMS 里 AHU / 冷冻水回路的事实标准。

python · 一个最小 PID(可直接接进 Sinergym 当基线)复制
class PID:
    def __init__(self, kp=2000.0, ki=200.0, kd=50.0, setpoint=24.0):
        self.kp, self.ki, self.kd = kp, ki, kd
        self.setpoint = setpoint
        self._i, self._prev_err = 0.0, 0.0

    def step(self, T_z, dt=900.0):   # dt=900s = 15min 控制周期
        err = self.setpoint - T_z              # 负=太热,需要制冷
        self._i += err * dt
        d_err = (err - self._prev_err) / dt
        self._prev_err = err
        u = self.kp*err + self.ki*self._i + self.kd*d_err
        return np.clip(u, -5000.0, 0.0)   # 限到制冷区间 [-5000,0] W

四、白箱 vs 黑箱 vs BrainBox 的灰箱

这三者不是非此即彼,而是光谱。BrainBox 的聪明之处在于站在中间:

三种建模哲学
路线模型形态优点缺点
白箱(传统 MPC)全物理方程 + 实测参数可解释、外推稳需暖通专家,每栋楼重建模
黑箱(纯深度学习)LSTM/MLP,只啃数据无需物理,部署快要海量数据,物理上可能"胡说"
灰箱(BrainBox)Neural ODE 结构对齐物理 + 物理损失正则数据少、物理一致实现复杂、训练慢

关键点:Neural ODE 的结构本身就是一种物理先验——它假设状态演化服从某个连续时间 ODE,这正好匹配热力学。再加 PINN 把已知的热方程当损失项,就进一步压缩了"需要数据来学的部分"。这就是 BrainBox "integrating physics-based principles with black box deep learning" 的真正含义,也是它自称"少数据、更准"的机制根源。

本课收获

1. 建筑温度演化服从一个热 ODE(1R1C:C_z·dT/dt = (T_out−T_z)/R + Q_solar + Q_int + Q_hvac),形态上和 Neural ODE 同构——这是后者好用的物理根基。

2. 你有了一个可跑的物理仿真(几十行 scipy),和两个可量化基线(规则控制 + PID)。后面所有方法的节能率,都对标这俩。

3. BrainBox 是灰箱:结构对齐物理(Neural ODE)+ 损失注入物理(PINN)。这正是第 4、5 课的主线。

小测一下

BrainBox 自称"少数据、更准",机制上最可能的来源是什么?

有疑问?尽管问。比如:"1R1C 的参数 C_z、R_env 怎么从真实建筑估出来?" 或 "PID 参数 kp/ki/kd 怎么调?" 或 "为什么不用 EnergyPlus 自己当基线,还要手写 RC?"——都能展开。
参考来源: