3. 收敛性基本概念辨析

在 OptiStruct 的优化求解过程中,判断“算完了”和判断“算对了”是两件不同的事。前者看求解器是否正常终止,后者看结果是否满足工程可信度要求。收敛性判据正是连接这两者的桥梁。很多工程师习惯只看目标函数是否趋于平稳,但仅凭一条目标曲线远不足以判断优化是否真正收敛。本节围绕五个核心概念展开:迭代历史、目标函数、约束违反量、设计变量变化率以及 KKT 条件,并说明它们在工程判断中的实际含义。

迭代历史:优化的“行车记录仪”

OptiStruct 每完成一次设计循环,都会在 .out 文件和 .hst 文件中记录当前迭代步的信息。迭代历史就是这些记录的集合,通常包含迭代号、目标函数值、最大约束违反量、设计变量最大变化率、KKT 乘子信息以及是否满足收敛判据等。它相当于优化的行车记录仪:不仅告诉你终点在哪里,还告诉你路径是否平稳、有没有剧烈震荡或长时间停滞。

在 HyperView 或 HyperGraph 中打开 .hst 文件,可以绘制目标函数随迭代步的变化曲线。一个健康的迭代历史通常表现为:前若干步目标快速下降,随后下降速率逐渐减小,最终趋于平稳。如果曲线出现大幅上下跳动,说明设计变量变化过猛或约束边界附近存在冲突;如果曲线长时间水平不动但约束违反量仍高,说明优化可能陷入不可行区域。

目标函数:优化在“追求什么”

目标函数是优化问题中希望最小化或最大化的物理量,例如结构总质量、柔度、最大应力或某阶频率。在 OptiStruct 中,目标函数通过 DESOBJ 或响应引用定义。目标函数的收敛并不意味着结果一定可信,因为目标函数下降可能以严重违反约束为代价。因此,目标函数必须与约束违反量联合观察。

工程上常关注两个指标:目标函数的相对变化量和绝对变化量。相对变化量定义为相邻两次迭代目标值之差与当前目标值之比。例如,第 12 步目标值为 2.45 kg,第 13 步为 2.43 kg,则相对变化约为 0.82%。若连续若干步相对变化小于设定容差(如 0.1%),可认为目标已趋于稳定。但要注意,目标稳定只是收敛的必要条件之一,不是充分条件。

约束违反量:可行性的“红线指标”

约束违反量衡量当前设计点偏离约束边界的程度。对于不等式约束 g(x) ≤ 0,违反量定义为 max(0, g(x));对于等式约束,则取绝对值。OptiStruct 在每次迭代中会输出最大约束违反量,通常记为 maxcon 或类似名称。

工程判断中,约束违反量比目标函数更值得优先关注。如果最大约束违反量在收敛时仍大于容差(默认通常在 1e-3 到 1e-2 量级,视问题而定),即使目标函数已经平稳,结果也不应被接受。常见原因包括:约束本身相互冲突、设计变量上下限过紧、网格或载荷条件导致可行域为空。此时需要回到模型定义,而不是强行放宽收敛容差。

设计变量变化率:设计是否“安定下来”

设计变量变化率反映相邻两次迭代之间设计变量的最大相对改变量。OptiStruct 通常输出 maxdv 或 delx 类指标。它回答的问题是:设计本身是否已经稳定,而不是目标或约束是否稳定。

一个常见误区是:目标函数平稳就认为设计稳定。实际上,可能存在目标函数几乎不变、但设计变量仍在两个相近构型之间来回切换的情况。这种“目标平稳但设计振荡”的现象在拓扑优化中尤其常见。因此,设计变量变化率是判断收敛独立性的重要补充。若 maxdv 持续大于 1e-2,即使目标曲线看起来平滑,也应检查是否存在棋盘格、网格依赖或局部模态切换。

KKT 条件:收敛的数学根基

KKT 条件(Karush-Kuhn-Tucker 条件)是约束优化问题最优解的一阶必要条件。对于最小化问题,在满足约束规范的前提下,最优解处应存在拉格朗日乘子,使得目标梯度与约束梯度的线性组合为零,且乘子满足非负性和互补松弛条件。

