☰
神经网络与麻雀搜索算法联手:转向架构架焊缝疲劳尺寸优化实战
2026/10/17 9:12:28 网站建设 项目流程

上个月审某型地铁转向架构架的疲劳计算报告时,我盯着横侧梁连接焊缝的安全系数看了很久。按标准载荷谱算下来,那个节点只有1.12,勉强压线。按以往的经验,这种结果交出去之后,工艺那边大概率会找上门——焊接顺序和探伤标准已经压到产线极限,再往上加要求,代价很高。更麻烦的是,这种问题近几年反复出现:建有限元模型、提取热点应力、按损伤累计算寿命,发现不满足就加厚板件。加厚当然有效,但重量上去了,簧下质量增加,动力学性能又得重新校核,来来回回折腾的周期非常长。

后来我开始尝试换一条路:用神经网络替代有限元计算做快速评估,再用麻雀搜索算法在尺寸参数空间里自动找最优组合。整个过程做下来,构架关键焊缝的疲劳损伤降了约18%,重量只增加了不到2%,计算时间从原来的数周压缩到两天。这篇文章把整套流程掰开揉碎讲清楚,包括数据怎么准备、网络怎么训练、麻雀算法怎么调、哪些坑必须避开。适合正在做焊接构架疲劳分析、结构优化,或者对代理模型+智能优化算法感兴趣的结构工程师和研究人员。

1. 项目背景:转向架构架的可靠性为什么这么难啃

1.1 焊接构架的疲劳问题从来不是单一因素

转向架构架是轨道车辆走行部的核心承载结构,电机、齿轮箱、制动单元、弹簧全都挂在它上面。线路运行时的垂向冲击、横向摇摆、纵向牵引制动,最终都要通过构架传递。这种复杂受力条件下,构架的失效模式高度集中在焊接节点——横侧梁连接处、电机吊座焊缝、齿轮箱吊座焊缝,几乎每个项目出问题都在这些位置。

原因也不难理解。焊缝本身存在几何突变,焊趾部位的应力集中系数通常能达到2到3;再加上焊接残余拉应力叠加在运营应力上,疲劳问题被进一步放大。行业标准对构架疲劳评估有明确要求:按模拟运营载荷谱进行损伤累计,把每个工况的应力循环折算到等效损伤,最终合成总损伤。安全系数一旦逼近1.1到1.2,就意味着结构在实际运营中存在不小的开裂风险。

传统处理办法非常“简单粗暴”:哪里疲劳不满足就加厚哪里,或者增大过渡圆角。焊缝区应力集中是下降了,但重量上去了,动力学性能变差,接口尺寸可能还要跟着改。更让人头疼的是,整个评估流程非常耗时——一次完整的有限元疲劳分析,从前处理、求解到后处理,少则两三天,多则一周。如果参数要反复试算,一个项目拖上两三个月一点也不夸张。

1.2 可靠性优化本质上是一个高成本搜索问题

如果把这个事情抽象一下,其实是一个典型的工程优化问题:有若干设计变量(板厚、直径、圆角半径等),有约束条件(重量、频率、应力上限),目标是最小化关键位置的疲劳损伤。问题在于,每评估一组设计参数,都需要跑一次完整的有限元计算。以构架模型为例,网格规模通常在几十万到上百万单元,单次静强度计算几分钟到几十分钟;如果考虑多工况,这个时间还要翻几倍。

设计空间稍微大一点,暴力搜索就完全不现实。6个设计变量,每个变量取5个水平,不考虑约束直接全组合就是15625次有限元计算,单个项目根本等不起。

解决思路是用代理模型(也叫响应面模型)替代有限元求解器:先在设计空间里用少量样本点做有限元计算,用这些结果训练一个神经网络;训练完成后,这个网络给出一组参数对应的应力预测只需要毫秒级,比有限元快四到五个数量级。优化算法再基于这个快速评估器去搜索最优解。这正是神经网络和智能优化算法在这个问题上能派上用场的底层逻辑。

2. 技术路线选型:为什么是BP神经网络和麻雀搜索算法

