J7-03 基于仿真的 DOE 与多目标优化
课程代码 J7-03 · 板块 J 仿真分析 CAE / 数字化仿真方法 时长 约 3.5 小时(6 讲) 前置 J1 或 J2/J3 任一 CAE 建模基础;体系外前置(需自备):基础统计学(方差、相关性) 本讲义定位 讲师授课蓝本 / 学员自学讲义,是 J7-03 大纲的完整展开版
引言:交出去的不该是一个设计值,是一条前沿和一份可信边界
设计评审桌上摆着一份优化报告:几百个采样点、一条画得很干净的收敛曲线,最后一页给出一组设计参数——迎风面积多大、芯体多厚、风扇转速的标称设定定在哪。这组数会被抄进需求分解表,会被冻结,会被拿去开模。而这份报告最要紧的那句话,通常没有写在任何一页上:这组数不是从真实系统上量出来的,是从一个模型的模型上搜出来的。
从真实系统到那组数,中间隔着三次身份转换:真实系统 →(CAE 建模 + 相关性验证)→ 仿真模型 →(DOE 采样 + 拟合)→ 代理模型 →(优化器搜索)→「最优点」。第一次转换不归本课,它是 J7-01 仿真—试验相关性验证(Correlation) 的活;本课接手的是后两次。每一次转换都掉一层可信度,而掉下去的那几层不会在报告里留下任何痕迹——页数是正常的,图是正常的,数字也是正常的。
钉子①:优化器交出来的「最优点」是关于代理模型的陈述,不是关于真实系统的陈述。顺着这句话往下推,本课的交付物就永远不是一个设计值,而是三件套:① 一条 Pareto 前沿,连同它成立的设计箱与工况;② 这条前沿所依赖的那个代理模型的可信输入域与验收记录;③ 对至少四类关键点的回代验证结果。这三件套不是流程文档,它是把「这个数能用到什么程度」写出来的唯一形式——少了任何一件,读者拿到的就只有一个数,而那个数自己不会说明它是从哪一层上搜出来的。
这条钉子在评审桌上可以直接变成五句追问,拿到任何一份 DOE/优化报告都能当场问:① 设计箱是哪几个变量、各自什么范围、边界与极限工况进箱了没有?② 采样矩阵的列间最大相关系数与归一化最小点距是多少、过没过你们自己定的阈值?③ 代理精度是在独立测试集上验的,还是训练集内的 R²(决定系数,coefficient of determination)?④ 前沿上你要交付的那个点回代过没有、差多少、差在哪一侧?⑤ 回代用的那个高精度模型,它自己过没过相关性验证?五句里只要有一句答不出来,这份报告给出的就不是一个设计值,是一个还没验证过的假设。这五句就是全课的骨架,六讲要做的事就是把它逐句填满。
钉子②:多目标问题的交付物是一条前沿,加上一次有人参与、留了痕的选点;把多个目标压成一个标量的那一步,把工程取舍从可见变成了不可见。权重不是一个算法参数——权重就是被藏起来的取舍决定。把 w = 0.6 / 0.4 写进优化脚本,等于替项目做了一次没有人签字的商业判断:多花多少钱换多少裕度,这句话本该由能对它负责的人说出来,现在它被写进了一行代码里,评审时谁也看不见。而且这一步不只是「不透明」这么轻:在非凸前沿上它是结构性失效——无论权重扫得多密,中间整段解一个都取不到,第 4 讲会用一个可以在纸上验的算例把这件事算给你看。⇒ 由此得到一条全课通用的纪律:标量化只允许出现在两个位置——你已经拿到整条前沿、只是要在它上面按偏好排序时;或者你用能取到非凸段的那类标量化去逐段扫出前沿时。⛔ 不允许一上来就用加权求和把多目标「简化成」单目标,然后交出一个点。
反钉子(本课第一号,也是最容易读反的一条):以为「优化算法收敛得越充分,结果越可信」——⛔ 方向恰好是反的。在代理模型上做优化时,搜索越充分,交出来的最优值就越乐观、越不可信。你会做错的那个具体动作是:看到代理在验证集上的误差指标很漂亮、优化器的收敛曲线也平了,于是跳过回代验证,把前沿上选中那一点的代理预测值直接写进设计冻结文件与需求分解表。等到样车或高精度回代跑出来,性能比承诺的差一截,而这一截的方向永远是同一侧——差,不是好——于是被归因成「CAE 不准」,真因却是这一步从来没有被验过。
机理是:优化器不是代理模型的用户,是它的对手。代理模型在设计空间各处都有误差,有正有负;而优化器的工作恰恰是在整个空间里搜出预测值最好的那个点——「预测值最好」里既包含真实的性能好,也包含代理误差恰好偏乐观这一部分。于是被选中那一点的误差,不是从误差分布里随机抽的一个数,而是大量抽样里偏乐观一侧的极值。三个后果全部指向同一侧:偏置是单侧的(重跑几次取平均一点用没有),量级远大于验证集上那个误差指标,而且随搜索强度单调增大——把种群加大、代数加多、多重启几次,你以为在把结果做扎实,实际是在把偏置做大。这条会在第 3 讲讲代理模型时当场埋下(那里立「它能不能报告自己的无知」这条分栏判据),在第 6 讲当场量化并给出三道防线。
同一个形状的读反还有七条(下面 (a)~(g) 逐条列出),它们的共同点是:照直觉做出来的东西看起来更规范、更精细,而结论恰好偏向危险侧。每一条都会在正文对应处当场点破,这里先把「读反之后你会做错哪个动作」摆出来。(a)以为「LHS 保证采样均匀」——它的保证只有一条:每个变量各自在一维上分层等概率,对多维空间填充一个字都没保证;你会拿到设计矩阵就直接投产,不做任何列间相关与点距核对。(b)以为「加权求和取不到非凸段,是因为权重扫得不够密」——不是密度问题;你会扫几十组权重、得到聚在两端的两坨点,据此判定「中间没有可行的折中方案」,砍掉一整段真实存在的设计选择。(c)以为「局部灵敏度小的变量可以删掉」——你会按一个工作点上的排序删掉某个变量再重新优化,而最优点恰好移到它有效的那一侧。(d)以为「有限差分的步长越小越准」——在带求解器噪声的 CAE 输出上方向是反的;你会按「扰动 0.1% 才够精细」的直觉取步长,把导数估计整个交给噪声,而排序结果看起来一点异常都没有。(e)以为「Pareto 前沿上的点都是可交付的设计值」——前沿上的点是确定性最优,几乎必然贴在某条约束边界上;你会挑一个「刚好满足裕度约束、能效最好」的点直接冻结。(f)以为「回代验证 = 把选中的那个点跑一遍高精度模型」——只回代一个点,等于宣布整条前沿可信,而前沿的形状(也就是取舍关系本身)从来没有被验过。(g)以为「仿真模型准,所以优化结果准」——这条读反的是层次:代理模型再准,也只是准确地复现了那个仿真模型,包括它的错。
方法上有一条纪律:本课要画的不是一个全集,是六个。分别是 DOE 方法族(七族)、设计变量的类型(六类)、目标与约束(九类)、代理模型族(八族,按能不能报告自己的无知分成两栏)、「纸面最优」的成因(九类)、多目标求解路线(六族)。之所以一个一个画全,是因为这门课里最贵的错几乎都不是「某个数算错了」,而是某一整类东西从头到尾没有出现在任何人的名单上——被当成设计变量丢进优化器的噪声因子、优化跑完才发现钎焊做不出来的可制造性约束、沿「精度」这条线索永远数不到的优化偏置,都属于这一类。它们的共同点是:漏掉之后一切照常运转,结果看不出任何异常。⚠ 这六个全集全部是本课归纳的,正文会逐处标明,⛔ 不写成某标准或某方法体系既有。
射程:本课管什么、不管什么。本课的对象是写进需求与图纸的设计参数(几何、面积、流道、部件选型、标称阈值)的系统化探索与多目标折中,八条分界按三刀切开——按「设计参数还是控制器标定量」切:把被控对象模型接进 MiL/SIL、对标定量做在环自动寻优,见 K6-04 环境舱与整车热平衡标定 与 K4-03 MIL/SIL/HIL 验证流程,那两门管控制标定线的寻优与分工判据;按「优化本身还是它的前提/后续」切:底层仿真模型准不准、底层仿真模型的可信域怎么划,见 J7-01 仿真—试验相关性验证(Correlation)(⚠ 本课代理模型自己的可信输入域仍是本课交付物,⛔ 不随这一刀切出去);被优化的那个模型本身怎么建、网格与湍流模型怎么选,见 J2-01 CFD 基础、湍流模型与网格划分(Fluent/STAR-CCM+) / J1-04 整车热管理系统级联合仿真 / J3-02 电池包液冷流道 CFD 与流量均匀性;模型降阶与控制导向建模见 J7-02 模型降阶(ROM)与控制导向建模;仿真跑飞、代数环、不守恒这类数值伪迹的排查见 J7-08 一维系统模型的数值内核与「跑飞」排查:DAE/代数环、步长与容差、一致初值与守恒自检;脚本化、批处理与数据后处理的工程实现见 Q3-01 热管理工程师的数据分析与 Python 脚本;按「不带分布还是带分布」切:输入带上分布之后的传播、失效概率、可靠性优化,以及方差分解型的全局敏感度,见 J7-06 仿真不确定度量化(UQ)与稳健/可靠性设计:从确定性单点到带分布的裕度;另按代理模型族切:神经网络类代理的训练、外推检测与可信域声明见 J7-05 机器学习/AI 代理模型在热管理中的应用。⚠ 三刀都不按「哪个部件」切——按部件切会让人以为「凡是热管理的优化都是这门课」,于是把控制标定的寻优规程和设计参数的 DOE 规程互相搬用,而这两套东西的每次评估成本、总预算量级与有没有实车兜底,全都不是一回事。
还有一条同样重要:本课不给任何平台相关量的数。单次仿真的耗时与失败率、求解器噪声、采样质量的阈值、代理精度与回代的通过门槛、各条约束的限值、各变量的取值范围——全部写「须由本项目实测,或按本项目的需求与法规输入给出」,图上也一律画成可沿坐标轴自由平移的线或带。⛔ 抄一个固定阈值来用,正是本课要拦的错误之一。本课引到的标准只作方法出处与去向挂名,⛔ 不写任何条款内容、限值与等级号,理由与射程在第 6 讲最后一条。
全课六讲,顺着「从一个需求到一个能签字的设计值」这条路排:第 1 讲定位与边界——本课在链路上的位置与八条分界、组合爆炸与仿真预算线的交点、DOE 真正的价值判据、与 CAE 模型之间必须先固定的三样接口(可脚本化的入口、可自动判定成败的出口、单次成本与失败率的台账),以及设计变量六类与目标约束九类这两张名单;第 2 讲DOE 方法选型——七族各回答什么问题、部分因子的分辨度由生成元定而不由样本量定、LHS 的保证到底是哪一条、随机采样的列间相关为什么是常态而不是极端事件、两条修法各修什么、以及采样质量那两个几毫秒就能算完的判据;第 3 讲代理模型——第一刀不按「哪个算法更准」切,按「能不能报告自己的无知」分两栏,然后是响应面的两个硬边界、序贯加点的准则与它的两个失败模式、分类与拓扑变量怎么办,以及代理模型的三件交付物;第 4 讲多目标优化——支配关系的定义与「非支配 ≠ 好」、目标冲突为什么是结构性的、六族求解路线怎么选、加权求和失效的可手算算例与两条修法、进化算法那个决定成败的调用次数乘法、前沿收敛怎么判;第 5 讲从前沿到设计值——先用硬约束砍段再排序、读的是斜率不是绝对位置、选点必须留痕、局部灵敏度的三条边界、有限差分步长的 U 型曲线与求解器噪声怎么测、确定性最优贴边界意味着什么;第 6 讲结果可信度审查——九类成因的排查顺序、训练集 R² 为什么会完全丧失鉴别力、代理精度验收的三件事、优化偏置的展开与三道防线、以及回代验证要回哪四类点、怎么读偏差的方向。六讲之后,案例把这条链在一个前端冷却模块上完整走一遍,动手做给出四步与每一步必须交出来的东西。
所以这门课要建立的判断力只有三个,全部是「判」而不是「算」:判一份采样能不能支撑你想问的问题(在跑第一个仿真点之前就能判,因为它是设计矩阵的结构性质);判一个代理模型的输出能不能用在这个点上(看它报不报告自己的无知,看这个点在不在它的可信域里,⛔ 不看它的平均精度有多漂亮);判一条前沿上的点能不能交出去(它贴不贴约束边界、回代过没有、偏差偏在哪一侧)。这三个判断力都不依赖你用哪个平台、哪个求解器,也不会随软件版本过期。
第 1 讲 从「试出来」到系统化设计空间探索
一个前端冷却模块,可调的东西一摆开就是十几样:芯体厚度、翅片密度、迎风面积、风扇直径与转速上限、水泵扬程、风扇开启的标称水温……每一样都影响散热裕度,也都影响功耗、成本、重量与噪声。传统做法是「试出来」——凭经验改一版、跑一次仿真、看结果、再改一版。变量只有两三个时这套做法完全有效;变量一多,它会以一种非常安静的方式失效:你花掉的机时一点都不少,但跑出来的点几乎全排在你自己那条工程直觉的连线上,设计箱里大片区域一个点都没有,而你从结果里看不出这件事。
这一讲不讲任何一种具体的 DOE 方法,只做三件事:把本课的射程划清楚(哪些事归这门课、哪些事必须去别的课);给出「为什么必须转向系统化的设计空间探索」这件事的定量根据;把开跑之前必须先定下来的几样东西——变量是什么类型、哪些是目标哪些是约束、脚本接口与成本台账——一次说完。这些全是在写第一行采样脚本之前的事,而后面五讲要防的坑,有相当一部分的根就埋在这一步。
1.1 本课在仿真链路上的位置:三次身份转换,与八条分界
先看这条链,它是理解本课全部内容的骨架:
真实系统 →(CAE 建模 + 相关性验证)→ 仿真模型 →(DOE 采样 + 拟合)→ 代理模型 →(优化器搜索)→ 「最优点 / Pareto 前沿」
这条链上有三次身份转换,每一次都掉一层可信度。而本课的射程只覆盖后两次:从仿真模型到代理模型(采样与拟合),以及从代理模型到最优点(搜索)。第一次转换——真实系统到仿真模型——不在本课,它是 J7-01 仿真—试验相关性验证(Correlation) 的活,那门课管仿真与试验的相关性验证、误差带口径与可信域怎么划。本课的一切结论都建立在「那一步已经通过」这个前提上。
由此立起本课的第一根钉子,它会在后面每一讲被再敲一次:
优化器交出来的「最优点」,是一句关于代理模型的陈述,不是一句关于真实系统的陈述。
这句话不是修辞。它有一个可以直接检查的后果:本课的交付物永远不是一个设计值,而是三件套——
- 一条 Pareto 前沿,连同它成立的设计箱(哪几个变量、各自什么范围)与工况;
- 这条前沿所依赖的代理模型的可信输入域与验收记录;
- 对至少四类关键点的回代验证结果(哪四类见第 6 讲)。
判据形态也很具体。拿到一份 DOE / 优化报告,问五句:
- 设计箱是哪几个变量、各自什么范围、边界工况进箱了没有?
- 采样矩阵的列间最大相关系数与归一化最小点距是多少、过没过你们自己定的阈值?(这两个量是什么、阈值怎么定,见第 2 讲)
- 代理精度是在独立测试集上验的,还是训练集内的 R²?
- 前沿上你要交付的那个点回代过没有、差多少、差在哪一侧?
- 回代用的高精度模型自己过没过相关性验证?
五句里答不出任何一句,这份报告给出的就不是一个设计值,是一个还没有验证过的假设。
八条分界,各按什么切。下表每一行的第一列才是重点——它写的是「这一刀是按什么切的」:
| 这一刀按什么切 | 切出去的是什么 | 去向 |
|---|---|---|
| 设计参数 vs 标定量 | 把被控对象模型接进 MiL / SIL、对控制器标定量做在环自动寻优,以及「虚拟筛选 / 实车验收」的分工判据 | 见 K6-04 环境舱与整车热平衡标定(仿真预标定与相关性校核)、K4-03 MIL/SIL/HIL 验证流程(SIL 环境),那两门课管这一层 |
| 优化 vs 它的前提 | 底层仿真模型准不准、标定与验证怎么分、底层仿真模型的可信域怎么划(⚠ 这一行说的是仿真模型的可信域;本课代理模型自己的可信输入域是本课交付物第 ② 件,⛔ 不归 J7-01 仿真—试验相关性验证(Correlation);神经网络类代理的可信域声明格式见 J7-05 机器学习/AI 代理模型在热管理中的应用) | 见 J7-01 仿真—试验相关性验证(Correlation),那门课管仿真—试验相关性验证 |
| 不带分布 vs 带分布 | 输入带上分布之后的传播、失效概率、可靠性优化,以及方差分解型的全局敏感度 | 见 J7-06 仿真不确定度量化(UQ)与稳健/可靠性设计:从确定性单点到带分布的裕度,那门课管不确定度量化与稳健/可靠性设计 |
| 代理模型族 | 神经网络类代理模型的训练、外推检测与可信域声明 | 见 J7-05 机器学习/AI 代理模型在热管理中的应用,那门课管这一族 |
| 用途 | 模型降阶与控制导向建模 | 见 J7-02 模型降阶(ROM)与控制导向建模 |
| 优化 vs 建模 | 被优化的那个 CFD / 1D 模型本身怎么建、网格与湍流模型怎么选 | 见 J2-01 CFD 基础、湍流模型与网格划分(Fluent/STAR-CCM+) / J1-04 整车热管理系统级联合仿真 / J3-02 电池包液冷流道 CFD 与流量均匀性 |
| validation vs verification | 仿真跑飞、代数环、不守恒这类数值伪迹的排查 | 见 J7-08 一维系统模型的数值内核与「跑飞」排查:DAE/代数环、步长与容差、一致初值与守恒自检 |
| 方法 vs 工具 | 脚本化、批处理与数据后处理的工程实现 | 见 Q3-01 热管理工程师的数据分析与 Python 脚本 |
为什么这三刀(探索设计空间还是标定控制器 / 优化本身还是它的前提与后续 / 不带分布还是带分布)都不按「哪个部件」切?因为按部件切会让读者得出一个错误的结论:「凡是热管理里的优化都是这门课」。真按这个理解去干活,就会把控制标定的寻优规程和设计参数的 DOE 规程互相搬用——而这两套规程根本不在一个量级上。标定量的在环寻优每次评估几秒、可以跑上万次、后面还有实车验收兜底;设计参数的 DOE 每次评估几十分钟、总预算只有几百次、而且没有兜底。两套规程的采样密度与验收门槛差一个量级,搬过去就是灾难。
按射程的规矩,上表里凡是切出去的东西,本课只给类型与去向,不给任何限值、等级号与条款内容。
⚠ 这里有一个高频易错点,现在就点破:不要把 J7-06 仿真不确定度量化(UQ)与稳健/可靠性设计:从确定性单点到带分布的裕度 的「带分布」结论当成本课的产出去承诺裕度。本课交出来的是确定性的前沿与确定性的最优点,它对「输入有散差时这个方案还有多少余量」这个问题一个字都没有回答。第 5 讲会把这件事作为一条必须执行的复核动作再讲一次。
1.2 组合爆炸:定死你的不是变量数,是预算线与全因子曲线的交点
全因子设计的样本量是
N_full = L^k
其中 k 是设计变量个数、L 是每个变量取几个水平。代进去看:
| 变量数 k | 两水平 2^k | 三水平 3^k |
|---|---|---|
| 4 | 16 | 81 |
| 5 | 32 | 243 |
| 7 | 128 | 2187 |
| 10 | 1024 | 59049 |
这些是直接算出来的精确整数,可以自己复算。
真正要读出来的东西不是「数字很大」。把这条曲线画在对数纵轴上,它是一条直线;而你的仿真预算是一条水平线。两条线的交点,才是「全因子还做不做得起」的分界。
这个说法与「变量多了就不能全因子」有本质区别。同样是 7 个变量,单次仿真 5 秒和单次仿真 40 分钟是两个完全不同的问题:前者 2187 点跑完不到三小时,后者要跑一年半。所以决定要不要转向部分因子或空间填充设计的,不是变量多不多,是那个交点落在哪里。
⛔ 由此得到一条否定式的结论,请务必记住它是否定式的:不存在「变量数 ≥ 某个值就不能做全因子」这样一条通用判据。任何写成这种形式的经验规则,都是把某一个项目的预算线偷偷当成了普遍事实。
至于预算线本身在哪里——它是平台相关量,取决于你的算力、许可证数量与项目排期,本课不给数,正文与图上一律把它画成一条可以沿纵轴自由平移的带,位置由本项目自己给出。
还有一条最容易被忘掉的:L 也在指数上。同样是 k=10,两水平要 1024 点、三水平要 59049 点,相差 57.7 倍——这个差距完全由「每个变量取几个水平」这一个决定造出来,而它常常是随手定的。
图 2 上另有两条曲线(全二阶响应面的待估系数个数、以及「10d 经验起点」),它们回答的是另一个问题——不做全因子的话,样本量该定多少,那是第 2 讲的内容。⚠ 记法先说明一次:这个经验说法在文献里原本就写作 10d,全课沿用它原本的写法保留 d,那里的 d 与本课统一使用的变量个数 k 是同一个量(第 2 讲 2.8 ② 与关键公式详解② 同此口径)。这里只提醒一句:图例里那条 10d 标着「量级参考、非判据」,因为它是文献与优化平台里流通的一个经验说法,本课没有取到原文核对,不作判据使用。
1.3 DOE 的价值判据不是「少跑几次」
「DOE 能少跑仿真」这个说法广为流传,而它会引出一个错误的优化目标:如果目标只是少跑,那随便跑三个点也很少。
真正的价值判据是这一句:
用一笔固定的预算,换到一组可判真假的主效应与交互作用估计。
「省次数」只是它的副产品。
DOE 做的事,是把「跑哪些点」从随手挑变成按判据摆,而不同族的设计摆点是为了不同的目的:
- 因子型设计摆点,是为了让主效应与交互项在数学上可分离——你估出来的「A 的效应」确实只是 A 的效应,没有掺进 A×B;
- 空间填充设计摆点,是为了让后续拟合的代理模型在整个箱内都有支撑,而不是只在某几块准。
这里有一个非常好用的性质:可分离性是设计矩阵的结构性质,和仿真本身没有关系。也就是说,在跑第一个点之前你就能核它。这正是第 2 讲要讲的采样质量核对必须放在「生成设计矩阵之后、提交仿真之前」这个位置上的原因——它是一道毫秒级就能过的闸,而它挡掉的是一整批仿真的浪费。
⚠ 易错点:把「工程师凭经验挑的一组点」称作 DOE。挑出来的点通常沿着某一条工程直觉排列(比如「面积大一点、风量也大一点」这样成组地变),列间相关系数很高,主效应与交互项混在一起——而这件事在结果出来之前完全看不出来,在结果出来之后也只表现为「这个代理模型好像不太准」,很少有人会回头去查采样矩阵。
1.4 「优化前先做 DOE」不是无条件的规矩:路线选择决策链
「先做 DOE 再优化」经常被当成一条流程规矩来背。它的真正理由不是规矩,是:优化器需要一样它自己造不出来的东西——设计空间的形状。
优化器只会沿着它当前看到的信息往前走。它不会告诉你「这个变量其实没用」「这两个变量是耦合的」「箱子的这个角落有一整片不收敛区」。而这些恰恰是一次 DOE 扫描就能给出的东西。
直接上优化器,有三个后果:
- 全部预算花在一条搜索轨迹上,轨迹之外的空间零信息;
- 无法判断收敛到的是全局还是局部——你没有任何别处的信息可以拿来比;
- 一旦要改需求(改一个约束限值、换一个目标、加一个变量),前面花的钱一分都留不下来,得从头再跑一遍。
第 ③ 条最值钱,而且可以用调用次数说清楚:走「先建代理再优化」这条路线,需求一改,重新优化是在代理上跑的,增量的仿真调用次数接近零;走「直接优化」这条路线,改一次需求就是一次全额重跑。在一个还会改需求的项目里(也就是所有项目里),这一条通常就足以定下路线。
⚠ 但反过来的一半同样要防:「一律先做 DOE」不成立。当变量只有两三个、单次仿真便宜、而且只有一个目标时,直接上优化器才是对的,先铺一轮 DOE 反而是浪费。判据不是流程,是下面这条决策链:
- 第一层:变量类型里有没有分类量或拓扑量?有 ⇒ 先分域,每一类各走一遍完整流程,最后把几条前沿画在同一个目标空间里比(为什么必须分域,见 1.6);
- 第二层:目标与约束分清了吗?没分清 ⇒ ⛔ 先回去分,不许默认当目标(判据见 1.7);
- 第三层:看「单次仿真成本 × 变量数 × 目标数」这三维,分三条出口——
- (A) 变量少(两三个)+ 单次便宜 + 单目标 ⇒ 直接上优化器;
- (B) 变量中等 + 单次中等 + 多目标 ⇒ 空间填充采样 → 建代理 → 在代理上跑支配排序型算法 → 回代;
- (C) 变量多 + 单次昂贵 ⇒ 先用筛选设计降维再走 (B),或直接走代理辅助的多目标(边优化边加真实点)。
⇒ 无论走哪条出口,采样质量核对与四类点回代这两步都不能省——它们在汇合处,不属于任何一条分支的可选项。
图 3 第三层里的「变量少」「单次便宜」不是可以照抄的门槛,它们的判据要由本项目按下一节那三样台账的实测结果来定。
1.5 接口:开跑之前必须固定的三样东西
DOE 与优化跑起来之后,它对 CAE 模型的调用是无人值守的批量调用。所以在开跑之前,有三样东西必须先固定下来:
① 入口——可脚本化的参数写入。设计变量必须能由脚本改写并自动重建模型:几何参数化、网格重划或网格变形、边界条件表。⛔ 手工改一次跑一次,那不叫 DOE,那还是「试出来」,只是换了个名字。
② 出口——可自动判定成功/失败的结果读取。每一次运行必须自动产出三样:响应量、收敛判据、成功/失败标志。而且失败的点要以失败的身份进数据集——⛔ 不许悄悄丢掉。
③ 台账——单次成本、失败率、求解器噪声。单次求解耗时、批量运行的失败率、以及「同一个输入重复求解得到的输出散布」(也就是求解器噪声 ε_noise)这三个量,必须先实测出来。⚠ ε_noise 的全课口径写死在这里:它是把输出散布按该响应量程归一化之后的无量纲相对散布,⛔ 不是带响应单位的绝对量——第 5 讲的步长式两侧同为归一化量才自洽,1.5、5.3 与关键公式详解⑦ 三处同此一套口径。
为什么这三样任缺一样,后面每一步都会踩空:
- 没有入口,跑不出批量,一切免谈;
- 没有出口,失败点会被当成有效样本喂进拟合。这一条比听起来严重得多——一个不收敛、跑飞的算例常常会给出一个「特别好」的数(温度特别低、压降特别小),于是它会被代理模型当成设计空间里的一处宝藏,而优化器一定会径直朝那里跑过去;
- 没有台账,样本量只能拍、有限差分步长只能拍(第 5 讲会讲到步长怎么由噪声定)、走不走代理模型路线也只能拍。
这三个量全部是平台相关量:它们取决于你的模型规模、求解设置、网格与硬件。本课不给数,一律写「须由本项目在本模型、本求解设置上实测」。
⚠ 两个易错点: 一是把「跑得通一次」当成「可以批量跑」。批量跑会暴露一批只在特定参数组合下才出现的几何重建失败与不收敛,而这些组合恰恰集中在设计箱的角落——也就是你最需要数据的地方。 二是把失败点直接删掉而不记账。删掉之后,设计箱里就出现了一块「既没有数据、也没有解释」的空洞,而代理模型会毫不犹豫地用一张光滑的曲面把它填上,并且填得很自信。
1.6 设计变量的六类:噪声因子不是设计变量
「设计变量」这四个字听起来很清楚,实际上它下面藏着六种性质完全不同的东西。下面这个分法是本课为这门课归纳的,不是某份标准或某个软件的既有分类;它之所以这么分,不是为了分类学上的整齐,而是因为每一类都会让下游的处理方式变掉:
| # | 类型 | 例子 | 它让下游变了什么 |
|---|---|---|---|
| ① | 连续几何量 | 面积、厚度、直径、间距、翅片密度 | 代理模型与优化器的默认假设就是这一类,无需特殊处理 |
| ② | 离散 / 整数量 | 管排数、流道条数、风扇叶片数、电芯并联数 | ⚠ 连续松弛后取整会给出不可行点或次优点——松弛解落在两个整数之间时,两侧取整都可能违反约束 |
| ③ | 分类 / 名义量 | 材料牌号、翅片型式、拓扑构型 A/B/C | 无序,不能插值,多数代理模型在这一类上直接失效;做法是分域各建一个代理模型,或 one-hot 之后仍然分域优化 |
| ④ | 标称控制阈值 | 风扇开启水温、AGS 开度门限、压缩机转速上限的标称值 | ⚠ 本课射程的边界正在这里:本课只优化写进需求与图纸的标称阈值;对标定量做在环自动寻优见 K6-04 环境舱与整车热平衡标定 / K4-03 MIL/SIL/HIL 验证流程 |
| ⑤ | 拓扑 / 构型变量 | 并联还是串联、Chiller 挂哪一路、几个回路 | ⚠ 变量的个数本身会随它变(变维问题),⛔ 塞不进一个固定长度的设计向量;工程做法是每种拓扑各跑一遍本课流程,再在拓扑之间比前沿 |
| ⑥ | 噪声因子 | 环境温度、来流、批次散差、老化衰减 | 它不由你选,但它会变——⛔ 它不是设计变量 |
⚠ 这个分法沿的线索是「后面的处理方式会不会变」,不是「它长什么样」。如果只顺着「换热面积、流道尺寸、芯体厚度」这类连续几何量去数,会漏掉 ③ ⑤ ⑥ 三类,而漏掉的方式是整类不出现——你的变量清单看起来是完整的。
拿到一个变量,问三句就能定它属于哪一类:
- 它是不是有序的?无序 ⇒ 第 ③ 类;
- 改它会不会改变别的变量的个数?会 ⇒ 第 ⑤ 类;
- 投产之后它是不是仍然会自己变?会 ⇒ 第 ⑥ 类。
★ 第 ⑥ 类混进设计变量,是这一节里最贵的一种错,原因是它不会报错。把「环境温度」或「冷却液配比的批次散差」丢进优化器,优化器会老老实实地给你一个方案,并且顺便告诉你:设计工况取 20 ℃ 最好。这个解在数学上完全正确,在工程上完全无用——因为环境温度不是你能选的东西。噪声因子的正确位置在别处:或者进田口安排的外表(见第 2 讲),或者作为输入分布进 J7-06 仿真不确定度量化(UQ)与稳健/可靠性设计:从确定性单点到带分布的裕度。
⛔ 最后一条纪律:没有列进上表的类型,不得默认当成「不存在」。例如时间序列型变量(一整条控制曲线的形状)、场型变量(流道的连续型面),它们同样属于设计变量这个集合,只是本课不展开——⛔ 不许让它们以「没提到 = 不存在」的形式消失。
1.7 目标与约束是两类东西,⛔ 不许互换
这一条是本课归纳的一条硬判据,它出现在第 1 讲是因为它必须在开跑之前判完——判错了,后面所有工作都建立在一个错误的问题上。
判据只有一句:问这一项「能不能用钱或性能去换」。能换的是目标,一点都不能换的是约束。 答不上来的,先按约束处理并标为待判,⛔ 不许默认当目标。
两个方向的后果不对称,但都很严重:
方向一:把硬约束当目标加权进去 ⇒ 允许用违规换性能。把法规限值、包络硬边界、已冻结的接口尺寸加权写进目标函数,优化器会精确地发现「稍微超一点、换来性能大涨」在加权目标上是划算的。于是它交出一个法规不过、装不进去、而目标函数值非常漂亮的方案。⚠ 请注意:它没有做错任何事——是你告诉它这些东西可以换的。
方向二:把目标当约束设一个门限 ⇒ 前沿消失、取舍不再可见。把「能效」这类连续可换的目标压成一条「必须 ≥ X」的约束,多目标问题就退化成一个可行域,你再也读不出「多花一点钱能换多少裕度」。而这句话恰恰是多目标优化唯一能拿给管理层看的东西。
⚠ 这条判据在实务中最常被罚函数绕过去:用一个很大的罚系数把约束写进目标,看起来是约束,实际上是「一个很贵的目标」。⚠ 罚系数一旦是有限的,优化器就仍然可以拿它做交易,而且罚系数的量级本身会扭曲前沿的形状——你看到的那条前沿,有一段是罚系数画出来的,不是物理画出来的。
各项约束的限值本课不给任何数:它们是平台相关量与法规量,由本项目的需求分解、法规输入与平台约束给出。相应地,前沿图上的硬约束线本课一律画成可沿相应坐标轴自由平移的线,并在行尾标明位置由谁给出,⛔ 不画在某个具体刻度上(第 5 讲会用一张图把「用硬约束砍段、再在可行段上选点」这件事画出来)。
顺带把一个全课统一的方向约定写在这里,因为它从这一节开始就要用:本课所有目标函数一律写成最小化形式。要最大化的量(COP、散热裕度)取负号或取倒数之后再进目标向量,并在符号约定处写死取的是哪一种。⛔ 全课不得混用最大化与最小化两套方向——这是量纲之外最常见的一处符号事故,而且它会让 Pareto 支配关系的判定整个反过来。
1.8 目标与约束的全集:九类,不是「能效 vs 成本 vs 重量 vs NVH」四样
沿着「能效 vs 成本 vs 重量 vs NVH」这四个词去数,是最自然的数法,也是最常见的漏法。下面九类同样是本课归纳的分法:
| # | 类别 | 内容 | 通常是目标还是约束 |
|---|---|---|---|
| ① | 性能类 | 散热裕度、COP、系统能耗、对续航的影响 | 目标 |
| ② | 经济类 | BOM 成本、工装与开发投入、制造节拍 | 目标 |
| ③ | 物理类 | 重量、包络体积、迎风面积 | 目标或约束(包络常是硬约束) |
| ④ | NVH | 风扇噪声、泵噪声、管路振动 | 目标 |
| ⑤ | 可靠性 / 寿命类 | 振动疲劳寿命、结垢裕度、末期劣化后仍达标 | 多为约束;⚠ 此处的「可靠性」指耐久与寿命侧(时间轴上的劣化与失效),定量做法见 I6-04 可靠性目标、分配与寿命数据统计(TMS 可靠性量化入门);而输入带上分布之后的失效概率与可靠性优化(RBDO)是另一件事,见 J7-06 仿真不确定度量化(UQ)与稳健/可靠性设计:从确定性单点到带分布的裕度——判归属只问一句:你要的是「用到期末还达不达标」还是「有散差时越不越界」 |
| ⑥ | 可制造性 / 可装配性 | 钎焊可行性、装配可达性、维修通道 | 常常是硬约束 |
| ⑦ | 法规与标准约束 | 制冷剂 GWP 限值、噪声法规、安全间距 | 硬约束、不可交易 |
| ⑧ | 接口 / 兼容性约束 | 与既有平台件共用、接口尺寸已冻结、供应商产能 | 硬约束 |
| ⑨ | 鲁棒性目标 | 散差条件下的均值与方差 | 见 J7-06 仿真不确定度量化(UQ)与稳健/可靠性设计:从确定性单点到带分布的裕度,那门课管这一类 |
⚠ 沿那四个词数,漏掉的是 ⑤ ⑥ ⑦ ⑧,而这四类里有三类多半是硬约束而不是目标——照 1.7 的判据,它们是「一点都不能换」的那一侧。
漏掉它们的后果,同样不会以「少了一条」的形式暴露,它们是整类不出现:优化跑完了、方案定了、评审也过了,才发现这个芯体钎焊做不出来(第 ⑥ 类)、接口尺寸半年前就冻结了(第 ⑧ 类)、或者按末期结垢算裕度就没了(第 ⑤ 类)。而这时候前沿是重新算不回来的——因为这几条约束一加,可行域整个变了。
⇒ 由此定一条登记纪律:每一项都要在优化开跑之前显式写成一行,写明它是目标还是约束、限值从哪来、谁给的。「谁给的」这一栏不是形式主义——它是后面需求变更时唯一能顺着回溯的线索。
⛔ 两条边界要一起说清:
- 第 ⑨ 类(鲁棒性)本课只登记、不交付。本课把它列为第九类目标并写明去 J7-06 仿真不确定度量化(UQ)与稳健/可靠性设计:从确定性单点到带分布的裕度,⛔ 不给任何做法与限值;
- 没有列进上表的项(例如碳足迹与可回收性、网络安全与信息安全约束、专利规避约束),⛔ 不得默认当成「不需要考虑」——它们同属这个集合,只是本课不展开。
本讲小结:本课站在链路的后两段——从仿真模型到代理模型、再到最优点,而第一段(真实系统到仿真模型)是 J7-01 仿真—试验相关性验证(Correlation) 的前提;由此得出主钉子「最优点是关于代理模型的陈述」,以及交付物三件套。转向系统化探索的定量根据是 N_full = L^k 与预算线的交点,不是「变量多」这件事本身;DOE 的价值判据是「换到可判真假的效应估计」,不是「少跑几次」;而「先做 DOE」也不是无条件的——判据是变量类型、目标与约束分没分清、以及成本×变量数×目标数这三层。开跑之前要固定的是入口、出口、台账三样,要分清的是六类变量与九类目标/约束。这一讲全部内容都发生在写第一行采样脚本之前,第 2 讲开始才谈「点摆在哪里」。
后面还有 5 讲正文 · 关键公式 · 案例拆解 · 常见误区 · 动手做