J7-02 模型降阶(ROM)与控制导向建模
课程代码 J7-02 · 板块 J 仿真分析 CAE / J7 数字化仿真方法 时长 约 3.5 小时(6 讲 + 1 次降阶建模实操) 适合对象 高级仿真工程师、控制算法工程师;MPC / 状态估计方向必修,其余方向选修 前置 J1-01 1D 热管理仿真导论(KULI/AMESim/GT/Flowmaster) 1D 热管理仿真导论 或 J1-04 整车热管理系统级联合仿真 整车热管理系统级联合仿真(二者取一,需具备一维系统仿真基础);控制侧只需了解状态空间与 PID 概念,入口见 K3-01 整车热管理控制策略总览与模式管理,PID / 前馈 / 增益调度见 K3-05 PID/前馈/增益调度控制实战 本讲义定位 讲师授课蓝本 / 学员自学讲义,是 J7-02 大纲的完整展开版
引言:模型算得准不等于算得完——控制器只肯等你几个毫秒
这门课要处理的矛盾一句话就能说完:高精度模型算得准,但跑不动实时;而控制器要的是在一个控制周期里能算完的模型。真正卡住人的从来不是这句话,而是它后面的三个具体场合。场合一:一个已经过相关性验证的详细热泵 1D 模型,单个工况仿真要以秒计的机时,而 MPC 每个控制周期要在毫秒量级里把未来若干步预测完、再把优化问题解出来——差的不是「再快一点」,是若干个量级档位,换台好机器、开多核、打开编译优化,一个都填不平。场合二:模型在离线仿真里跑得好好的,一放进 HIL 实时机就报超时,于是有人去把步长放大,超时报错消失了、曲线也悄悄变形了,看上去像修好了。场合三:降阶模型交出去,控制工程师把它当成「更快的详细模型」用——在它上面扫参数、定阈值、标控制器增益,装到车上一试,边界工况全不对。这三个场合分别对应本课的三条主线:为什么必须降阶、降阶该怎么做才不算蒙、以及降出来的东西该怎么交、怎么用。
本课交出四项判断力,每一项都对应一个当场可验的交付物。其一,判一个应用该用哪一类降阶方法(RC 网络 / 状态空间 / 查表 / 传递函数)——交付物是一张写清「谁用它、在什么步长上跑、要它回答哪几个响应量」的三行说明,外加由这三行推出的方法选择与理由,⛔ 而不是一张「哪种方法更好」的排名表。其二,把高精度模型的输入输出行为拟合成状态空间或传递函数——交付物是一组 (A, B, C_y, D) 或一个传递函数,且必须连同它的激励设计一起交:激励了哪些频段、扫过了哪些工况。其三,评估降阶模型相对高精度模型或试验的精度损失——交付物是分稳态与动态两本账的回归比对,动态那一栏至少含时间常数、增益与延迟三项,⛔ 不许只报一个稳态偏差就结案。其四,核算实时性——交付物是一条 t_solve ≤ Δt_target 的核算,而其中 t_solve 取的是最坏情况单步耗时,⛔ 不是平均值。
全课六讲,顺序就是一个人真正做一次降阶的顺序。第 1 讲把「为什么要降阶」讲成一道判断题:详细模型的求解耗时与控制器步长之间那道鸿沟到底是什么形状,降阶为什么不等于「简化建模」,降阶模型会被用在哪几类场合(MPC、HIL、标定前仿真、嵌入式估计器),以及降阶必然带来的信息损失里,哪些动态是被平均掉的。第 2 讲走物理简化这条路线:热容-热阻网络(承接 A1-06 热阻网络法与集总参数建模入门 的集总参数建模)、把分布式模型按空间粗化成分区集总模型、按主导时间常数取舍——保留主导的、舍弃快速衰减的次要动态,以及这条路线最大的长处(物理可解释)与最大的门槛(哪层细节能砍要靠经验判断)。第 3 讲走数据驱动这条路线:从阶跃与扫频响应辨识传递函数或状态空间、子空间辨识与频域拟合各自的适用场景、POD/DMD 这类投影降阶怎么从高维 CFD 场里提主导模态,以及一条贯穿全讲的判据——训练数据覆盖到哪,模型的可用边界就到哪。第 4 讲讲降阶模型的形式与控制器接口:状态空间为什么是 MPC 最常用的落点、查表/Map 型降阶适合什么场景(稳态多、动态弱)、一个能进产品的降阶模型必须同时支持哪三件事(可离散化、可在线更新、边界可扩展),以及与 FMI/FMU 这类标准化模型交换格式的对接。第 5 讲讲精度验证:怎么对高精度模型与试验做回归比对,以及怎么把「适用边界声明与失效工况」写成一份别人能照着判的东西。第 6 讲讲实时性核算与嵌入式落地裁剪:实时因子怎么算才算数,以及在算力与内存都受限的目标控制器上还要再裁掉什么。其后的典型案例把六讲的判据合成一条链——详细模型跑不进 MPC,降成低阶状态空间,做精度回归、做实时核算,够格了才接入闭环(衔接 K3-06 模型预测控制(MPC)在热管理中的应用);动手做则用一个换热回路把上面四项判断力各验一次。
钉子①(全课主线):降阶不是「把模型改简单」,是拿一个已经验证过的高精度模型当数据源,按目标控制器的问题定向提取行为。这两件事的差别不在措辞,在动作。「简化建模」的动作是在原模型上做减法——删元件、并管路、粗化网格、放大步长,减到跑得动为止;这条路的致命处不是不准,是没有账:被减掉的是什么、精度掉在哪一段、掉了多少,全都答不上来。「降阶」的动作是先定问题,再取行为:先把上面那三行写死(谁用、什么步长、答什么响应量),再用激励-响应的方式从源模型或试验里把这几个响应量对应的动态提取出来;剩下的部分是被有意识丢掉的,丢掉了什么写进边界声明。⇒ 由此得到本课的第一道判据:那三行写不出来,任何降阶方法的选择都无从判对错——因为「好」这个字在这里没有定义,只有「对这个用途够不够」。⇒ 它还直接推出一条硬纪律:本课不给任何「哪种降阶方法更好」的排名,四类方法的适用条件分别写在第 2~4 讲,⛔ 正文与图上都不会出现方法之间的优劣打分。
钉子②(与钉子① 配套):降阶模型和它的适用边界声明是同一件交付物的两半,只交模型不交边界,等于把一个在射程外没有定义的东西当通用模型发出去。降阶模型的精度是有射程的:物理简化型的射程由「哪层细节被砍掉」定,辨识型的射程由激励覆盖过的频段与工况范围定。射程之外发生的不是「误差大一点」这种连续退化,而是没有定义——一个在温和工况上辨识出来的线性模型,跑到相变、阀切换、压缩机启停这类强非线性段时,它给出的曲线仍然光滑、仍然收敛、仍然像个正经结果,只是与它本该代表的那个系统无关了。⚠ 这正是它比「算不出来」更危险的地方:失效不表现为报错,表现为一条好看的曲线。⇒ 由此推出,本课要交的不是一个模型文件,而是三张凭据:精度凭据(对源模型/试验的回归比对,分稳态与动态两本账)、边界凭据(覆盖了哪些工况与频段、哪些明确不覆盖、越界时的预期表现是什么)、实时凭据(在目标平台上实测的最坏单步耗时与目标步长的关系)。⛔ 三张缺一张,就不许进闭环。⇒ 再推出一条对下游的纪律:降阶模型不得被当作真值去标定控制器参数。它在闭环里的正当身份只有两种——控制器内部的预测器/观测器,或闭环仿真里的受控对象代理;这两种身份下它的误差都还在被反馈不断修正。一旦拿它当真值扫参数、定阈值,误差就不再被修正,而是固化进控制器参数里,再叠加源模型与真车之间那一层误差,两层同向时会一起放大。
★ 本课最容易被读反的一条,是「降阶就是拿精度换速度」这句话。它本身没错,错在读者会把「精度」默认成一个标量,于是做出这样一个具体动作:把降阶模型与源模型跑同一组稳态工况、比终值,偏差落在可接受范围内就签字放行;随后在 HIL 或实车上遇到超调、振荡、跟不上,回头去调控制器(重整定 PID、加滤波、放慢升温速率),而问题根本不在控制器那一侧。正读法是:稳态精度与动态精度是两本互不相通的账。这一点在 RC 热网络的方程上可以当场看出来——C_th·dT/dt = (T_amb − T)/R_th + Q,当 dT/dt = 0 时,含 C_th 的那一整项直接消失。⇒ 所以「把几个热容合并成一个」这个最典型的降阶动作,对稳态解一点影响都没有,却直接改写了系统的时间常数;「砍掉快速衰减的次要动态」同理,快模态在稳态时早已衰减完,它在稳态对比表上完全隐形。(空间离散粗化是唯一两侧都动的动作,而即便是它,动稳态的那部分容易被看见,动动态的那部分不容易。)而控制器要用的恰恰是被改写的那一侧:MPC 的预测靠时间常数,前馈的时机靠延迟,稳定裕度靠相位。⇒ 说得更硬一点:一个稳态完全对得上的降阶模型,可以在动态上错到让闭环不稳定,而这个错误在任何一张稳态对比表上都看不出来。⇒ 反钉子的可执行版本因此是:验收表里必须有动态那一栏,且动态栏至少含时间常数、增益与延迟三项;这三项对不上时先改模型,⛔ 不许先调控制器。⚠ 与它同源的第二个错误动作留到第 6 讲点破——拿平均单步耗时去比控制步长:实时性是最坏情况问题,平均值过关而最坏情况超时,表现出来是偶发的超时,而偶发比恒定超时更难查。
本课的符号约定先摆在这里,因为本课会同时用状态空间与 RC 热网络两套记法,它们有两个符号天然会正面相撞:
| 符号 | 本讲义中的含义 | 说明 |
|---|---|---|
| A, B, C_y, D | 线性状态空间四元组:dx/dt = Ax + Bu,y = C_y·x + Du | ⛔ 输出矩阵一律写 C_y,⛔ 本讲义不使用裸写的 C |
| C_th | 热容(J/K),出现在 C_th·dT/dt = (T_amb − T)/R_th + Q | 与上面的输出矩阵是两个完全不同的量,故加下标区分 |
| R_th | 热阻(K/W) | — |
| T | 温度(℃ 或 K,出现处标注) | ⛔ 采样周期不写 T |
| T_s | 辨识数据的采样周期(s) | ⛔ 与离散化步长 Δt(4.4)、目标控制步长 Δt_target 分列,三者不得混用 |
| Δt_target | 目标控制器或 HIL 平台要求的步长(s) | — |
| t_solve | 降阶模型的单步求解耗时(s) | ⚠ 本课凡出现 t_solve 处,一律指最坏情况单步耗时;强调最坏值时也写 t_solve,max(1.1、6.1),两者同义 |
| x, u, y | 状态、输入、输出向量 | — |
| φ_i, a_i(t) | POD 类降阶的第 i 阶模态与它的时变系数:x(t) ≈ Σ a_i(t)·φ_i | — |
| n_r | 降阶模型的阶数/阶次(保留的状态数或模态数) | ⛔ 全课不裸写 n 表示阶数;4.2 谈 MPC 问题规模时写 n_x(状态维数,= n_r)与 n_u(输入维数) |
本课对数字有三条固定处理,先声明在这里,免得读到正文时以为是漏写。第一类,物性与标准值:给值时写清来源级别。第二类,行业典型区间:只给区间或量级档位并标「典型」,⛔ 端点不得当成可承诺值。本课只用到两个量级档位——离线详细模型的单工况机时落在秒到几十秒的量级(典型),控制器与 HIL 的执行周期落在毫秒的量级(典型);⚠ 这两个档位只用来说明「差距是结构性的、不是调优能填平的」,⛔ 不得当作任何具体模型或平台的预期值,也⛔ 不得据此反算「需要提速多少倍」。第三类,平台相关量一律不给数,本课有四组:① 你自己模型的求解耗时、降阶后的单步耗时与实时因子——取决于模型规模、求解器设置、硬件与编译选项,⛔ 不给数,须在目标平台上实测;② 该降到几阶——取决于系统的主导时间常数分布与控制器带宽,⛔ 不给数,须逐个应用定;③ 精度验收阈值(偏差允许到多少)——取决于该控制器对模型误差的敏感度与所留安全裕度,⛔ 不给数,须由项目定;④ 嵌入式的算力与内存预算——取决于目标控制器与其上其余功能的占用,⛔ 不给数,须由项目定。⚠ 尤其是第③组:降阶模型的精度门限属于本项目自己要定的门限,⛔ 禁止抄上一代平台或别的项目——同一个偏差在 PID 回路里可能完全无所谓,在 MPC 的预测时域里会被逐步累积。
本课有三处采用「先画全集、再逐项核对」的做法,这三份清单都是本课按工程逻辑归纳的,⛔ 不是任何标准、手册或行业公认的既有分类,引用时请连同这句一起带走:全集(一)降阶方法四类——物理简化 / 系统辨识 / 投影类 / 查表-Map,第 2~4 讲逐类展开;全集(二)降阶模型的使用场景四类——MPC 内部预测模型 / HIL 里的受控对象 / 标定前的快速扫工况 / 嵌入式状态估计器,第 1 讲给出,它同时是钉子① 那三行说明里「谁用它」的取值范围;全集(三)降阶造成的信息损失类型——第 1 讲提出,第 5 讲用它来组织验证表的行。⚠ 基于神经网络的代理模型不在全集(一)里,这不表示它不可用或不该用,它归 J7-05 机器学习/AI 代理模型在热管理中的应用,是分工不是排除;同理,凡本课全集里没列到的方法,一律按「本课不讲」读,⛔ 不按「不存在」读。
本课涉及两份外部规范,都只写去向、不写条款内容。FMI/FMU(Modelica Association 的模型交换与协同仿真标准)——第 4 讲只讲「把降阶模型打成可交换格式交出去」这件事在格式层面要注意什么,⛔ 不写接口字段、版本差异与一致性要求的任何具体条款。ISO 26262(道路车辆功能安全)——本课只声明「降阶模型若要进入闭环控制,这件事本身须按目标功能对应的要求走」,⛔ 不写等级判定规则、不写条款内容、不给任何限值。⚠ 两份的版次与发布年份以现行发布目录为准,引用前须核,⛔ 本讲义不把它们写成单一版本号。⚠ 另有一条射程纪律:功能安全的要求与降阶模型的精度判据是两条互不相干的判据链,⛔ 不得互相推导——「过了精度回归」推不出「满足功能安全要求」,「定级低」也推不出「精度可以放松」。
最后把本课的边界摆出来,写清楚是为了让你知道哪些东西不在这里找。高精度模型自己怎么算得对属 J1 与 J2 板块:本课的起点是一个已经过相关性验证的源模型,而这个前提由 J7-01 仿真—试验相关性验证(Correlation) 供给——⛔ 拿一个没验过的模型去降阶,降出来的只是「另一个错模型的快版本」,且它跑得更快、被用得更多,错得更广。相关性验证的完整流程(验证计划怎么定、指标怎么选、「标定」与「验证」怎么分家)=J7-01 仿真—试验相关性验证(Correlation),本课只做「降阶模型对源模型/试验」这一层回归比对,并沿用它的口径纪律。MPC 算法本身(预测时域、代价函数、约束处理、在线求解)=K3-06 模型预测控制(MPC)在热管理中的应用,本课只交付接口这一侧——MPC 要什么形式的模型、对它有哪些要求。数字孪生的在线运行、与实车传感器对齐、在线自我修正=J7-04 整车热管理数字孪生与实时模型,本课只到「离线降出来的模型能不能在目标步长上跑」这一层。机器学习与神经网络代理模型=J7-05 机器学习/AI 代理模型在热管理中的应用。DOE 与多目标优化=J7-03 基于仿真的 DOE 与多目标优化。不确定度的量化传播与稳健设计=J7-06 仿真不确定度量化(UQ)与稳健/可靠性设计:从确定性单点到带分布的裕度,本课只到「适用边界声明」这一层,⛔ 不做分布传播。跨组织交付时的接口规格书、可运行边界声明的文档形态、IP 剥离程度与脱敏要求=J7-07 仿真任务的输入、交付与模型资产管理,本课第 4 讲只讲格式对接本身。一维模型的数值内核(DAE 指标与代数环、容差、一致初值、守恒自检)=J7-08 一维系统模型的数值内核与「跑飞」排查:DAE/代数环、步长与容差、一致初值与守恒自检;本课会碰到「离散化与采样周期跟被控对象时间常数匹配不匹配」,但只到这一层,⛔ 不给容差与求解器设置的取值建议。集总参数 RC 建模的入门(三种传热怎么换成热阻、网络怎么搭)=A1-06 热阻网络法与集总参数建模入门,本课承接它,⛔ 不重讲。系统级联合仿真与模型交换格式在整车集成里的用法=J1-04 整车热管理系统级联合仿真。试验数据的测量本身(测点选择、传感器动态、误差来源)=L7-01 测量技术:热电偶/红外/PIV/流量测量,本课只声明一条:用作降阶输入或验证基准的试验数据,其取值口径必须与仿真侧对齐。本课交付的是判据、方法的适用条件与那三张凭据——把这套判据学扎实,上面这些课你会用同一副眼光去读。
第 1 讲 为什么要降阶:三道门递进,只有第三道通向闭环
这一讲不讲任何一种降阶方法。它要先把一个几乎每个项目都会答错方向的问题掰开:一个模型「跑不动实时」,到底是慢了一点,还是根本不是一类东西。绝大多数人是按前者理解的——于是去换更快的机器、去开多核、去把网格削一削、把容差放宽一点,一轮一轮下去,那个模型始终接不进控制器。这条路径从第一步就走岔了:离线跑得动与能进闭环之间隔着的不是倍数,是判据本身换了一个量。本讲先把三个常被混成一个「快不快」的耗时口径分开,并由此立起三道递进的门(1.1);再把「降阶」与「简化建模」这两件常被当成同义词的事分开,顺带交代降阶为什么必须分开记两本误差账(1.2);然后摊开降阶模型的四类使用场景,说清「实时」在这四类里其实是四个不同的约束(1.3);接着把降阶必然带来的信息损失点名,并指出其中有一类提高阶数也回不来(1.4);最后把本讲收成一条可以当场检查的判据(1.5)。后面五讲的每一个选择——用哪种降阶方法、拟合到什么形式、精度怎么验、阶数砍到哪里——都建在这一讲划出的这几条线上。
1.1 「跑不动实时」不是慢一点:三个耗时口径分开,那道真正的门才看得见
是什么(全集(一):三个耗时口径)。实务里说一个模型「快」或「慢」,说的往往不是同一个量。把它们摊开是三个,而且各自回答一个不同的问题。⚠ 这三个口径是本课按「这个数回答什么问题」归纳的,⛔ 不是任何标准或手册里现成的分类,引用时请连同这句一起带走。
| 记号 | 定义 | 单位 | 它回答的问题 |
|---|---|---|---|
| t_wall | 一次算例从开始到出结果的总挂钟耗时 | s | 一天能跑几个工况 |
| RTF_avg | 一段仿真的总计算耗时 ÷ 它覆盖的物理时间 | 无量纲 | 整段下来跟不跟得上真实时间 |
| t_solve | 模型推进一步的求解耗时,一律取最坏值(引言符号表;本表下面为与 RTF_avg 对称,强调处也写 t_solve,max,两者同义) | s | 每一步是否都在预算内 |
| Δt_target | 目标控制任务周期或 HIL 定步长 | s | 预算本身是多少 |
| RTF_max | t_solve,max ÷ Δt_target | 无量纲 | 最坏那一步跟不跟得上 |
⚠ 「实时因子」这四个字在实务里两义并存——有人指整段平均那一个,有人指最坏单步那一个,而两者可以相差很多。本课的做法是:沿用 K4-03 MIL/SIL/HIL 验证流程 的定义(计算耗时 ÷ 对应的物理时间),但正文中禁止裸写「实时因子 RTF」,一律带下标写成 RTF_avg 或 RTF_max。⛔ 见到别处出现不带下标的 RTF,先回问它取的是哪一种,不许直接收下。
由这三个口径推出三道递进的门:
- 门一「跑得完」:t_wall 落在可接受范围内。过了这道门,模型可以用于离线批量仿真。
- 门二「平均跟得上」:RTF_avg ≤ 1。过了这道门,模型可以用于软实时场景——可视化、云端侧的状态跟随、非闭环的回放分析。
- 门三「每一步都跟得上」:t_solve,max ≤ Δt_target,即 RTF_max ≤ 1(还要留余量,见 1.3)。只有过了这道门,才谈得上进闭环。
⚠ 三道门是递进的:过了门三必然过门二、过门二必然过门一,反过来一步都不成立。而项目评审上被报出来的,通常只有前两道。
为什么门二与门三不是一回事。一个变步长隐式求解器在平静段可以把步长拉得很长,于是整段算下来 RTF_avg 很小、看起来很富余;一旦遇到阀切换、模式切换或某个刚性段,它会把步长压下去并在同一步里多迭代几轮,那一步的耗时与整段的平均值可以完全不在一个层级上。离线时这只是「某处慢了一下」,没有人会注意;在闭环里它是丢帧——控制器那一拍拿不到新的模型输出,只能沿用上一拍的旧值或走超时降级分支。⇒ 这正是为什么进闭环的模型几乎一律采用定步长、禁迭代、禁事件重启的形态(这一档在建模层级谱上的位置承 J1-01 1D 热管理仿真导论(KULI/AMESim/GT/Flowmaster),HIL 侧的落地在 K4-03 MIL/SIL/HIL 验证流程)。⚠ 顺带说明一件事:把变步长换成定步长,本身就已经是一次降阶——它用「每一步都算得完」换掉了「误差自适应」,而被换掉的那部分误差从此不受控,只能靠步长选得足够小去压。
工程量级。
- 目标步长 Δt_target:⚠ 行业典型带——车载热管理控制任务的周期典型落在 10⁻²~10⁻¹ s 量级,HIL 被控对象模型的定步长典型落在 10⁻³~10⁻² s 量级。⛔ 两个端点都不得当成可承诺值;具体值由项目的控制器任务表与 HIL 平台配置定(控制侧前指 K3-05 PID/前馈/增益调度控制实战,HIL 侧前指 K4-03 MIL/SIL/HIL 验证流程)。
- 高精度模型(三维 CFD、共轭传热、详细一维系统模型)的 t_wall、RTF_avg 与 t_solve,max:⛔ 这三个都是平台相关量——它们取决于模型规模、网格量或控制体数、物性调用方式、求解器设置、机器配置与许可数量,本课不给数,须在本团队的机器与本模型上实测。⛔ 本课也不写「详细模型比控制步长慢 N 倍」这类倍数——那要拿一个自己不肯给值的量去做比较。本课只给做法:把这三个数当成模型的交付属性去测、去记,而不是等到接 HIL 或接控制器时才第一次遇到它(模型资产该留哪些要素前指 J7-07 仿真任务的输入、交付与模型资产管理)。⚠ 顺带把话说明白:这道沟在三维 CFD 与详细一维模型上都会出现,但根源不同——前者主要是空间自由度把单步耗时撑大,后者主要是刚性与每步的迭代轮数把最坏单步撑大。⇒ 两者该测的是同一组数,⛔ 但不要拿一种模型上的实测结论去推另一种。
易错点。
- 拿 RTF_avg 论证「这个模型能进闭环」。⛔ 闭环看的是 RTF_max。⚠ 而报告里通常只出现前者——因为它是求解器日志直接给的,后者要专门去测;⇒ 「没报 RTF_max」与「RTF_max 合格」在报告上长得一模一样,看到只报了平均值,先问有没有测过最坏值。
- 指望换更快的机器或多开几个核把这道沟填掉。一个强耦合的隐式系统在单步内的并行度本来就低;更要紧的是,并行改善的是吞吐,不改变单步里那条最长的依赖链——而门三卡的正是这条链。⚠ 硬件到底填不填得掉,取决于这道沟有多宽,而这个宽度必须先实测(就是上面那三个数),⛔ 不能靠感觉断定「加硬件能解决」。⚠ 还有一层:门三之外另有一条形式的门(见 1.3),而形式不对根本不是速度问题——加硬件对它的作用是零。
- 把 t_wall 缩短当成「实时化」有了进展。一次算例跑得快与每一步跟得上是两件事,前者变好推不出后者变好——把输出存疏一点、把仿真时长截短,t_wall 立刻下来,而 t_solve,max 一动不动。
1.2 降阶不是简化建模:一个从物理往下砍,一个对着已验证的参照提取行为
是什么。「把模型做小」有两条完全不同的路,它们的分界不在「模型变小了」,在自变量是什么:
- 简化建模:自变量是「我判断哪些物理可以忽略」。它从物理往下砍——不建两相、不算辐射、把管路当绝热、把三个热容并成一个。产物是一个新的模型,它没有参照,精度只能重新验一次。
- 降阶(ROM):自变量是「用多少阶、用什么结构,去逼近一个已经验证过的参照的输入—输出行为」。产物自带一个可量化的量——它相对那个参照的偏差。
⇒ 一句话记住这条分界:简化建模改的是假设,降阶改的是表示。假设改了,模型回答的可能已经不是同一个问题;表示改了,回答的还是同一个问题,只是精度与成本换了位置。
由这条分界推出降阶成立的三个必要条件(⚠ 本课归纳,⛔ 不是任何标准的既有条款):
- 有一个已验证的参照——高精度模型或试验数据,且它的相关性状态与可信域是写出来的(承 J7-01 仿真—试验相关性验证(Correlation));
- 有明确的输入—输出与工况约定——哪些量是输入 u、哪些是输出 y、覆盖哪个工况范围;
- 有精度判据与适用边界声明,两者一起交付(怎么写在第 5 讲)。
⛔ 缺任一条,产出的东西不叫降阶模型:它并没有比源模型更可信,只是更快。
为什么「已验证」这三个字一个都不能省——两本误差账。记 ε_源 为参照相对物理真值的偏差、ε_ROM 为降阶模型相对参照的偏差,则降阶模型相对真值的偏差满足
ε_总 ≤ ε_源 + ε_ROM
- ε_ROM 是本课能管、能量化的那一本——它的判据在第 5 讲;
- ε_源 是另一本,归 J7-01 仿真—试验相关性验证(Correlation),本课不给它的验收阈值。
⇒ 若参照从没做过相关性验证,ε_源 是未知而不是零,ε_总 于是同样未知。此时把「ROM 与源模型吻合得很好」报成「模型精度很好」,是把一本没打开的账当成了零。⚠ 这条不等式给出的是上界(两项最坏同号叠加),⛔ 不得反过来拿它论证「误差至少有多大」——两项也可能部分抵消。
工程量级。⛔ ε_源 与 ε_ROM 的允收值都是项目/平台相关量——它们取决于这个模型要支撑什么决策、决策错了的代价有多大,本课不给数。本课只给结构:两本账必须分开记、分开报,报一个合计数等于把责任糊在一起。
易错点。
- 拿一个没做过相关性验证的详细模型直接降阶,再用「ROM 与它的偏差」当作精度上报。那只证明了 ROM 学像了源模型,没有证明任何一个像真车。这是本课与 J7-01 仿真—试验相关性验证(Correlation) 的接口所在:先做完那边,才有资格做这边。
- 把「降阶」做成「删掉几个部件」。删部件删掉的是拓扑上的一条守恒方程,产物不是低阶近似,是另一个系统——它在源模型原本对得上的工况里也可能对不上,而且这种偏差不随阶数变化,加回阶数救不回来。
- 反过来,以为参照只能是模型。⛔ 不是:参照可以直接是试验数据(阶跃或扫频响应),走系统辨识那条路,在第 3 讲。此时上面的两本账仍然成立,只是 ε_源 换成了试验侧的不确定度。
1.3 「实时」在四类场景里是四个不同的约束——先定场景,再选方法
是什么(全集(二):降阶模型的四类使用场景)。⚠ 这四类是本课按「谁在什么时候调用这个模型、调用它时受什么约束」归纳的,⛔ 不是任何既有清单。四类各自的硬约束落在四个不同的量上:
- MPC 在线预测(K3-06 模型预测控制(MPC)在热管理中的应用)——模型在一个控制周期之内被反复调用:预测时域每推进一步调用一次,优化每迭代一轮又要把整个时域重来一遍。⇒ 硬约束落在「一个周期内的总调用次数」上,单次求值的预算比控制步长本身小得多。且形式受限:要落进二次规划,模型得能写成(分段)线性、可离散化的状态空间。
- HIL 被控对象模型(K4-03 MIL/SIL/HIL 验证流程)——定步长、禁迭代、禁事件重启。⇒ 硬约束落在「最坏单步耗时与执行时间的确定性」上。⚠ 一个平均很快但偶尔超时的模型,在 HIL 上表现为偶发抖动,而这种抖动与控制器自身的缺陷在现象上几乎无法区分——排查成本极高。
- 标定前的批量仿真与虚拟寻优(K6-13 虚拟标定:把标定动作前移到 MIL/SIL/HIL、自动寻优与回归标定)——不要求硬实时,要的是吞吐:优化器会把模型调用成千上万次。⇒ 硬约束落在「总吞吐与边界外行为」上。⚠ 这一类对形式要求最松,对外推区要求却最高:寻优一定会把模型推到辨识范围之外,而模型在那里必须以可被识别的方式失效,⛔ 不能安静地返回一个好看的假解——否则优化器会径直朝那个假解跑过去。
- 嵌入式在线估计器(K3-10 热管理在线状态与负荷估计:观测器整定、软测量置信度与退出条件)——要求模型有状态,且被估状态可观;阶数直接决定协方差矩阵的维度与算力开销。⇒ 硬约束落在「阶数与可观性」上,且形式必须是能直接搭观测器的 (A, B, C_y, D)。⛔ 可观性怎么判(秩与条件数)不在本课射程内,归 K3-10 热管理在线状态与负荷估计:观测器整定、软测量置信度与退出条件;本课只声明它是一道先于精度的门——不可观时精度再高也估不出来。
为什么必须先定场景再选方法。把上面四条并排看就清楚了:四类的约束分别落在调用次数、最坏单步、总吞吐与外推行为、阶数与可观性四个量上。⛔ 用一句「够快就行」把它们合并,必然在其中一类上做错,而且做错的形态各不相同——一个是接不进去,一个是偶发抖动,一个是被优化器带到假解上,一个是根本估不出来。
工程量级(含一处可以在纸上复算的预算式)。本课的实时性判据式是 t_solve ≤ Δt_target(完整用法与核算流程在第 6 讲)。它在 HIL 场景里可以直接用,而在 MPC 场景里要收紧:
t_solve ≤ β · Δt_target / (N_p · k)
其中 N_p 是预测时域的步数、k 是一个控制周期内优化迭代的轮数,β = 扣除其余任务与裕度之后还剩下周期的多大一份(无量纲,β < 1;口径与 6.2、关键公式详解 ④ 完全一致,全课只有这一套)。⚠ 请读准 β 的方向:它是留给模型的那一份,⛔ 不是「要留给其它任务与调度抖动的那一份」——两种读法互补(0.5 与 0.5 之外),代进下面这条不等式会得到互为倒错的预算。⛔ 方向读反的后果是把一个本来合格的降阶方案判成不合格,然后去砍阶数,而按 1.4 与 6.2 的两头夹判据,砍掉的很可能正是该保的那几个主导模态。取一组教学假设值——⛔ 它们不对应任何平台、任何控制器、任何标定结果,⛔ 禁止照抄取用,存在的唯一理由是让这一步能被你在纸上复算一遍:Δt_target = 100 ms、N_p = 20、k = 5、β = 0.5,代入得
t_solve ≤ 0.5 × 100 ms ÷ (20 × 5) = 0.5 ms
⇒ 由此看清一件事:「毫秒级」这三个字在四类场景里指的不是同一个量。在 HIL 场景里它指定步长本身;在 MPC 场景里它指定步长再除以 N_p·k。⛔ 把「毫秒级」当成一个统一指标去横向比较各家降阶方法,是本讲要拦下的第一个动作。⚠ 上面的 0.5 ms 是这一组教学假设值的产物,⛔ 不是任何场景的典型值——N_p、k、β 换一组,结论就换一组。⛔ N_p、k、β 与 Δt_target 的实际取值都是平台相关量,本课不给数,须按项目的控制器规格与优化器配置确定。
易错点。
- 拿为 HIL 做的降阶模型直接给 MPC 用。HIL 只要求「一步跑得完」,MPC 还要求「能写成二次规划、能求导」。形式不对时算力再富余也接不进去——这是两条互相独立的门,⛔ 不得从一条推出另一条。
- 拿为寻优做的代理直接进闭环。寻优场景既不考核确定性执行时间,也不考核最坏单步——它在这两条上从来没有被测过,「一直用得好好的」不构成任何证据。
- 只问「要多少毫秒」,不问「一个周期里被调用几次」。在 MPC 场景里这两个问题的答案相差 N_p·k 倍,而后一个数通常没有人主动给你——它藏在控制算法的配置里,要自己去问。
1.4 降阶必然丢东西:四类信息损失里,有一类提高阶数也回不来
是什么(全集(三):四类信息损失)。⚠ 本课归纳,⛔ 不是任何手册里现成的分类。
- 空间自由度——分布式模型被并成集总或分区节点,一个区里的温度在空间上被平均掉,横截面上的分布与局部峰值随之消失。
- 快模态——按时间常数排序做截断时,先被截掉的总是最快的那一族;⇒ 那些动态不是变慢了,是被时间上的平均吃掉了——模型只剩下慢包络。
- 非线性与工况相关的增益——在一个工作点附近线性化,增益与时间常数随工况的变化被冻结成常数。
- 离散事件与切换——阀换向、模式切换、除霜进出、压缩机启停,在源模型里是事件,在降阶模型里常被抹成一段连续过渡。
⚠ 四类里 ① 与其余三类性质完全不同:②③④ 是精度损失——提高阶数、扩大辨识工况范围、改成分段模型,都能把它往回补一些;而 ① 是变量根本不存在(承 J1-01 1D 热管理仿真导论(KULI/AMESim/GT/Flowmaster) 那条判据:模型里没有承载那个答案的自由度时,把离散加密到多少都不会长出来)。⇒ 这两类账不得互相推导:⛔ 不能因为「我做到了 8 阶、拟合优度很高」就以为这个模型能报出热点温度——热点在它的变量表里压根没有对应项。
为什么每一类都必须被点名,而不是等它被发现。因为四类损失没有一类会以报错的形式暴露——降阶模型照样收敛、照样返回一条光滑好看的曲线。其中两类的后果尤其隐蔽:
- 快模态被截掉,同时被截掉的还有它们在高频段贡献的相位滞后。⇒ 拿降阶模型算出来的相位裕度,比真实系统乐观;按它整定到「刚好够裕度」的控制器,上车后裕度不足。⚠ 这条的方向不是经验规律,是由「被截掉的项是滞后项」定的——把那些模态加回来,它们只会把相位继续往滞后方向推。
- 事件被抹平之后,切换瞬间的过冲与欠冲整段消失。⇒ 用这样的模型做策略验证,会系统性地漏掉一整类问题:那类问题只在切换的那几百毫秒里出现,而模型在那几百毫秒里画的是一条平滑过渡。这正是 K4-03 MIL/SIL/HIL 验证流程 点名过的那一类风险——被控对象模型被过度降阶,台架上测不出该测的东西。
⇒ 本课由此定下一条交付要求:降阶模型的交付物里必须带一张「本模型明确不承载的量」声明表,与适用边界声明并列。⚠ 这张声明表是本课归纳的交付要素,⛔ 不是任何标准的既有条款;它该写哪几栏、怎么与精度判据配套,在第 5 讲。
工程量级。⛔ 「截到几阶够用」是平台相关量——它取决于目标带宽、需要保留哪几个主导时间常数、以及实时预算给得起多少,本课不给数。本课只给两条判据的方向:阶数的下界由目标带宽与要保留的主导时间常数定(第 2、3 讲),上界由实时预算定(第 6 讲)。⇒ 阶数是被两头夹出来的,⛔ 既不是「越高越好」,也不是「越低越好」;两头夹不出可行区间时,要改的是场景约束或参照模型,⛔ 不是硬砍一刀了事。
易错点。
- 用稳态误差判降阶做得好不好。稳态是最先被拟合上的——直流增益只有一个数,几乎任何方法都能对上;而控制器最需要的恰恰是动态。时间常数与超调对不上、稳态却分毫不差,是降阶最常见的失败形态,而它在稳态比对表上完全看不出来。
- 把「这几个工况对得很好」当成模型可用。辨识数据没有覆盖到的工况区就是外推区,而外推区的行为不受任何拟合优度指标约束——那些指标是在训练/辨识数据上算出来的,它们对没见过的地方一个字都没说(这条在第 3 讲展开成可执行的边界声明做法)。
- 把丢掉的东西写进报告正文,却不写进交付物。写在报告第十几页、而不写在模型接口旁边,下一个用它的人看不到——他会拿这个模型去问它答不出的问题,而模型会一声不吭地给他一个数。
1.5 本讲落点:能进闭环的降阶模型是三件套,缺一件就只是一个更快的模型
是什么。把前四节合起来,可以写成一条当场就能检查的判据:一个可以进闭环的降阶模型不是一个文件,是三件套——
- 模型本体:形式明确(状态空间 / 热容-热阻网络 / 查表 / 传递函数)、可离散化、输入输出接口定义清楚(第 2~4 讲);
- 可信边界声明:覆盖的工况范围,加上 1.4 那张「本模型明确不承载的量」声明表(第 5 讲);
- 实时性核算结论:目标步长 Δt_target、一个周期内的调用次数、以及实测的最坏单步耗时(第 6 讲)。
⛔ 缺任何一件,它都只是「一个更快的模型」,⛔ 不构成可以交付进闭环的东西。⚠ 「三件套」是本课归纳的交付要求,⛔ 不是任何标准或工具链的既有规定。
为什么把它立在第 1 讲而不是最后。因为这三件的产出时机是交错的:边界声明要在选辨识工况时就开始记,实时性核算要在定形式与阶数时就参与决策。等到全部做完再补,得到的多半是一份事后追认的说明——它描述了已经发生的事,却没有约束过任何一个决策。
⚠ 这里有一条本课最容易被读反的判断,先把正读法摆出来:降阶不是「在精度上做一次妥协」。两者的地位不对等——实时性是硬约束,精度是在硬约束之内被优化的量。超时不是「差了一点」,是那一拍控制器没有输入;而精度差一点,是一个可以被误差预算接住、也可以被后续标定补偿的量。
读者会做错的那个具体动作:按「与源模型的拟合优度最高」去选阶数与模型结构,把实时性核算排到最后一步。等到接 HIL 或接控制器时才发现跑不动,于是回头砍阶数——而这一刀砍在哪里,此时已经没有判据可依了,因为当初选结构时根本没有把实时预算算进去,砍掉的很可能正是该保的那几个主导模态。
⇒ 正确顺序:先由场景定出 Δt_target 与一个周期内的调用次数 ⇒ 由它定出阶数与形式的上界 ⇒ 在这个上界之内,比较各种降阶方法能达到的精度。第 6 讲会把这条顺序连同实时性核算一起再走一遍,并交代上界与下界夹不出可行区间时该往哪里退。
后面还有 5 讲正文 · 关键公式 · 案例拆解 · 常见误区 · 动手做