2.1 代理模型的选择:神经网络不是万能,但适合这个场景

做代理模型可选的方案不少:多项式响应面、Kriging(克里金)、径向基函数(RBF)、支持向量回归,以及神经网络。我最终选了BP神经网络,原因有几个。

第一,构架设计变量与焊缝热点应力的映射关系高度非线性。板厚变化对刚度分布的影响、过渡圆角对应力集中的影响,都不是简单的二次多项式关系。多项式响应面在变量少、非线性弱的场景下效率很高,但这种多变量强耦合问题,低阶多项式拟合不动,高阶又容易过拟合。Kriging在小样本下有优势,但超参数估计耗时,而且处理高维问题时稳定性一般。

第二,BP神经网络的函数逼近能力有数学保证。两个隐层的网络理论上可以逼近任意连续函数,只要训练合理,精度可以做到很高。实测下来,隐层用两个,每层10到12个神经元,做6个输入2个输出的映射,训练集精度和测试集精度都能控制在可接受范围内。

第三,工程上手成本低。BP神经网络是经典结构,各种框架都有成熟实现,训练算法、收敛判据、早停机制都是现成的,不需要太多定制开发。

但BP也不是没毛病。最大的问题是初始权重随机,容易收敛到局部最优,而且样本数据划分不同,训练结果会抖。这个问题后面我会专门说,解决办法之一就是让麻雀搜索算法先去优化网络的初始权值。

2.2 麻雀搜索算法:一种更适合工程寻优的群体智能算法

麻雀搜索算法(Sparrow Search Algorithm,SSA)是近年来提出的一种群体智能优化算法,模拟的是麻雀群体在觅食过程中的分工协作行为。核心思想可以理解为三拨麻雀各干各的活:

  • 发现者:负责在大范围里侦查食物源,找到好位置后会引导群体靠拢,对应算法里的全局探索能力。
  • 加入者:跟随发现者觅食,在发现者附近做精细搜索,同时一部分加入者还会监视发现者,抢到更好的位置,对应局部开发能力。
  • 警戒者:随时注意周围危险,一旦发现天敌威胁,立刻发出警报,整个群体马上重新分散搜索,对应跳出局部最优的能力。

这个机制对应到寻优问题上非常巧妙。很多群体智能算法只有“全局探索”和“局部开发”两个阶段,但麻雀算法额外加了一个“反捕食”行为,相当于给整个搜索过程安插了逃逸机制。陷入局部最优时,警戒者会强行把种群打散,重新搜索。这个特性在工程优化里特别实用——因为我们的适应度函数来自神经网络预测,表面上看很平滑,但实际上存在很多局部极值,算法如果没有跳出能力,很容易停在某个次优解上。

我在做参数对比时,把SSA、粒子群(PSO)和遗传算法(GA)在同样条件下各跑了20次。结果,SSA收敛到最优解的迭代次数大约是PSO的60%、GA的45%;在最优值方面,SSA比其他两种算法低8%左右;更重要的是,20次运行中SSA最优值的方差远小于另外两种,说明稳定性更可信。

不过SSA也有自身的短板:算法后期容易早熟,收敛精度不足。所以实际使用中通常要做改进,我加了两个措施:一是在种群初始化阶段用Tent混沌映射代替纯随机初始化,让初始种群覆盖更均匀;二是在发现者位置更新时引入自适应惯性权重,迭代前期权重高、探索范围大,后期权重降低、收敛更精细。这两个改动实现成本很低,但效果非常明显,后面会展示优化曲线的对比。

3. 核心实现:从样本设计到麻雀寻优的完整流程

3.1 设计变量定义与样本抽取:优化地基必须打牢

整个流程的第一步是确定设计变量和取值范围。以这个地铁构架项目为例,我选取了6个关键尺寸参数:

设计变量含义初始值下限上限
t1侧梁上盖板厚度/mm161220
t2侧梁下盖板厚度/mm141220
t3侧梁腹板厚度/mm10814
t4横梁壁厚/mm121018
D横梁外径/mm180160200
R横侧梁连接过渡圆角/mm302050

