4. 拓扑优化算法与求解策略
拓扑优化在数学上通常被写成带约束的非线性规划问题:在有限材料体积(或质量)约束下,使结构柔度最小、刚度最大。设计变量是每个单元的相对密度 x_e ∈ [0,1],目标函数 c(x)=U^T K U,约束为 V(x)=Σ x_e v_e ≤ V*。真正决定求解能否收敛、结果是否可用的,是优化算法与求解策略。本节围绕三类主流算法——OC准则法、MMA移动渐近线法、SQP序列二次规划——讲清它们的适用条件、迭代机制、收敛判据以及数值稳定性处理。
一、OC准则法:从最优性条件直接构造更新格式
OC(Optimality Criteria,最优准则法)的核心思想是:对凸性较好的柔度最小化问题,写出拉格朗日函数并对设计变量求导,令其满足KKT条件,从而得到显式的密度更新公式。对单约束(体积约束)问题,最优性条件可写为
B_e = -∂c/∂x_e / (λ · ∂V/∂x_e) = 1
x_e^new = x_e · B_e^η (η 为阻尼系数,常取 0.5)
其中 ∂c/∂x_e ≈ -p·x_e^(p-1)·u_e^T k_e^0 u_e,p 为SIMP惩罚因子(常取3)。由于 B_e 依赖拉格朗日乘子 λ,实际实现采用二分法在体积约束上求解 λ:给定 λ 计算所有 x_e^new,检查体积是否满足,不满足则调整 λ 上下界继续二分。OC法每步只需求解一次有限元,迭代极快,适合单约束、目标凸性好的柔度问题。但它难以直接处理多约束、非凸目标或应力约束,因此工程中常作为“快速起步”或与其它算法组合使用。
二、MMA移动渐近线法:用凸近似替代原问题
MMA(Method of Moving Asymptotes)是拓扑优化中最稳健的通用算法之一。它不直接求解原问题,而是在每次迭代中构造一个可分离的凸近似子问题:
min f̃_0(x) = f_0(x^k) + Σ [ p_ij/(U_j - x_j) + q_ij/(x_j - L_j) ]
s.t. f̃_i(x) ≤ 0, i=1..m
α_j ≤ x_j ≤ β_j
其中 L_j、U_j 是移动渐近线,控制近似的保守程度。当迭代点接近收敛时,渐近线收紧,近似更贴近原函数;当迭代震荡时,渐近线放宽,增强全局性。MMA的显著优势是:天然支持多约束(体积、应力、位移、频率等可同时施加),且子问题是凸的,可用对偶法高效求解。在拓扑优化中,MMA常与SIMP或RAMP插值配合,处理应力约束、多工况等复杂场景。其代价是每次迭代需计算目标与约束的灵敏度,并维护渐近线参数,实现复杂度高于OC。
三、SQP序列二次规划:通用但计算代价高
SQP(Sequential Quadratic Programming)在每个迭代点将原问题近似为二次规划子问题:目标函数用拉格朗日函数的二次近似,约束用线性近似,然后求解QP得到搜索方向,再通过线搜索或信赖域确定步长。SQP的优点是理论收敛性好、能处理一般非线性约束,适合约束数量不多但非线性强的场景。但在拓扑优化中,设计变量动辄数万甚至百万,SQP每次迭代需构造并求解大规模QP,计算与存储代价高,且对灵敏度精度敏感。因此SQP更多用于变量规模较小的尺寸/形状优化,或作为拓扑优化后处理阶段的精细调整,而非大规模拓扑迭代的主力。
四、收敛判据:什么时候可以停
算法迭代不能无限进行,必须设定明确的停止条件。工程中常用三重判据同时判断:
- 目标函数相对变化:
|c^k - c^(k-1)| / c^k < ε_c,常取ε_c = 1e-3。它反映结构柔度是否已趋于稳定。 - 设计变量最大变化:
max|x_e^k - x_e^(k-1)| < ε_x,常取ε_x = 0.01。它防止目标函数因局部波动而误判收敛。 - 约束违反量:体积约束误差
|V(x)-V*|/V* < 0.1%。若约束未满足,即使目标稳定也不能停止。
此外还需设置最大迭代次数(如200~500)和灵敏度检查间隔。若连续多次迭代目标函数不降反升,应检查是否出现棋盘格、网格依赖或灵敏度符号错误,而不是简单增加迭代次数。
五、数值稳定性:让迭代不震荡、不病态
拓扑优化最常见的数值问题包括棋盘格、网格依赖、局部极值和灰度单元。对应的稳定化策略有:
- 密度过滤:对单元密度做加权平均,
x̃_e = Σ w(r) x_e / Σ w(r),权重常取w = max(0, r_min - dist),r_min取2~3倍单元尺寸。它消除棋盘格并缓解网格依赖。 - 灵敏度过滤:对
∂c/∂x_e做同样过滤,保持目标函数与设计变量的一致性,避免过滤后灵敏度失配。 - 阻尼与步长限制:OC中
η=0.5,MMA中限制x的移动上限(如move=0.2),防止单步密度跳变过大导致震荡。 - 灰度抑制:通过SIMP惩罚因子
p从1逐步增加到3,或采用连续化策略,使中间密度在迭代后期被推向0/1。
理解这三类算法的差异,本质上是理解“问题结构决定算法选择”:OC利用凸性和单约束构造显式更新,MMA用凸近似把多约束问题拆成可解子问题,SQP用二次模型逼近一般非线性问题。收敛判据和数值稳定性则是保证迭代从“能算”走向“算得对、算得稳”的最后一道关口。