最适化 (Optimization) — CAE用语解说
最适化的定义
CAE中所说的「最适化」与普通数学中的最适化有什么区别呢?
那么具体使用什么方法呢?
大分为两类。一类是梯度法(gradient-based),利用灵敏度(微分信息)高效地探索下降方向。另一类是元启发式,像遗传算法或粒子群最适化,不使用微分而通过概率进行探索。前者速度快但容易陷入局部解,后者能进行全局探索但需要更多计算次数。
拓扑最适化·形状最适化·尺寸最适化
三者的区别在于「设计改变的自由度有多大」。
- 拓扑最适化:决定材料的有无本身。孔的数量和连接关系(拓扑)都可以自由改变。例如航空器的加筋板结构可以自动决定「这里是否能开孔」。
- 形状最适化:将已确定形状的边界面平滑地移动来改善。例如改变凹口的R形状来减小应力集中。
- 尺寸最适化:只改变板厚和断面尺寸等参数。约束条件最多,但设计变更简单,容易转化为制造。
自由度从大到小的顺序是:拓扑 > 形状 > 尺寸。实务中通常先用拓扑最适化确定概形,再用形状最适化进行细节调整,最后用尺寸最适化微调板厚的三步流程。
听说拓扑最适化与3D打印的相性很好,是真的吗?
完全正确。拓扑最适化的结果通常呈现出像生物骨骼一样的有机形状,用传统切削或铸造很难制造。但增材制造(3D打印)可以直接成形那样的复杂形状。GE Aviation的喷气发动机燃料喷嘴就是著名案例,把20个零部件统合为1个,重量削减了25%。
梯度法 vs 元启发式
梯度法是怎样知道「朝哪个方向改变设计会更好呢」的?
通过计算灵敏度(sensitivity)。简单来说就是「这个板厚增加0.1mm的话应力会降低多少MPa」这样的偏微分。有三种方法:
- 有限差分法:通过微小移动变量进行2次分析,然后取差。简单但需要按变量个数进行分析。
- 直接微分法:对支配方程直接求微分产生灵敏度方程。变量少、响应多的情况下有利。
- 伴随法(Adjoint Method):响应少、变量多的情况下压倒性有利。后面会详细说明。
那元启发式就不使用微分了吧。什么时候用呢?
主要在3个场景活跃。首先是目标函数不连续或离散的情况。例如螺栓数量(2个或4个或6个)这样的整数变量无法求微分。其次是局部解众多的多峰值问题。梯度法会陷入最近的谷,但遗传算法可以用整个群体进行广泛探索。最后是分析代码为黑盒无法取得灵敏度的情况。商用软件无法访问源代码时经常使用。
实务中除了遗传算法还有什么方法在用?
伴随法(Adjoint Method)
你说伴随法「压倒性有利」,具体有什么了不起的地方?
伴随法的核心是「即使设计变量有数百万个,计算灵敏度所需的追加联立方程也只需求解一次」。普通有限差分法如果有 $n$ 个变量就需要 $n$ 次分析,但伴随法只需一次伴随分析就能一次性得到全部变量的灵敏度。
什么?100万个设计变量也只需一次?怎么可能?
关键在于拉格朗日未定乘数法。把目标函数 $J$ 和支配方程残差 $R(\mathbf{u}, \mathbf{x}) = 0$ 结合起来构造的扩展函数:
这里 $\boldsymbol{\lambda}$ 就是伴随变量。令 $\mathcal{L}$ 对 $\mathbf{u}$ 的微分为零,可以导出伴随方程:
$$\left(\frac{\partial R}{\partial \mathbf{u}}\right)^T \boldsymbol{\lambda} = -\left(\frac{\partial J}{\partial \mathbf{u}}\right)^T$$只需求解这一个伴随方程,就能用下式一次性计算设计变量 $\mathbf{x}$ 各成分的灵敏度:
$$\frac{dJ}{dx_i} = \frac{\partial J}{\partial x_i} + \boldsymbol{\lambda}^T \frac{\partial R}{\partial x_i}$$右侧的计算只是矩阵-向量乘积,费用极低。在CFD形状最适化中,网格上的全部节点坐标都成为设计变量,没有伴随法几乎不可能。
OpenFOAM也有伴随求解器吧。实际使用时的注意点是?
很好的问题。OpenFOAM的adjointOptimisationFoam对定常RANS伴随有实用级别的支持。注意点是:首先原始流场(primal)必须充分收敛。残差大的话伴随解也会很糙。其次伴随方程的收敛通常比原方程更难。把松弛系数调小是诀窍。还有乱流模型的伴随处理,可以冻结(frozen turbulence)或严格求解,严格求解的精度更好但需要更多计算资源。
多目标最适化
实际设计中「要减轻重量」和「要提高强度」这样的目标有很多呀。怎样同时满足这些呢?
帕累托前沿上的解全部最优的话,最后怎样选择一个设计?
数学上都等价,所以最终还是工程师的判断。常用的方法有3种:
- 权重法:$\min\ w_1 f_1 + w_2 f_2$ 这样用权重反映优先级。
- 膝点(knee point)选择:选择权衡效率最好的「转角」。用少量的质量增加换来大幅强度提升的点。
- 制造约束筛选:从帕累托解中,按制造成本、工程、公差等最适化中没有包括的实际条件来筛选。
实务中通常用NSGA-II这样的多目标遗伝算法一次性生成帕累托前沿,然后由团队讨论选择的工作流程。
NSGA-II经常听到,计算成本要多大?
需要进行「群体大小×世代数」次评估。例如群体100×50世代=5000次。一次分析花1小时的话,简单计算需要5000小时。实际上是用代理模型进行近似,把评估次数减至100~200次,或者在HPC集群上并行执行。modeFRONTIER、HyperStudy这样的最适化平台把这些自动化了。
数学定式化
CAE中的最适化问题通常定式化为如下形式:
$$\begin{aligned} \min_{\mathbf{x}} \quad & J(\mathbf{u}(\mathbf{x}), \mathbf{x}) \\ \text{subject to} \quad & g_j(\mathbf{u}(\mathbf{x}), \mathbf{x}) \leq 0, \quad j = 1, \dots, m \\ & h_k(\mathbf{u}(\mathbf{x}), \mathbf{x}) = 0, \quad k = 1, \dots, p \\ & x_i^L \leq x_i \leq x_i^U, \quad i = 1, \dots, n \end{aligned}$$这里 $\mathbf{x}$ 是设计变量向量,$\mathbf{u}(\mathbf{x})$ 是FEM/CFD等的状态变量(变位场、速度场等),$J$ 是目标函数(质量、顺应性、阻力等),$g_j$ 是不等式约束(应力上限、体积率等),$h_k$ 是等式约束,$x_i^L, x_i^U$ 是设计变量的上下限。
拓扑最适化中SIMP法(Solid Isotropic Material with Penalization)是代表性的,用各元素的伪密度 $\rho_e \in [0, 1]$ 作为设计变量,弹性模量为:
$$E_e = \rho_e^p \, E_0$$通过惩罚化处理($p$ 通常为3)。这样可以抑制中间密度(灰度),得到接近0/1的明确材料配置。
相关用语
- 拓扑最适化 — 材料配置有无的最适化手法
- 形状最适化 — 边界面形状平滑改变的手法
- 尺寸最适化 — 板厚、断面尺寸参数最适化的手法
- 伴随法 (Adjoint Method) — 大规模问题的高效灵敏度计算手法
- 遗传算法 — 基于进化计算的元启发式
- 多目标最适化 — 同时处理多个目标函数的最适化
- 帕累托最优性 — 多目标最适化中最优解的概念
- SIMP法 — 拓扑最适化的代表性密度法
- 贝叶斯最适化 — 基于代理模型的高效探索
- NSGA-II — 多目标遗传算法的标准手法
- 代理模型 — 仿真的代理模型
- 目标函数 — 最适化的对象函数
- 约束条件 — 设计需要满足的条件
准确理解CAE用语是团队沟通的基础。— Project NovaSolver也面向实务人士的学习支持。
请告诉我们实务中最适化遇到的课题
Project NovaSolver致力于解决CAE工程师日常面对的课题——设置的复杂性、计算成本、结果解释。你的实务经验会成为更好工具开发的原动力。
联系我们(准备中)相关话题
详情
错误