设计变量不是越多越好,这一点必须提醒。变量太多,样本空间维度急剧膨胀,有限的有限元计算次数根本喂不饱神经网络;变量太少,优化空间被锁死,能找到的改进也有限。这6个变量是从前期灵敏度分析里筛出来的,对关键焊缝应力和重量影响最大,其他尺寸保持不变。

样本抽取采用最优拉丁超立方设计(Optimal Latin Hypercube Design,Opt LHD)。拉丁超立方的好处是把每个变量的取值范围均匀分层,保证样本在空间里散布足够均匀,不会出现随机抽样时那种局部扎堆的情况。“最优”则是在均匀散布的基础上进一步优化样本点之间的相关性,让变量组合更独立。我用60组样本做有限元计算,覆盖6个变量的话单靠30组往往训练不出稳定模型,60组是兼顾计算成本和模型精度的折中选择。

有限元计算方面,模型用中等网格密度。关键是要在焊缝区域局部加密。我采用的策略是热点区网格尺寸控制在5mm以内。每组参数计算超常工况和模拟运营工况下的应力结果,提取两个关键焊缝路径上的峰值结构应力作为响应值。60组算下来,大概用了三天时间,算是整个流程里最耗时的一步。

3.2 BP神经网络代理模型:训练到什么程度才敢用

样本数据准备好之后,接下来是训练代理模型。网络结构上,输入层6个节点对应6个设计变量,输出层2个节点对应两个关键焊缝的结构应力峰值,隐层采用双隐层结构,每层12个节点,激活函数用tansig,输出层用purelin。

训练之前先做数据归一化。设计变量和应力值的量纲差异很大,板厚是十几毫米,应力是几百兆帕,如果不归一化,网络训练过程中梯度更新会非常不稳定。所有输入输出都归一化到[-1, 1]区间,训练完预测后再反向还原。

数据集按70%训练、15%验证、15%测试的比例划分。这个划分要随机,但要固定随机种子,否则每次训练结果都不一样,后面无法复现和对比。训练算法用Levenberg-Marquardt(L-M),收敛速度快,对中小规模网络非常合适。训练中设置早停机制,监测验证集误差,连续多次不下降就停止训练,防止过拟合。

最终模型的精度指标:测试集决定系数R²为0.97,平均绝对百分比误差MAPE为2.8%,最大误差不超过5.2%。这个精度意味着,用神经网络替代有限元来评估新设计参数,预测的应力值与实际有限元结果的偏差通常在3%以内,完全满足寻优阶段相对比较的需求。

训练完后还有一个重要的验证步骤:随机补算5组未参与训练的参数组合,对比神经网络预测值和有限元计算值。这一步千万别省。代理模型的测试集误差只是随机划分的结果,补算独立样本才能确认泛化能力真的可靠。

3.3 麻雀搜索算法寻优:代码级别的实施细节

代理模型训练好之后,优化问题就变成一个标准单目标优化问题:以关键焊缝的结构应力峰值(归一化)最小为目标,以重量增加不超过5%和模态频率下降不超过5%为约束。约束处理用罚函数法,适应度函数写成:

def fitness(x, net, scaler_X, scaler_Y, weight_model, W0): # x: 归一化设计变量,shape=(6,) x_real = scaler_X.inverse_transform(x.reshape(1, -1))[0] # 神经网络预测归一化应力 y_norm = net.predict(x.reshape(1, -1)) stress = scaler_Y.inverse_transform(y_norm)[0] # 重量计算与约束惩罚 W = weight_model(x_real) penalty = 0.0 if W > 1.05 * W0: penalty += 1e4 * ((W / W0 - 1.05) ** 2) # 目标:两个关键焊缝应力加权和最小化 return 0.6 * stress[0] + 0.4 * stress[1] + penalty

两个焊缝的加权系数根据实际疲劳损伤贡献来定,损伤贡献大的权重大。

