2. 一维系统参数化建模基础

一维系统参数化设计的第一步,不是急着写公式或跑优化算法,而是把工程问题“翻译”成计算机能处理的形式。这个翻译过程的核心,是区分清楚四类对象:参数、变量、目标函数和约束条件,并明确它们共同张成的设计空间。只有这四者定义清楚,后续的灵敏度分析、寻优和稳健性评估才有意义。

参数与变量:谁在动,谁不动

在一维问题中,我们通常只关心一个可以连续或离散变化的设计量,例如一根悬臂梁的截面高度 h、一个弹簧的刚度 k、一段传动轴的直径 d。这个“可以被优化器调整的量”称为设计变量,记作 x。与之相对,参数是在一次建模过程中保持固定的量,例如梁长 L=500 mm、材料弹性模量 E=206 GPa、载荷 F=2 kN、许用应力 [σ]=235 MPa。参数不是不能改,而是它们不参与本次优化搜索,只作为背景条件进入计算。

需要特别注意的是,参数与变量的身份会随问题范围变化。若本次只优化截面高度,则梁长是参数;若同时研究不同跨长下的最优截面,梁长就升级为第二个设计变量,问题也从一维变成二维。因此,一维参数化建模的边界必须由设计任务本身划定,而不是由物理对象天然决定。

设计空间:变量允许取值的范围

设计变量 x 的所有允许取值构成设计空间。一维问题的设计空间通常是一个区间,例如 h ∈ [20, 80] mm。这个区间不是随便写的:下限可能来自装配空间或最小壁厚,上限可能来自重量限制或安装包络。设计空间一旦确定,优化就只能在这个“跑道”内寻找最优点;如果最优点落在边界上,往往提示我们边界设置可能过紧,需要回到工程需求重新审视。

目标函数:用什么衡量“好”

目标函数把设计变量映射为一个可比较的数值,用来判断哪个设计更好。一维问题常见的目标包括:质量最小、成本最低、刚度最大、固有频率最高、温升最小等。例如以质量为目标时,可写成 m(h)=ρ·L·b·h,其中 b 为宽度参数。目标函数必须与设计变量有明确的数学关系,否则优化器无法判断改进方向。

当存在多个目标时,通常通过加权、归一化或主目标加约束的方式转化为单目标问题。例如同时希望质量小、变形小,可构造 F(h)=w₁·m(h)/m₀ + w₂·δ(h)/δ₀,其中 m₀、δ₀ 是参考值,用于消除量纲差异。权重 w₁、w₂ 反映设计偏好,属于人为给定的参数,需要在结果中说明其取值依据。

约束条件:不能越过的红线

约束条件规定设计必须满足的工程要求,通常分为等式约束和不等式约束。一维问题中常见的有:

  • 强度约束:最大应力 σ(h) ≤ [σ];
  • 刚度约束:最大挠度 δ(h) ≤ δ_allow;
  • 几何约束:h_min ≤ h ≤ h_max;
  • 工艺约束:h 必须取标准规格中的离散值。

约束把设计空间切分成“可行域”和“不可行域”。优化结果必须落在可行域内,否则再好的目标值也没有工程意义。实际建模时,建议把约束写成统一形式 g_i(x) ≤ 0,便于程序处理和判断。

一维参数化模型的四要素与求解关系 参数(固定) L = 500 mm E = 206 GPa F = 2 kN [σ] = 235 MPa 设计变量 x 截面高度 h h ∈ [20, 80] mm 连续 / 离散 一维搜索方向 目标函数 min m(h) = ρLbh 或 max 刚度 或 min 成本 输出单一数值 约束条件 g(x) ≤ 0 强度:σ(h) ≤ [σ] 刚度:δ(h) ≤ δ_allow 几何:20 ≤ h ≤ 80 限制可行域 设计空间:h ∈ [20, 80] mm 可行域(满足全部约束) 不可行 不可行 参数 + 变量 → 目标函数 → 约束筛选 → 可行域内寻优 → 最优设计 x*

把工程问题抽象为可计算模型

