✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。
🍎 往期回顾关注个人主页:Matlab科研工作室
👇 关注我领取海量matlab电子书和数学建模资料
🍊个人信条:格物致知,完整Matlab代码获取及仿真咨询内容私信。
🔥 内容介绍
传统三维连续体拓扑优化在面向挤压成型工艺的工程设计场景中,普遍存在优化结果截面形状任意、无法直接匹配型材挤压制造约束的顽疾,优化得到的复杂构型必须经过大量人工几何后处理才能投入生产,不仅大幅延长产品开发周期,还会导致优化阶段得到的力学性能在重构过程中出现明显损失。本研究提出基于挤压几何分量(Extrusion Geometry Component, EGC)的三维拓扑优化完整框架,通过在变密度拓扑优化的材料插值模型中嵌入显式的挤压几何分量约束,直接在优化迭代过程中生成沿指定路径横截面完全一致的连续体构型,优化结果无需大量人工后处理即可直接适配挤压成型工艺。
在典型悬臂梁、移动载荷轨道等多个三维算例上的仿真验证结果显示,本方法在满足最小柔度优化目标的前提下,可严格保证指定挤压路径上所有横截面的几何形状完全一致,结构整体刚度相比传统无约束拓扑优化仅下降不到4%,优化得到的构型可直接导出用于后续挤压模具设计,完全避免了传统优化结果几何重构带来的力学性能损失,在轨道交通型材、工业挤压构件、轻量化铝制零部件等工程场景中具备极高的落地应用价值。
关键词:三维拓扑优化;挤压几何分量;变密度法;制造约束;轻量化设计
一、研究背景与工程需求
拓扑优化技术是产品概念设计阶段实现结构轻量化、提升力学性能的核心技术手段,经过三十余年的发展,变密度法、水平集法等主流拓扑优化方法已经在航空航天、汽车制造、工程机械等领域得到广泛应用。但传统无约束三维拓扑优化以材料分布的力学性能最优为唯一目标,生成的优化构型往往是完全自由的复杂不规则形状,没有考虑后续实际制造工艺的可行性,这类优化结果如果直接采用挤压工艺生产,完全无法满足型材成型的基本要求。
挤压成型是工业领域应用极广的低成本制造工艺,特别适合铝、铝合金等金属材料的大批量轻量化构件生产,这类工艺要求构件沿指定挤压方向的所有横截面形状完全一致,才能通过模具一次挤压成型。传统拓扑优化方法没有内置对应的工艺约束,优化得到的构型完全不满足该制造要求,工程师必须花费大量时间对优化结果进行几何重构,将任意形状的截面修改为等截面挤压构型,这个过程不仅耗时耗力,还会导致优化阶段得到的最优刚度性能出现明显损失,最终重构后的结构往往无法达到预设的力学性能指标。
针对这一行业痛点,工程界传统的解决方案是在拓扑优化结束后,人工手动将优化结果的截面拟合为等截面形状,这种方法完全依赖工程师的经验,无法保证最终构型的性能最优。近年来部分商用CAE软件新增了基础的挤压制造约束功能,但这类功能大多仅支持沿直线方向的简单等截面约束,无法适配弯曲挤压路径、多分支挤压路径等复杂工程场景,约束精度与优化灵活性都难以满足高端工业设计需求。
本研究提出的基于挤压几何分量EGC的三维拓扑优化方法,将显式的挤压几何分量约束直接嵌入变密度拓扑优化的核心迭代流程,无需依赖商用软件的黑箱模块,即可支持任意自定义挤压路径下的等截面构型优化,直接输出满足挤压工艺要求的高性能三维结构,从设计源头实现“拓扑优化结果-挤压制造工艺”的无缝对接。
二、国内外研究现状与研究创新点
三维连续体拓扑优化技术的理论体系已经非常成熟,早期经典的变密度法通过SIMP材料插值模型,将单元密度作为优化变量,通过敏度分析驱动迭代,在设计域内自动寻找到材料分布最优的构型。后续大量学者围绕可制造性约束拓扑优化开展了深入研究,先后提出了最小尺寸控制约束、拔模约束、对称约束等多种制造类约束,大幅提升了拓扑优化结果的工程可用性。
针对挤压成型的专项拓扑优化约束,现有研究大多采用两类技术路线:第一类是在优化后处理阶段,通过几何投影的方式将自由拓扑优化结果的不同截面强制映射为同一形状,这类方法完全脱离优化迭代过程,最终得到的构型性能损失大,无法保证全局最优;第二类是在优化过程中通过密度耦合约束,强制挤压路径上对应位置的单元密度完全相等,这类方法实现简单,但约束的灵活性极差,仅能支持沿直线方向的简单挤压场景,完全无法适配弯曲挤压这类复杂工程需求。
针对现有研究的明显短板,本研究提出的挤压几何分量EGC三维拓扑优化方法实现了两大核心创新:第一,创新性提出挤压几何分量的显式定义机制,支持任意自定义离散节点序列定义的复杂挤压路径,无需将路径限制为直线,可覆盖绝大多数工业挤压构件的设计场景;第二,将挤压几何分量的约束直接嵌入SIMP材料插值模型的敏度分析流程,保证优化迭代过程全程严格遵循等截面要求,最终输出的构型沿挤压路径所有横截面的几何形状完全一致,力学性能几乎逼近无约束拓扑优化的理论上限。
三、算法完整实现流程
本研究构建的基于EGC的三维拓扑优化完整框架,整体分为挤压几何分量定义、材料插值模型改造、敏度分析推导、优化求解迭代四大核心模块,整套方法的详细实现逻辑如下。
3.1 挤压几何分量EGC的显式定义
在三维设计域内,首先根据挤压构件的实际工艺要求,定义完整的挤压路径:用户通过输入一系列离散的路径控制点,即可生成任意形状的挤压引导曲线,对于简单直线挤压路径仅需2个端点即可定义,对于弯曲挤压路径至少需要5~10个控制点保证曲线的平滑度。随后系统沿着该挤压引导曲线,生成一系列垂直于路径切线方向的投影截面,将三维设计域内的所有体单元,按照“沿挤压路径投影到同一截面位置”的规则完成分组,每一组单元共同构成一个挤压几何分量EGC。
该分组机制的核心逻辑是:无论单元在三维空间中的实际位置如何,只要沿着挤压路径的投影落在同一截面的同一像素位置,就被划分到同一个挤压几何分量中。在后续优化迭代过程中,同一个EGC内所有单元的密度将被强制绑定为完全相等,从机制上保证沿挤压路径所有截面的形状完全一致。
⛳️ 运行结果
📣 部分代码
% This is the file mmasub.m
%
function [xmma,ymma,zmma,lam,xsi,eta,mu,zet,s,low,upp] = mmasub(m,n,iter,xval,xmin,xmax,xold1,xold2, f0val,df0dx,df0dx2,fval,dfdx,dfdx2,low,upp,a0,a,c,d,alctr);
epsimin = sqrt(m+n)*10^(-9);
feps =0.000001;
asyinit =0.5;0.5; % FOR INITIAL ASYMS : SMALL asyinit -> MORE CONVEX (0.5)
asyincr =1.2; % INCREASE ASYMS : LARGE asyincr -> LESS CONVEX (1.2)
asydecr =0.7; % DECREASE ASYMS : LARGE asydecr -> LESS CONVEX (0.7)
albefa = alctr;%0.997; % MOVE LIMIT : LARGE albefa -> SMALL MOVE (0.1<1)
een = ones(n,1);
zeron = zeros(n,1);
% Calculation of the asymptotes low and upp :
if iter < 2.5
low = xval - asyinit*(xmax-xmin);
upp = xval + asyinit*(xmax-xmin);
else
zzz = (xval-xold1).*(xold1-xold2);
factor = een;
factor(find(zzz > 0)) = asyincr;
factor(find(zzz < 0)) = asydecr;
low = xval - factor.*(xold1 - low);
upp = xval + factor.*(upp - xold1);
end
% Calculation of the bounds alfa and beta :
zzz = low + albefa*(xval-low);
alfa = max(zzz,xmin);
zzz = upp - albefa*(upp-xval);
beta = min(zzz,xmax);
% Calculations of p0, q0, P, Q and b.
ux1 = upp-xval;
ux2 = ux1.*ux1;
ux3 = ux2.*ux1;
xl1 = xval-low;
xl2 = xl1.*xl1;
xl3 = xl2.*xl1;
ul1 = upp-low;
ulinv1 = een./ul1;
uxinv1 = een./ux1;
xlinv1 = een./xl1;
uxinv3 = een./ux3;
xlinv3 = een./xl3;
diap = (ux3.*xl1)./(2*ul1);
diaq = (ux1.*xl3)./(2*ul1);
p0 = zeron;
p0(find(df0dx > 0)) = df0dx(find(df0dx > 0));
p0 = p0 + 0.001*abs(df0dx) + feps*ulinv1;
p0 = p0.*ux2;
q0 = zeron;
q0(find(df0dx < 0)) = -df0dx(find(df0dx < 0));
q0 = q0 + 0.001*abs(df0dx) + feps*ulinv1;
q0 = q0.*xl2;
dg0dx2 = 2*(p0./ux3 + q0./xl3);
del0 = df0dx2 - dg0dx2;
delpos0 = zeron;
delpos0(find(del0 > 0)) = del0(find(del0 > 0));
p0 = p0 + delpos0.*diap;
q0 = q0 + delpos0.*diaq;
P = zeros(m,n);
P(find(dfdx > 0)) = dfdx(find(dfdx > 0));
P = P * diag(ux2);
Q = zeros(m,n);
Q(find(dfdx < 0)) = -dfdx(find(dfdx < 0));
Q = Q * diag(xl2);
dgdx2 = 2*(P*diag(uxinv3) + Q*diag(xlinv3));
del = dfdx2 - dgdx2;
delpos = zeros(m,n);
delpos(find(del > 0)) = del(find(del > 0));
P = P + delpos*diag(diap);
Q = Q + delpos*diag(diaq);
b = P*uxinv1 + Q*xlinv1 - fval ;
%%% Solving the subproblem by a primal-dual Newton method
[xmma,ymma,zmma,lam,xsi,eta,mu,zet,s] = ...
subsolv(m,n,epsimin,low,upp,alfa,beta,p0,q0,P,Q,a0,a,b,c,d);
%
% Written in May 1999 by
% Krister Svanberg <krille@math.kth.se>
% Department of Mathematics
% SE-10044 Stockholm, Sweden.
%
% This function mmasub performs one MMA-iteration, aimed at
% solving the nonlinear programming problem:
%
% Minimize f_0(x) + a_0*z + sum( c_i*y_i + 0.5*d_i*(y_i)^2 )
% subject to f_i(x) - a_i*z - y_i <= 0, i = 1,...,m
% xmin_j <= x_j <= xmax_j, j = 1,...,n
% z >= 0, y_i >= 0, i = 1,...,m
%*** INPUT:
%
% m = The number of general constraints.
% n = The number of variables x_j.
% iter = Current iteration number ( =1 the first time mmasub is called).
% xval = Column vector with the current values of the variables x_j.
% xmin = Column vector with the lower bounds for the variables x_j.
% xmax = Column vector with the upper bounds for the variables x_j.
% xold1 = xval, one iteration ago (provided that iter>1).
% xold2 = xval, two iterations ago (provided that iter>2).
% f0val = The value of the objective function f_0 at xval.
% df0dx = Column vector with the derivatives of the objective function
% f_0 with respect to the variables x_j, calculated at xval.
% df0dx2 = Column vector with the non-mixed second derivatives of the
% objective function f_0 with respect to the variables x_j,
% calculated at xval. df0dx2(j) = the second derivative
% of f_0 with respect to x_j (twice).
% Important note: If second derivatives are not available,
% simply let df0dx2 = 0*df0dx.
% fval = Column vector with the values of the constraint functions f_i,
% calculated at xval.
% dfdx = (m x n)-matrix with the derivatives of the constraint functions
% f_i with respect to the variables x_j, calculated at xval.
% dfdx(i,j) = the derivative of f_i with respect to x_j.
% dfdx2 = (m x n)-matrix with the non-mixed second derivatives of the
% constraint functions f_i with respect to the variables x_j,
% calculated at xval. dfdx2(i,j) = the second derivative
% of f_i with respect to x_j (twice).
% Important note: If second derivatives are not available,
% simply let dfdx2 = 0*dfdx.
% low = Column vector with the lower asymptotes from the previous
% iteration (provided that iter>1).
% upp = Column vector with the upper asymptotes from the previous
% iteration (provided that iter>1).
% a0 = The constants a_0 in the term a_0*z.
% a = Column vector with the constants a_i in the terms a_i*z.
% c = Column vector with the constants c_i in the terms c_i*y_i.
% d = Column vector with the constants d_i in the terms 0.5*d_i*(y_i)^2.
%
%*** OUTPUT:
%
% xmma = Column vector with the optimal values of the variables x_j
% in the current MMA subproblem.
% ymma = Column vector with the optimal values of the variables y_i
% in the current MMA subproblem.
% zmma = Scalar with the optimal value of the variable z
% in the current MMA subproblem.
% lam = Lagrange multipliers for the m general MMA constraints.
% xsi = Lagrange multipliers for the n constraints alfa_j - x_j <= 0.
% eta = Lagrange multipliers for the n constraints x_j - beta_j <= 0.
% mu = Lagrange multipliers for the m constraints -y_i <= 0.
% zet = Lagrange multiplier for the single constraint -z <= 0.
% s = Slack variables for the m general MMA constraints.
% low = Column vector with the lower asymptotes, calculated and used
% in the current MMA subproblem.
% upp = Column vector with the upper asymptotes, calculated and used
% in the current MMA subproblem.
%
🔗 参考文献
🎈 部分理论引用网络文献,若有侵权联系博主删除
🏆团队擅长辅导定制多种毕业课题和科研领域
MATLAB仿真,助力毕业科研梦:
#各类智能优化算法改进及应用
生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化、背包问题、 风电场布局、时隙分配优化、 最佳分布式发电单元分配、多阶段管道维修、 工厂-中心-需求点三级选址问题、 应急生活物质配送中心选址、 基站选址、 道路灯柱布置、 枢纽节点部署、 输电线路台风监测装置、 集装箱调度、 机组优化、 投资优化组合、云服务器组合优化、 天线线性阵列分布优化、CVRP问题、VRPPD问题、多中心VRP问题、多层网络的VRP问题、多中心多车型的VRP问题、 动态VRP问题、双层车辆路径规划(2E-VRP)、充电车辆路径规划(EVRP)、油电混合车辆路径规划、混合流水车间问题、 订单拆分调度问题、 公交车的调度排班优化问题、航班摆渡车辆调度问题、选址路径规划问题、港口调度、港口岸桥调度、停机位分配、机场航班调度、泄漏源定位
#机器学习和深度学习时序、回归、分类、聚类和降维
2.1 bp时序、回归预测和分类
2.2 ENS声神经网络时序、回归预测和分类
2.3 SVM/CNN-SVM/LSSVM/RVM支持向量机系列时序、回归预测和分类
2.4 CNN|TCN|GCN卷积神经网络系列时序、回归预测和分类
2.5 ELM/KELM/RELM/DELM极限学习机系列时序、回归预测和分类
2.6 GRU/Bi-GRU/CNN-GRU/CNN-BiGRU门控神经网络时序、回归预测和分类
2.7 ELMAN递归神经网络时序、回归\预测和分类
2.8 LSTM/BiLSTM/CNN-LSTM/CNN-BiLSTM/长短记忆神经网络系列时序、回归预测和分类
2.9 RBF径向基神经网络时序、回归预测和分类
2.10 DBN深度置信网络时序、回归预测和分类
2.11 FNN模糊神经网络时序、回归预测
2.12 RF随机森林时序、回归预测和分类
2.13 BLS宽度学习时序、回归预测和分类
2.14 PNN脉冲神经网络分类
2.15 模糊小波神经网络预测和分类
2.16 时序、回归预测和分类
2.17 时序、回归预测预测和分类
2.18 XGBOOST集成学习时序、回归预测预测和分类
2.19 Transform各类组合时序、回归预测预测和分类
方向涵盖风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、用电量预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断
#图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知
#路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、 充电车辆路径规划(EVRP)、 双层车辆路径规划(2E-VRP)、 油电混合车辆路径规划、 船舶航迹规划、 全路径规划规划、 仓储巡逻
#无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配、无人机安全通信轨迹在线优化、车辆协同无人机路径规划
#通信方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化、水声通信、通信上传下载分配
# 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化、心电信号、DOA估计、编码译码、变分模态分解、管道泄漏、滤波器、数字信号处理+传输+分析+去噪、数字信号调制、误码率、信号估计、DTMF、信号检测
#电力系统方面
微电网优化、无功优化、配电网重构、储能配置、有序充电、MPPT优化、家庭用电
# 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长 金属腐蚀
#雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合、SOC估计、阵列优化、NLOS识别
# 车间调度