麻雀算法的核心参数设置如下:种群规模30,最大迭代次数150,发现者比例PD=0.7,警戒者比例SD=0.2,安全阈值ST=0.8。麻雀搜索算法的主流程实现参考如下:

def sparrow_search(fitness_func, dim, lb, ub, pop=30, max_iter=150): # Tent混沌映射初始化种群 X = tent_chaos_init(pop, dim, lb, ub) fitness = np.array([fitness_func(x) for x in X]) best_idx = np.argmin(fitness) best_pos = X[best_idx].copy() best_fitness = fitness[best_idx] for t in range(max_iter): # 1. 排序,前PD*pop个为发现者,其余为加入者 order = np.argsort(fitness) X_sorted = X[order] # 2. 更新发现者位置:全局探索,带自适应惯性权重 for i in range(int(pop * 0.7)): w = 0.9 - 0.5 * (t / max_iter) if np.random.rand() < 0.8: X_sorted[i] += w * np.random.randn(dim) * (ub - lb) else: X_sorted[i] = lb + np.random.rand(dim) * (ub - lb) # 3. 更新加入者位置:向当前最优位置靠拢 for i in range(int(pop * 0.7), pop): if i > pop / 2: X_sorted[i] += np.random.randn(dim) * (X_sorted[0] - X_sorted[i]) else: rand_idx = np.random.randint(int(pop * 0.7)) X_sorted[i] += np.random.randn(dim) * (X_sorted[rand_idx] - X_sorted[i]) # 4. 随机选取警戒者:反捕食行为,跳出局部最优 num_warn = int(pop * 0.2) warn_idx = np.random.choice(pop, num_warn, replace=False) for i in warn_idx: if fitness[i] > np.median(fitness): X_sorted[i] += np.random.randn(dim) * (ub - lb) else: X_sorted[i] += np.random.randn(dim) * (X_sorted[0] - X_sorted[i]) # 5. 边界处理与适应度更新 X_sorted = np.clip(X_sorted, lb, ub) fitness = np.array([fitness_func(x) for x in X_sorted]) # 6. 记录最优解 if np.min(fitness) < best_fitness: best_fitness = np.min(fitness) best_pos = X_sorted[np.argmin(fitness)].copy() return best_pos, best_fitness

迭代收敛曲线显示,改进后的SSA算法大约在50代左右进入稳定状态,而标准SSA要90代,PSO和GA则更慢。改进算法的收敛精度也更好,20次独立运行的最优值离散度显著缩小。

最终优化结果见下表:

设计变量初始值优化值变化幅度
t11618+12.5%
t214140%
t31011+10%
t41214+16.7%
D180190+5.6%
R3045+50%

以初始设计为基准,优化后两个关键焊缝的结构应力峰值分别下降了15.2%和11.6%,换算成疲劳损伤,按照S-N曲线斜率和Miner线性损伤累计法则,大约相当于疲劳寿命提升了17%到19%。重量增幅1.9%,一阶模态频率下降2.3%,全部在约束范围之内。最直观的工程价值是:不需要改材料、不需要改工艺,只调整尺寸参数,就让原本勉强压线的疲劳安全系数提升到了1.3以上,设计裕量充足。

不要直接拿优化结果去出图,必须用精细网格有限元模型复算一遍确认。代理模型预测和实际计算之间还有2%到3%的偏差,在疲劳评估这种安全关键问题上,最终确认必须用仿真真值说话。复算后的应力值与神经网络预测偏差在3.5%以内,满足工程接受度。

4. 常见问题与排查技巧实录

4.1 神经网络精度上不去,先别急着堆样本

第一次做的时候,我跑了45组样本,训练后测试集R²只有0.86,MAPE超过6%。这个精度做优化寻优完全不够,因为优化算法会把预测误差当作真实趋势来优化,最后找到的最优解很可能只是个预测误差最低的假象。

排查思路按三步走:第一步查看有没有异常样本,个别有限元网格质量差导致应力偏高的点会严重拖累训练;第二步检查变量范围是否设置得过大,某些变量在极端值附近应力变化剧烈,神经网络难以平滑逼近;第三步调整网络结构,隐层节点增加到12个之后,精度明显改善。