下面以一个悬臂梁轻量化设计为例,完整走一遍抽象过程。对象是一根矩形截面悬臂梁,自由端受集中力 F。设计任务是:在满足强度和刚度要求的前提下,使梁的质量最小。

第一步,确定设计变量。取截面高度 h 为唯一变量,宽度 b 和长度 L 作为参数固定。第二步,写出目标函数:m(h)=ρ·b·L·h。第三步,写出约束。最大弯曲应力出现在固定端:σ(h)=6FL/(b·h²) ≤ [σ];自由端挠度:δ(h)=4FL³/(E·b·h³) ≤ δ_allow。第四步,确定设计空间:h ∈ [20, 80] mm。

把上述内容整理成标准形式:

设计变量:x = h
参数:ρ=7850 kg/m³, b=30 mm, L=500 mm, F=2000 N
      E=206000 MPa, [σ]=235 MPa, δ_allow=1.5 mm
目标:min m(h) = ρ·b·L·h
约束:
  g1: 6FL/(b·h²) - [σ] ≤ 0
  g2: 4FL³/(E·b·h³) - δ_allow ≤ 0
  g3: 20 - h ≤ 0
  g4: h - 80 ≤ 0

代入示例参数后,强度约束要求 h ≥ 29.2 mm,刚度约束要求 h ≥ 38.6 mm,几何约束要求 h ≥ 20 mm。因此可行域实际为 h ∈ [38.6, 80] mm。由于质量随 h 单调递增,最优解取可行域下界 h* ≈ 38.6 mm。这个结果说明:刚度约束是当前设计的控制因素,若想进一步减重,应优先考虑提高材料刚度或放宽挠度限值,而不是继续调整强度相关参数。

建模时建议把每个约束单独写成一行,并标注其物理含义和来源。这样在结果异常时,可以快速定位是哪条约束在“卡”设计,而不是盲目调整变量范围。

建模质量的三个判断点

一个可计算的一维参数化模型是否合格,可以用三个问题检验:第一,目标函数是否对设计变量单调或具有明确极值趋势?如果目标函数与变量无关,优化就失去意义。第二,约束是否覆盖了所有会“否决”设计的工程条件?漏掉一条关键约束,最优解可能根本无法制造或装配。第三,设计空间是否合理?空间过窄可能错过更优解,过宽则可能引入大量不可行区域,降低搜索效率。

此外,参数的单位必须统一。上述示例中长度用 mm、力用 N、应力用 MPa,量纲一致,避免在程序中出现 1000 倍量级的错误。若必须混用单位,应在模型入口处统一换算,并在注释中写明换算关系。

不要把“参数”和“约束”混为一谈。参数是进入计算的固定输入,约束是对结果的限制条件。例如许用应力 [σ] 是参数,而 σ(h) ≤ [σ] 才是约束。混淆两者会导致模型结构混乱,后续灵敏度分析也无法正确区分“改参数”和“改约束”的影响。

从模型到可执行代码的对应关系

参数化模型的最终形态通常是一段可被优化器反复调用的函数。以 Python 风格伪代码为例,其结构如下:

def model(h):
    # 参数
    rho, b, L, F = 7850, 0.03, 0.5, 2000
    E, sigma_allow, delta_allow = 206e9, 235e6, 1.5e-3
    # 目标
    mass = rho * b * L * h
    # 约束
    sigma = 6 * F * L / (b * h**2)
    delta = 4 * F * L**3 / (E * b * h**3)
    g1 = sigma - sigma_allow
    g2 = delta - delta_allow
    g3 = 0.020 - h
    g4 = h - 0.080
    return mass, [g1, g2, g3, g4]

这段代码把前面所有定义落到了可执行层面:输入 h,输出目标值和约束值。优化器只需反复调用它,就能在设计空间内搜索。注意这里所有长度统一为米、力统一为牛顿,保证量纲一致。实际工程中,h 可能还需要按标准规格离散化,此时可在函数内增加取整或查表步骤。

掌握参数、变量、设计空间、目标函数和约束条件这五个概念,并能够把一段工程描述稳定地转换为上述函数形式,就完成了一维参数化建模的基础工作。后续的灵敏度分析、梯度计算和优化算法,都是在这个模型之上展开的。