在 OptiStruct 的工程语境中,不需要手动推导 KKT 方程,但需要理解其工程含义:KKT 条件满足程度越高,说明当前设计点越接近数学意义上的局部最优。OptiStruct 在 .out 文件中会输出与 KKT 相关的收敛指标,例如 KKT 或 Lagrangian 信息。若 KKT 残差较大,说明当前点还不是稳定最优解,即使目标函数和约束违反量看起来都不错。

工程判断顺序建议:先看约束违反量是否满足容差,再看设计变量变化率是否足够小,然后看目标函数是否平稳,最后参考 KKT 指标确认最优性。四者都满足,收敛结论才具备可信度。

OptiStruct 收敛性判据的工程含义与联合判断 迭代历史提供全过程记录,四类指标分别回答“目标是否稳定、约束是否可行、设计是否安定、是否接近最优” 迭代历史(.hst / .out) 记录每次设计循环:迭代号、目标值、最大约束违反量、设计变量最大变化率、KKT 残差、收敛状态 目标函数 约束违反量 迭代步 → 目标函数 回答:优化在追求什么? • 总质量 / 柔度 / 应力 • 相对变化量 < 0.1% • 连续多步趋于平稳 注意:目标平稳 ≠ 收敛 可能以违反约束为代价 约束违反量 回答:设计是否可行? • max(0, g(x)) 最大值 • 默认容差 1e-3 ~ 1e-2 • 优先于目标函数检查 超差原因:约束冲突 变量限过紧 / 可行域为空 设计变量变化率 回答:设计是否安定? • maxdv / delx 指标 • 建议 < 1e-2 • 独立于目标函数判断 目标平稳但设计振荡 警惕棋盘格 / 网格依赖 KKT 条件 回答:是否接近最优? • 一阶最优性必要条件 • 拉格朗日乘子非负 • 互补松弛条件 KKT 残差大 → 未稳定 即使目标与约束看似良好 工程判断顺序与联合收敛结论 ① 约束违反量 是否满足容差? ② 设计变量变化率 设计是否安定? ③ 目标函数 是否趋于平稳? ④ KKT 残差 是否接近最优? 联合收敛 结论可信 四类指标分别对应可行性、稳定性、目标性与最优性,缺一不可;迭代历史是承载全部判断依据的数据源

五类概念的联合判断逻辑

把上述五个概念放在一起,可以形成一条清晰的工程判断链。第一步,检查约束违反量是否满足容差。如果最大约束违反量仍高于 1e-2,无论目标函数多平稳,都应判定为不可行,需要回到模型检查约束定义或设计空间。第二步,检查设计变量变化率是否足够小。若 maxdv 持续大于 1e-2,说明设计仍在明显调整,收敛结论不成立。第三步,观察目标函数是否连续多步趋于平稳。第四步,参考 KKT 残差确认是否接近局部最优。只有四类指标同时满足,才能给出可信的收敛结论。

需要特别强调的是,OptiStruct 的默认收敛容差是一组工程折中值,并非适用于所有问题。对于安全关键结构,建议收紧约束违反量容差并增加迭代步数上限;对于概念阶段的拓扑优化,可以适当放宽设计变量变化率要求,但必须配合制造约束检查。收敛性判断不是一次性的开关动作,而是贯穿优化全过程的持续评估。

实用检查清单:打开 .out 文件,依次确认:① 最大约束违反量是否小于设定容差;② 设计变量最大变化率是否连续三步小于 1e-2;③ 目标函数相对变化是否连续三步小于 0.1%;④ KKT 残差是否呈下降趋势并处于合理量级;⑤ 迭代历史曲线是否存在异常震荡或长时间停滞。五项均通过,方可认为收敛结果具备工程可信度。

理解这些概念的工程含义,最终是为了避免两种典型误判:一是把“求解器正常结束”等同于“优化收敛”,二是把“目标函数平稳”等同于“结果可信”。迭代历史提供数据,目标函数、约束违反量、设计变量变化率和 KKT 条件分别从不同维度回答收敛性问题。只有把它们放在一起看,才能对 OptiStruct 优化结果的可信度做出有依据的判断。