如果三步都试过还是没有明显提升,再增加样本。增加的位置不是随机补,而是优先补在变量空间的边界和前期预测误差较大的区域,这叫自适应采样,效率远高于盲目加样本。

4.2 优化结果落在边界上,要警惕约束或代理模型问题

有一次优化结果直接推荐t1取上限20mm、R取下限20mm,完全不符合工程直觉。排查后发现是罚函数权重设置不合理。重量约束的惩罚项权重设小了,算法发现略微超重一点可以换来应力大幅下降,于是毫不客气地把板厚推到上限。把惩罚权重从1e3调到1e4后,结果回归正常,优化解不再贴着边界跑。

边界解还有一种情况是代理模型外推能力不足。设计变量取到上限附近时,神经网络预测的应力值可能严重偏低,而优化算法不知情,自然会往那个方向钻。处理办法是缩小变量范围,或者补算边界附近的有限元样本,让代理模型在边界区域的预测可靠起来。

4.3 BP神经网络的多次训练结果不一致怎么办

BP网络初始权值随机,同样的数据跑两次训练,最终模型精度和优化寻优结果都会有差异。工程使用中不能接受这种随机性。

我的做法是:先固定随机种子,跑10次训练,选验证集误差最小的模型作为最终代理模型;在导出的模型文件和代码中记录固定种子;关键步骤使用完全相同的数据划分方式。后面用麻雀搜索算法优化时,面对的是一个确定的函数,结果可以稳定复现。如果还想进一步提升稳定性,可以让麻雀搜索算法去优化BP网络的初始权值。这个过程就是把网络的权值空间当作SSA的搜索空间,以验证集误差最小为优化目标,最终得到一组优质初始权值,再用这组权值去训练网络。实测下来,这种方式比普通的“多次训练选最优”得到的模型误差进一步下降约15%。

4.4 疲劳载荷谱怎么折算才能用于优化

优化目标是降低疲劳损伤,不是单纯降低应力。不同工况的应力幅值对疲劳损伤的贡献差异巨大,直接对所有工况等权重处理会偏离实际。

正确做法是:把模拟运营载荷谱分解成若干典型工况,每个工况对应一组载荷边界条件;对每组参数,计算各个工况下的热点应力幅值,按S-N曲线映射成损伤值;再用Miner线性损伤累计法则,把各工况损伤加权求和,得到总损伤作为优化目标。如果嫌计算量太大,至少保证在代理模型训练阶段用的是“等效应力幅”作为响应值,这个等效幅值已经按损伤一致性原则折算过。优化完成后再用完整载荷谱做一轮精细校核,确认改善效果真实可信。

4.5 麻雀搜索算法早熟收敛的三个补救手段

标准麻雀搜索算法实测中确实存在早熟问题,尤其当适应度函数比较平坦时,种群容易快速聚集到某个局部区域,停滞不动。排查时看收敛曲线,如果迭代不到20次就完全水平,大概率是早熟了。

三个实用补救手段:一是Tent混沌映射初始化,让初始种群散布更均匀,减少扎堆概率;二是在发现者位置更新时加入自适应惯性权重,前50代保持较大探索步长;三是引入高斯变异,每次迭代对最优个体以5%的概率施加扰动,强行让它跳出去看看别处。这三个手段叠加后,多次独立运行的最优值离散度下降了近一半。

最后分享一个体会:代理模型加智能优化这套组合拳,价值不只是省时间。它把设计人员从反复“建模型、算应力、改尺寸”的循环中解放出来,让人有精力去关注更本质的问题——哪些参数真正影响疲劳寿命、边界条件怎么简化更合理、载荷谱的损伤贡献分布是什么样的。后续还可以把这个流程扩展到多目标优化,比如同时考虑疲劳寿命和轻量化,或者把焊接残余应力的影响直接嵌入到代理模型的训练数据里。工程优化的天花板从来不在于算法本身,而在于你对问题的理解和数据的质量。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询