拓扑优化经典 行程序注释
结构拓扑优化
拓扑优化(topology optimization)1. 基本概念拓扑优化是结构优化的一种。
结构优化可分为尺寸优化、形状优化、形貌优化和拓扑优化。
其中尺寸优化以结构设结构优化类型的差异计参数为优化对象,比如板厚、梁的截面宽、长和厚等;形状优化以结构件外形或者孔洞形状为优化对象,比如凸台过渡倒角的形状等;形貌优化是在已有薄板上寻找新的凸台分布,提高局部刚度;拓扑优化以材料分布为优化对象,通过拓扑优化,可以在均匀分布材料的设计空间中找到最佳的分布方案。
拓扑优化相对于尺寸优化和形状优化,具有更多的设计自由度,能够获得更大的设计空间,是结构优化最具发展前景的一个方面。
图示例子展示了尺寸优化、形状优化和拓扑优化在设计减重孔时的不同表现。
2. 基本原理拓扑优化的研究领域主要分为连续体拓扑优化和离散结构拓扑优化。
不论哪个领域,都要依赖于有限元方法。
连续体拓扑优化是把优化空间的材料离散成有限个单元(壳单元或者体单元),离散结构拓扑优化是在设计空间内建立一个由有限个梁单元组成的基结构,然后根据算法确定设计空间内单元的去留,保留下来的单元即构成最终的拓扑方案,从而实现拓扑优化。
3. 优化方法目前连续体拓扑优化方法主要有均匀化方法[1]、变密度法[2]、渐进结构优化法[3](ESO)以及水平集方法[4]等。
离散结构拓扑优化主要是在基结构方法基础上采用不同的优化策略(算法)进行求解,比如程耿东的松弛方法[5],基于遗传算法的拓扑优化[6]等。
4. 商用软件目前,连续体拓扑优化的研究已经较为成熟,其中变密度法已经被应用到商用优化软件中,其中最著名的是美国Altair公司Hyperworks系列软件中的Optistruc t和德国Fe-design公司的Tosca等。
前者能够采用Hypermesh作为前处理器,在各大行业内都得到较多的应用;后者最开始只集中于优化设计,而没有自己的有限元前处理器,操作较为麻烦,近年来和Ansa联盟,开发了基于Ansa的前处理器,但在国内应用的较少。
ANSYS教程二---拓扑优化
第二章拓扑优化什么是拓扑优化?拓扑优化是指形状优化,有时也称为外型优化。
拓扑优化的目标是寻找承受单载荷或多载荷的物体的最佳材料分配方案。
这种方案在拓扑优化中表现为“最大刚度”设计。
与传统的优化设计不同的是,拓扑优化不需要给出参数和优化变量的定义。
目标函数、状态变量和设计变量(参见“优化设计”一章)都是预定义好的。
用户只需要给出结构的参数(材料特性、模型、载荷等)和要省去的材料百分比。
拓扑优化的目标——目标函数——是在满足结构的约束(V)情况下减少结构的变形能。
减小结构的变形能相当于提高结构的刚度。
这个技术通过使用设计变量( i)给每个有限元的单元赋予内部伪密度来实现。
这些伪密度用PLNSOL,TOPO命令来绘出。
例如,给定V=60表示在给定载荷并满足最大刚度准则要求的情况下省去60%的材料。
图2-1表示满足约束和载荷要求的拓扑优化结果。
图2-1a表示载荷和边界条件,图2-2b表示以密度云图形式绘制的拓扑结果。
图2-1 体积减少60%的拓扑优化示例如何做拓扑优化拓扑优化包括如下主要步骤:1.定义拓扑优化问题。
2.选择单元类型。
3.指定要优化和不优化的区域。
4.定义和控制载荷工况。
5.定义和控制优化过程。
6.查看结果。
拓扑优化的细节在下面给出。
关于批处理方式和图形菜单方式不同的做法也同样提及。
定义拓扑优化问题定义拓扑优化问题同定义其他线性,弹性结构问题做法一样。
用户需要定义材料特性(杨氏模量和泊松比),选择合适的单元类型生成有限元模型,施加载荷和边界条件做单载荷步或多载荷步分析。
参见“ANSYS Analysis Procedures Guides”第一、二章。
选择单元类型拓扑优化功能可以使用二维平面单元,三维块单元和壳单元。
要使用这个功能,模型中只能有下列单元类型:二维实体单元:SOLID2和SOLID82三维实体单元:SOLID92和SOLID95壳单元:SHELL93二维单元用于平面应力问题。
ANSYS拓扑优化命令流解释
如何利用AN SYS进行拓扑优化就目前而言,利用有限元进行优化主要分成两个阶段:(1)进行拓扑优化,明确零件最佳的外形、刚度、体积,或者合理的固有频率,主要目的是确定优化的方向;(2)进行尺寸优化,主要目的是确定优化后的的零件具体尺寸值,通常是在完成拓扑优化之后,再执行尺寸优化。
在ANSYS中,利用拓扑优化,可以完成以下两个目的:(1)在特定载荷和约束的条件下,确定零件的最佳外形,或者最小的体积(或者质量);(2)利用拓扑优化,使零件达到需要的固有频率,避免在使用过程中产生共振等不利影响。
1.ANSYS进行拓扑优化的进行拓扑优化的过程在ANSYS中,执行优化,通常分为以下6个步骤:1.1定义需要求解的结构问题对于结构进行优化分析,定义结构的物理特性必不可少,例如,需要定义结构的杨氏模量、泊松比(其值在0.1~0.4之间)、密度等相关的结构特性方面定义需要求解的结构问题,选择合理的优化单元类型,设定优化和非优化的区域定义载荷步或者需要提取的频率对优化过程进行定义和控制,计算并查看结果的信息,以供结构计算能够正常执行下去。
1.2选择合理的优化单元类型,在ANSYS中,不是所有的单元类型都可以执行优化的,必须满足如下的规定:(1)2D平面单元:PLANE82单元和P L ANE183单元;(2)3D实体单元:SOLID92单元和S O LID95单元;(3)壳单元:SHELL93单元。
上述单元的特性在帮助文件中有详细的说明,同时对于2D单元,应使用平面应力或者轴对称的单元选项。
1.3指定优化和非优化的区域在ANSYS中规定,单元类型编号为1的单元,才执行优化计算;否则,就不执行优化计算。
拓扑优化_精品文档
-1整数变量问题变为0~1间的连续变量优化模型,获得方程(在设计变
量上松弛整数约束)的最直接方式是考虑以下问题:
min u,
uout
N
s.t.: min 1 min e Ke u f e1
N
vee V
e1
0 e 1, e 1,2,, N
其中 e 可取0-1之间的值
(6)
然而这种方程会导致较大区域内 e 是在0-1之间的值,所以必须添加额外 的约束来避免这种“灰色”区域。要求是优化结果基本上都在 e 1 或
而对于结构拓扑优化来说,其所关心的是离散结构中杆件之间的最优 连接关系或连续体中开孔的数量及位置等。拓扑优化力图通过寻求结构的 最优拓扑布局(结构内有无孔洞,孔洞的数量、位置、结构内杆件的相互 联接方式),使得结构能够在满足一切有关平衡、应力、位移等约束条件 的情形下,将外荷载传递到支座,同时使得结构的某种性能指标达到最优。 拓扑优化的主要困难在于满足一定功能要求的结构拓扑具有无穷多种形式, 并且这些拓扑形式难以定量的描述即参数化。
结构渐进优化法(简称ESO法)
通过将无效的或低效的材料 一步步去掉,获得优化拓扑,方法通 用性好,可解决尺寸优化,还可同时 实现形状与拓扑优化(主要包括应力, 位移/刚度和临界应力等约束问题的 优化)。
2.问题的设定
柔顺机构的拓扑优化
首先假设线性弹性材料有微小的变形
柔顺结构的一个重要运用在于机电系统(MicroElectroMechanical Systems(MEMS),在该系统中小规模的计算使得很难利用刚体结构来实现铰链、 轴承以及滑块处的机动性。
如果我们只考虑线性弹性材料(只发生微小变形)的分析问题,则决定 输出位移的的有限元方法公式为:
拓扑优化方法
拓扑优化方法拓扑优化方法是一种有效的优化方法,目前被广泛应用于求解复杂优化问题。
本文通过介绍拓扑优化方法的基本原理、典型案例、优势与应用等方面,来深入探讨拓扑优化的相关知识。
一、什么是拓扑优化方法拓扑优化方法(Topology Optimization,简称TO)是一种解决复杂最优化问题的有效优化方法,它是利用拓扑的可变性,用于求解复杂拓扑结构组合优化问题的一种新兴方法。
拓扑优化方法既可以用来求解有限元分析(Finite Element Analysis,简称FEA)中有序结构问题,也可以用来求解无序结构问题。
二、拓扑优化方法的基本原理拓扑优化方法的基本原理是:在设定的最优化目标函数及运算范围内,利用优化技术,使得复杂结构拓扑结构达到最优,从而达到最优化设计目标。
拓扑优化方法的优势主要体现在重量最小化、强度最大化、结构疲劳极限优化等多种反向设计问题上。
此外,由于拓扑优化方法考虑到结构加工、安装、维护等方面,其结构设计更加实用性好。
三、拓扑优化方法的典型案例1、航空外壳优化:目前,航空外壳的拓扑优化设计可以使得外壳的重量减轻50%以上,同时提升外壳的强度和耐久性。
2、机械联轴器优化:拓扑优化方法可以有效的提高机械联轴器长期使用的耐久性,减少其体积和重量,满足高性能要求。
3、结构优化:通过拓扑优化方法,可以有效地减少刚性框架结构的重量,优化结构设计,改善结构性能,大大降低制造成本。
四、拓扑优化方法的优势1、灵活性强:拓扑优化方法允许在设计过程中改变结构形态,可以有效利用具有局部不稳定性的装配元件;2、更容易操作:拓扑优化方法比传统的有序结构模型更容易实现,不需要做过多的运算;3、成本低:拓扑优化方法可以有效降低产品的工艺制造成本,在改进出色性能的同时,可以节省大量人力物力;4、可重复性高:拓扑优化方法可以实现由抽象到具体的可重复的设计,可以实现大量的应用系统。
五、拓扑优化方法的应用拓扑优化方法目前被广泛应用在机械、航空航天、汽车等机械工程领域,具体应用包括但不限于:机械手和夹具的设计优化,汽车机架优化,电器结构优化,机械外壳优化,振动优化,和结构强度优化等等。
拓扑优化经典99行
% Please sent your comments to the author: [email]sigmund@fam.dtu.dk[/email]%
% %
%%%% A 99 LINE TOPOLOGY OPTIMIZATION CODE BY OLE SIGMUND, JANUARY 2000 %%%
%%%% CODE MODIFIED FOR INCREASED SPEED, September 2002, BY OLE SIGMUND %%%
% DESIGN UPDATE BY THE OPTIMALITY CRITERIA METHOD
[x] = OC(nelx,nely,x,volfrac,dc);
% PRINT RESULTS
change = max(max(abs(x-xold)));
disp([' It.: ' sprintf('%4i',loop) ' Obj.: ' sprintf('%10.4f',c) ...
K(edof,edof) = K(edof,edof) + x(ely,elx)^penal*KE;
end
end
% DEFINE LOADS AND SUPPORTS (HALF MBB-BEAM)
F(2,1) = -1;
fixeddofs = union([1:2:2*(nely+1)],[2*(nelx+1)*(nely+1)]);
% The author reserves all rights but does not guaranty that the code is %
结构拓扑优化-2013
核查密实/空 模式, 依据网格大小进行解决
● 启发式解决: 空间过滤
– 敏感度 或 密度值的过滤 – 过滤半径决定最小单元大小
r
拓扑优化结果处理及分析
结果输出为密度云图和节点密度值 。
在图像处理时将密度值在该图中取密度值小于 0.2的区域为以后抽象新结构时的无材料分布 区域,密度值大于0.2的区域为有材料区域, 处理后的结果如图6所示。
拓扑优化技术(topology optimization)
拓扑优化是一种具有创新性的概念设计技术, 在产品设计的最初阶段,设计人员确定设计空 间、设计目标、设计约束和制造工艺约束等,
拓扑优化的结果,可以确定一个拥有最佳载荷 路径的设计方案。将结果中的材料高密度区域 作为结构,而将材料低密度的区域用孔来表示.
求取拓扑结构的方法:
另一种是进化原理: 是把适者生存的生物进化论思想引入结构拓扑 优化,它通过模拟适者生存、物竞天择、优胜 劣汰等自然机理来获得最优的拓扑结构。 进化法是一类全局寻优方法,目前常用于拓扑 优化的进化法主要有遗传算法、模拟退火算法 和渐进结构优化法等。
拓扑优化设计数学模型
退化法即传统的拓扑优化方法,一般通过求目 标函数导数的零点或一系列迭代计算过程求最 优的拓扑结构。
形貌优化技术(topography optimization)
形貌优化是一种面向薄壁结构和钣金件的概念 设计技术。设计人员可以确定设计区域、筋的 最大高度和起筋的角度等参数。
建立了有限元模 型之后,将制造 工艺需求、应力 标准和屈曲要求 作为形状优化和 尺寸优化问题的 设计约束,将质 量最小化作为优 化的目标,在此 基础上进行优化 计算。
拓扑优化经典99行程序解读
3188-1-1.htmlSigmund教授所编写的top优化经典99行程序,可以说是我们拓扑优化研究的基础;每一个新手入门都会要读懂这个程序,才能去扩展,去创新;99行程序也有好多个版本,用于求解各种问题,如刚度设计、柔顺机构、热耦合问题,但基本思路大同小异;本文拟对其中的一个版本进行解读,愿能对新手有点小小的帮助。
不详之处,还请论坛内高手多指点读懂了该程序,只能说是略懂拓扑优化理论了,我手里就有一些水平集源程序是成千上万行,虽然在99行的基础上成熟了很多,但依然还有很多的发展空间。
源程序如下:%%%% A 99 LINE TOPOLOGY OPTIMIZATION CODE BY OLE SIGMUND, JANUARY 2000 %%%%%%% CODE MODIFIED FOR INCREASED SPEED, September 2002, BY OLE SIGMUND %%%function top(nelx,nely,volfrac,penal,rmin);nelx=80;nely=20;volfrac=0.4;penal=3;rmin=2;% INITIALIZEx(1:nely,1:nelx) = volfrac;loop = 0;change = 1.;% START ITERATIONwhile change > 0.01loop = loop + 1;xold = x;% FE-ANAL YSIS[U]=FE(nelx,nely,x,penal);% OBJECTIVE FUNCTION AND SENSITIVITY ANAL YSIS[KE] = lk;c = 0.;for ely = 1:nelyfor elx = 1:nelxn1 = (nely+1)*(elx-1)+ely;n2 = (nely+1)* elx +ely;Ue = U([2*n1-1;2*n1; 2*n2-1;2*n2; 2*n2+1;2*n2+2; 2*n1+1;2*n1+2],1);c = c + x(ely,elx)^penal*Ue'*KE*Ue;dc(ely,elx) = -penal*x(ely,elx)^(penal-1)*Ue'*KE*Ue;endend% FILTERING OF SENSITIVITIES[dc] = check(nelx,nely,rmin,x,dc);% DESIGN UPDA TE BY THE OPTIMALITY CRITERIA METHOD[x] = OC(nelx,nely,x,volfrac,dc);% PRINT RESULTSchange = max(max(abs(x-xold)));disp([' It.: ' sprintf('%4i',loop) ' Obj.: ' sprintf('%10.4f',c) ...' Vol.: ' sprintf('%6.3f',sum(sum(x))/(nelx*nely)) ...' ch.: ' sprintf('%6.3f',change )])% PLOT DENSITIEScolormap(gray); imagesc(-x); axis equal; axis tight; axis off;pause(1e-6);end%%%%%%%%%% OPTIMALITY CRITERIA UPDATE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [xnew]=OC(nelx,nely,x,volfrac,dc)l1 = 0; l2 = 100000; move = 0.2;while (l2-l1 > 1e-4)lmid = 0.5*(l2+l1);xnew = max(0.001,max(x-move,min(1.,min(x+move,x.*sqrt(-dc./lmid)))));if sum(sum(xnew)) - volfrac*nelx*nely > 0;l1 = lmid;elsel2 = lmid;endend%%%%%%%%%% MESH-INDEPENDENCY FILTER %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [dcn]=check(nelx,nely,rmin,x,dc)dcn=zeros(nely,nelx);for i = 1:nelxfor j = 1:nelysum=0.0;for k = max(i-floor(rmin),1):min(i+floor(rmin),nelx)for l = max(j-floor(rmin),1):min(j+floor(rmin),nely)fac = rmin-sqrt((i-k)^2+(j-l)^2);sum = sum+max(0,fac);dcn(j,i) = dcn(j,i) + max(0,fac)*x(l,k)*dc(l,k);endenddcn(j,i) = dcn(j,i)/(x(j,i)*sum);endend%%%%%%%%%%FE-ANAL YSIS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function [U]=FE(nelx,nely,x,penal)[KE] = lk;K = sparse(2*(nelx+1)*(nely+1), 2*(nelx+1)*(nely+1));F = sparse(2*(nely+1)*(nelx+1),1); U = zeros(2*(nely+1)*(nelx+1),1);for elx = 1:nelxfor ely = 1:nelyn1 = (nely+1)*(elx-1)+ely;n2 = (nely+1)* elx +ely;edof = [2*n1-1; 2*n1; 2*n2-1; 2*n2; 2*n2+1; 2*n2+2; 2*n1+1; 2*n1+2];K(edof,edof) = K(edof,edof) + x(ely,elx)^penal*KE;endend% DEFINE LOADS AND SUPPORTS (HALF MBB-BEAM)F(2*(nelx/2+1)*(nely+1),1) = 1;fixeddofs = [2*(nely/2+1),2*nelx*(nely+1)+2*(nely/2+1)];alldofs = [1:2*(nely+1)*(nelx+1)];freedofs = setdiff(alldofs,fixeddofs);% SOLVINGU(freedofs, :)= K(freedofs,freedofs) \ F(freedofs,:);U(fixeddofs,:)= 0; % 这两行复制后应换成英文字符,我这里为了防止生成QQ表% 情修改了一下格式%%%%%%%%%% ELEMENT STIFFNESS MATRIX %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [KE]=lkE = 1.;nu = 0.3;k=[ 1/2-nu/6 1/8+nu/8 -1/4-nu/12 -1/8+3*nu/8 ...-1/4+nu/12 -1/8-nu/8 nu/6 1/8-3*nu/8];KE = E/(1-nu^2)*[ k(1) k(2) k(3) k(4) k(5) k(6) k(7) k(8)k(2) k(1) k(8) k(7) k(6) k(5) k(4) k(3)k(3) k(8) k(1) k(6) k(7) k(4) k(5) k(2)k(4) k(7) k(6) k(1) k(8) k(3) k(2) k(5)k(5) k(6) k(7) k(8) k(1) k(2) k(3) k(4)k(6) k(5) k(4) k(3) k(2) k(1) k(8) k(7)k(7) k(4) k(5) k(2) k(3) k(8) k(1) k(6)k(8) k(3) k(2) k(5) k(4) k(7) k(6) k(1)];% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%程序执行方法:(just for matlab new users)打开matlab,点开new M-file,将上述源程序复制粘贴到M-文件中,修改蓝色部分的格式,保存。
2第二讲 拓扑优化
查看结果
• • • • • • TOGRAPH,OBJ !绘制目标柔度的历史 TOGRAPH,CON !绘制体积的历史 TOPRINT,OBJ !打印柔度的历史 TOPRINT,CON !打印体积的历史 *GET,TITER,TOPO,,ITER !得到迭代次数 *GET,COMP,TOPO,TITER-1,TOHO !得到最后柔 度值
一些说明
• 结果对载荷情况十分敏感。很小的载荷变化将 导致很大的优化结果差异。 • 结果对网格划分密度敏感。一般来说,很细的 网格可以产生“清晰”的拓扑结果,而较粗的 网格会生成“混乱”的结果。但是,较大的有 限元模型需要更多的收敛时间。 • 在一些情况下会得到桁架形状的拓扑结果。这 通常在用户指定很大的体积减少值和较细的网 格划分时出现。很大的体积减少值如80%或更 大(TOPDEF命令)。 • TOPDEF和TOLOOP命令中的指定值并不存储 在ANSYS数据库中;因此,用户必须在每次拓 扑优化时重新指定优化目标和定义。
!用这些单元划分的实体将被优化
!用这些单元划分的实体将保持原状
定义和控制载荷工况
• 可以在单个载荷工况和多个载荷工况下做拓扑 优化。单载荷工况是最简便的。 • 要在几个独立的载荷工况中得到优化结果时, 必须用到写载荷工况和求解功能。在定义完每 个载荷工况后,要用LSWRITE LSWRITE命令将数据写入文 LSWRITE 件,然后用LSSOLVE LSSOLVE命令求解载荷工况的集合。 LSSOLVE • 例如,下面的输入演示如何将三个载荷工况联 合型
• 我们将其称为粗糙模型。这并不表示模型的网 格划分必须是粗糙的,而是说模型的网格划分 相对子模型的网格是较粗糙的。 • 文件名——粗糙模型和子模型应该使用不同的 文件名。这样就可以保证文件不被覆盖。而且 在切割边界插值时可以方便地指出粗糙模型的 文件。用下列方法指定文件名: • Command: /FILNAME • GUI: Utility Menu>File>Change Jobname
拓扑优化经典99行程序解读
3188-1-1.htmlSigmund 教授所编写的top 优化经典99 行程序,可以说是我们拓扑优化研究的基础;每一个新手入门都会要读懂这个程序,才能去扩展,去创新;99 行程序也有好多个版本,用于求解各种问题,如刚度设计、柔顺机构、热耦合问题,但基本思路大同小异;本文拟对其中的一个版本进行解读,愿能对新手有点小小的帮助。
不详之处,还请论坛内高手多指点读懂了该程序,只能说是略懂拓扑优化理论了,我手里就有一些水平集源程序是成千上万行,虽然在99 行的基础上成熟了很多,但依然还有很多的发展空间。
源程序如下:%%%% A 99 LINE TOPOLOGY OPTIMIZATION CODE BY OLE SIGMUND, JANUARY 2000 %%%%%%% CODE MODIFIED FOR INCREASED SPEED, September 2002, BY OLE SIGMUND %%%function top(nelx,nely,volfrac,penal,rmin);nelx=80;nely=20;volfrac=0.4;penal=3;rmin=2;% INITIALIZEx(1:nely,1:nelx) = volfrac;loop = 0;change = 1.;% START ITERATIONwhile change > 0.01loop = loop + 1;xold = x;% FE-ANAL YSIS[U]=FE(nelx,nely,x,penal);% OBJECTIVE FUNCTION AND SENSITIVITY ANAL YSIS[KE] = lk;c = 0.;for ely = 1:nelyfor elx = 1:nelxn1 = (nely+1)*(elx-1)+ely;n2 = (nely+1)* elx +ely;Ue = U([2*n1-1;2*n1; 2*n2-1;2*n2; 2*n2+1;2*n2+2; 2*n1+1;2*n1+2],1);c = c + x(ely,elx)Ape nal*Ue'*KE*Ue;dc(ely,elx) = -pe nal*x(ely,elx)A(pe nal-1)*Ue'*KE*Ue;endend% FILTERING OF SENSITIVITIES[dc] = check(nelx,nely,rmin,x,dc);% DESIGN UPDA TE BY THE OPTIMALITY CRITERIA METHOD[x] = OC(nelx,nely,x,volfrac,dc);% PRINT RESULTSchange = max(max(abs(x-xold)));disp([' It.: ' sprintf('%4i',loop) ' Obj.: ' sprintf('%10.4f',c) ...' Vol.: ' sprintf('%6.3f',sum(sum(x))/(nelx*nely)) ...' ch.: ' sprintf('%6.3f',change )])% PLOT DENSITIEScolormap(gray); imagesc(-x); axis equal; axis tight; axis off;pause(1e-6);end%%%%%%%%%% OPTIMALITY CRITERIA UPDATE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [xnew]=OC(nelx,nely,x,volfrac,dc)l1 = 0; l2 = 100000; move = 0.2;while (l2-l1 > 1e-4)lmid = 0.5*(l2+l1);xnew = max(0.001,max(x-move,min(1.,min(x+move,x.*sqrt(-dc./lmid)))));if sum(sum(xnew)) - volfrac*nelx*nely > 0;l1 = lmid;elsel2 = lmid;endend%%%%%%%%%% MESH-INDEPENDENCY FILTER %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [dcn]=check(nelx,nely,rmin,x,dc)dcn=zeros(nely,nelx);for i = 1:nelxfor j = 1:nelysum=0.0;for k = max(i-floor(rmin),1):min(i+floor(rmin),nelx)for l = max(j-floor(rmin),1):min(j+floor(rmin),nely)fac = rmin-sqrt((i-k)A2+(j-l)A2);sum = sum+max(0,fac);dcn(j,i) = dcn(j,i) + max(0,fac)*x(l,k)*dc(l,k);endenddcn(j,i) = dcn(j,i)/(x(j,i)*sum);endend%%%%%%%%%%FE-ANAL YSIS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function [U]=FE(nelx,nely,x,penal)[KE] = lk;K = sparse(2*(nelx+1)*(nely+1), 2*(nelx+1)*(nely+1));F = sparse(2*(nely+1)*(nelx+1),1); U = zeros(2*(nely+1)*(nelx+1),1);for elx = 1:nelxfor ely = 1:nelyn1 = (nely+1)*(elx-1)+ely;n2 = (nely+1)* elx +ely;edof = [2*n1-1; 2*n1; 2*n2-1; 2*n2; 2*n2+1; 2*n2+2; 2*n1+1; 2*n1+2];K(edof,edof) = K(edof,edof) + x(ely,elx)A pe nal*KE;endend% DEFINE LOADS AND SUPPORTS (HALF MBB-BEAM)F(2*(nelx/2+1)*(nely+1),1) = 1;fixeddofs = [2*(nely/2+1),2*nelx*(nely+1)+2*(nely/2+1)];alldofs = [1:2*(nely+1)*(nelx+1)];freedofs = setdiff(alldofs,fixeddofs);% SOLVINGU(freedofs, : )= K(freedofs,freedofs) \ F(freedofs, : );U(fixeddofs, : ) = 0; % 这两行复制后应换成英文字符,我这里为了防止生成QQ 表% 情修改了一下格式%%%%%%%%%% ELEMENT STIFFNESS MATRIX %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function [KE]=lkE = 1.;nu = 0.3;k=[ 1/2-nu/6 1/8+nu/8 -1/4-nu/12 -1/8+3*nu/8 ...-1/4+nu/12 -1/8-nu/8 nu/6 1/8-3*nu/8];KE = E/(1-nuA2)*[ k(1) k(2) k(3) k(4) k(5) k(6) k(7) k(8)k(2) k(1) k(8) k(7) k(6) k(5) k(4) k(3)k(3) k(8) k(1) k(6) k(7) k(4) k(5) k(2)k(4) k(7) k(6) k(1) k(8) k(3) k(2) k(5)k(5) k(6) k(7) k(8) k(1) k(2) k(3) k(4)k(6) k(5) k(4) k(3) k(2) k(1) k(8) k(7)k(7) k(4) k(5) k(2) k(3) k(8) k(1) k(6) k(8) k(3) k(2) k(5) k(4) k(7) k(6) k(1)]; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%程序执行方法: (just for matlab new users )打开matlab,点开new M-file,将上述源程序复制粘贴到M-文件中,修改蓝色部分的格式,保存。
拓扑优化算法
拓扑优化算法拓扑优化算法是在对拓扑结构进行优化的过程中使用的一种方法。
其目的是通过调整网络的连接方式,使得网络的性能得到改善。
拓扑优化算法可以应用于各种网络拓扑,如计算机网络、通信网络、物流网络等。
它的基本原理是通过调整网络节点之间的连接关系,来改变网络的结构,从而达到优化网络性能的目的。
拓扑优化算法通常包括以下几个步骤:1. 首先,需要明确需要优化的网络性能指标。
不同的网络系统可能关注的性能指标不同,比如计算机网络可能关注的是网络延迟、吞吐量等;而物流网络可能关注的是运输成本、效率等。
2. 接下来,需要根据具体的网络拓扑结构,构建网络模型。
网络模型可以采用图论中的图结构来表示,其中节点表示网络中的元素,边表示节点之间的连接关系。
3. 然后,需要制定优化目标函数。
目标函数是指在拓扑优化过程中需要最小化或最大化的函数,通常与网络性能指标相关。
4. 在明确了目标函数之后,可以使用优化算法对网络拓扑进行优化。
常用的优化算法包括遗传算法、模拟退火算法、禁忌搜索算法等。
这些算法可以通过调整网络节点之间的连接关系,找到一个近似最优的网络拓扑。
5. 最后,需要对优化结果进行评估。
评估可以采用模拟实验、仿真实验等方法,来验证优化结果的有效性。
拓扑优化算法的研究和应用广泛,可以应用于各种实际问题。
比如,在计算机网络中,通过优化网络拓扑可以提高网络的传输速度和稳定性;在物流网络中,通过优化网络拓扑可以降低运输成本和提高效率。
除了上述步骤外,还有一些值得注意的点:- 在网络拓扑优化过程中,需要考虑到现有网络的约束条件。
比如,在计算机网络中,网络节点之间的连接关系可能受到物理设备的限制。
在优化过程中需要遵守这些约束条件。
- 拓扑优化算法可以采用启发式算法来近似求解最优解。
启发式算法是一种通过启发性规则来指导搜索过程的算法,可以在较短的时间内找到较好的解。
典型的启发式算法包括遗传算法、模拟退火算法等。
- 还可以使用多目标优化算法来解决拓扑优化问题。
拓扑优化
• 连续体结构拓扑优化
– 1988年,受“微结构”思想的启发,Bendsøe与Kikuchi利 用均匀化方法,将复合材料多孔介质的概念引入结构拓 扑优化中,开创了连续体结构拓扑优化新局面。
工业装备结构分析国家重点实验室
2 拓扑优化的发展
• 连续体结构拓扑优化
– 1992年,Mlejnek等提出人工变密度法; – 1999年,基于变密度法,Rozvany与zhou等提出了SIMP理论;之 后,Sigmund与Bendsøe等,完善了该理论; – 2001年,Sigmund开发了基于SIMP模型的matlab程序,极大得推 广了结构拓扑优化。同时,Sigmund将变密度法应用到更广的领 域:柔性机构拓扑优化设计、考虑几何非线性的结构设计、多物理 场振动器构型设计、声子晶体结构、带隙材料等。
– 材料属性的理性近似模型
(RAMP: Rational Approximation of Material Properties)
工业装备结构分析国家重点实验室
3.2 结构分析
• 结构分析采用结构有限元,也可以采用有限差分 法、有限体积法等。
– 修改材料属性(SIMP)
ρ↔E↔K
– 有限元分析 – 提供响应值,计算目标函数,约束函数,灵敏度等
• 棋盘格式、网格依赖性采用正则化的方法解决。
– 由于非网格相关的过滤方法实现简单,求解效率高,成为目前主流 方法。包括灵敏度过滤、密度过滤(线性密度过滤、非线性密度过 滤)
工业装备结构分析国家重点实验室
3.5 SiPESC.TOPO
• SiPESC.TOPO是依托于SiPESC平台的开放式结构 有限元分析系统与工程数据库以及后处理软件 jifex, • 基于SIMP方法以及最新拓扑优化技术开发的结构拓 扑优化程序;实现了消除棋盘格式、网格依赖性等 数值问题的方法;
ABAQUS拓扑优化手册
ABAQUS拓扑优化手册ABAQUS拓扑优化分析手册/用户手册分析手册:13. Optimization Techniques优化技术13.1 结构优化:概述13.1.1 概述ABAQUS结构优化是一个帮助用户精细化设计的迭代模块。
结构优化设计能够使得结构组件轻量化,并满足刚度和耐久性要求。
ABAQUS提供了两种优化方法——拓扑优化和形状优化。
拓扑优化(Topology optimization)通过分析过程中不断修改最初模型中指定优化区域的单元材料性质,有效地从分析的模型中移走/增加单元而获得最优的设计目标。
形状优化(Shape optimization)则是在分析中对指定的优化区域不断移动表面节点从而达到减小局部应力集中的优化目标。
拓扑优化和形状优化均遵从一系列优化目标和约束。
最优化方法(Optimization)是一个通过自动化程序增加设计者在经验和直觉从而缩短研发过程的工具。
想要优化模型,必须知道如何去优化,仅仅说要减小应力或者增大特征值是不够,做优化必须有更专门的描述。
比方说,想要降低在两种不同载荷工况下的最大节点力,类似的还有,想要最大化前五阶特征值之和。
这种最优化的目标称之为目标函数(Object Function)。
另外,在优化过程中可以同时强制限定某些状态参量。
例如,可以指定某节点的位移不超过一定的数值。
这些强制性的指定措施叫做约束(Constraint)。
ABAQUS/CAE可以创建模型然后定义、配置和执行结构优化。
更多信息请参考第十八章。
13.1.2 术语(Terminology)设计区域(Design area): 设计区域即模型需要优化的区域。
这个区域可以是整个模型,也可以是模型的一部分或者数部分。
一定的边界条件、载荷及人为约束下,拓扑优化通过增加/删除区域中单元的材料达到最优化设计,而形状优化通过移动区域内节点来达到优化的目的。
设计变量(Design variables):设计变量即优化设计中需要改变的参数。
TopOpt针对99行改进的88行拓扑优化程序完全注释
TopOpt针对99⾏改进的88⾏拓扑优化程序完全注释 博客搬家到⾃⼰搭建的 啦q(≧▽≦q),⼤家快来逛逛鸭!The program can be promoted by line:top88(120,40,0.5,3.0,3.5,1)代码注释88⾏程序为了提⾼效率,逻辑、流程没有99⾏程序那么清楚,建议初学先读99⾏。
%%%%%%%%%%%% AN 88 LINE TOPOLOGY OPTIMIZATION CODE Nov 2010 %%%%%%%%%%%% %%%%%%%%%%%% COMMENTED - OUT BY HAOTIAN_W AUGUST 2020 %%%%%%%%%%%%function top88(nelx,nely,volfrac,penal,rmin,ft)% ===================================================================================% 88⾏程序在99⾏程序上的主要改进:% 1) 将for循环语句向量化处理,发挥MATLAB矩阵运算优势;% 2) 为不断增加数据的数组预分配内存,避免MATLAB花费额外时间寻找更⼤的连续内存块;% 3) 尽可能将部分程序从循环体⾥抽出,避免重复计算;% 4) 设计变量不再代表单元伪密度,新引⼊真实密度变量xphys;% 5) 将原先的所有⼦程序都集成在主程序⾥,避免频繁调⽤;% 总体上,程序的效率有显著提升(近百倍)、内存占⽤降低,但是对初学者来说可读性不如99⾏% ===================================================================================% nelx : ⽔平⽅向上的离散单元数;% nely : 竖直⽅向上的离散单元数;%% volfrac : 容积率,材料体积与设计域体积之⽐,对应的⼯程问题就是"将结构减重到百分之多少";%% penal : 惩罚因⼦,SIMP⽅法是在0-1离散模型中引⼊连续变量x、系数p及中间密度单元,从⽽将离% 散型优化问题转换成连续型优化问题,并且令0≤x≤1,p为惩罚因⼦,通过设定p>1对中间密% 度单元进⾏有限度的惩罚,尽量减少中间密度单元数⽬,使单元密度尽可能趋于0或1;%% 合理选择惩罚因⼦的取值,可以消除多孔材料,从⽽得到理想的拓扑优化结果:% 当penal<=2时存在⼤量多孔材料,计算结果没有可制造性;% 当penal>=3.5时最终拓扑结果没有⼤的改变;% 当penal>=4时结构总体柔度的变化⾮常缓慢,迭代步数增加,计算时间延长;%% rmin : 敏度过滤半径,防⽌出现棋盘格现象;% ft : 与99⾏程序不同的是,本程序提供了两种滤波器,% ft=1时进⾏灵敏度滤波,得到的结果与99⾏程序⼀样;ft=2时进⾏密度滤波。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
序%%%%%%%%%%%%%%%%%%%%
143. function [KE]=lk
144.
145. E = 1.;
146. nu = 0.3;
147. k=[ 1/2-nu/6 1/8+nu/8 -1/4-nu/12 -1/8+3*nu/8 ...
148. -1/4+nu/12 -1/8-nu/8 nu/6
157.
k(7) k(4) k(5) k(2) k(3) k(8) k(1) k(6)
158.
k(8) k(3) k(2) k(5) k(4) k(7) k(6) k(1)];
44.
45. % PRINT RESULTS 屏幕上显示迭代信息
46. change = max(max(abs(x-xold))); %计算目标函数的改变量
47. disp([' It.: ' sprintf('%4i',loop) ' Obj.: ' sprintf('%10.4f',c) ...
6);
53. end
54.
55.
56.
57. %%%%%%%%%% OPTIMALITY CRITERIA UPDATE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
58. function [xnew]=OC(nelx,nely,x,volfrac,dc)
最优化准则
59.
60. l1 = 0; l2 = 100000; %用于体积约束的拉格朗日乘子
%单位刚度矩阵
因为元素刚度矩阵对任何元素都是一样的,所以该子程序仅被调用一次
24. c = 0.;
%用来存放目标函数的变量,这里刚度最大,柔度最小
25.
26. for ely = 1:nely
表示ely从1到nely,+1递增
27. for elx = 1:nelx
28.
n1 = (nely+1)*(elx-1)+ely; %左上角的单元节点
78. function [dcn]=check(nelx,nely,rmin,x,dc)
79.
80. dcn=zeros(nely,nelx);
81.
82. for i = 1:nelx
83. for j = 1:nely
84. sum=0.0;
85.
86. for k = max(i-floor(rmin),1):min(i+floor(rmin),nelx)
29.
n2 = (nely+1)* elx +ely; %右上角的单元节点
30.
31.
%所示单元的自由度,左上,右上,右下,左下
32.
Ue = U([2*n1-1;2*n1; 2*n2-1;2*n2; 2*n2+1;2*n2+2; 2*n1+1;2*n1+2],1);
33.
Ue:元素位移矢量; U:整体位移矢量
125. end
126. end
127.
128. % DEFINE LOADS AND SUPPORTS (HALF MBB-BEAM)
129. F(2,1) = -1; % 应用了一个在左上角的垂直单元力。
130. %按着图上来的,最左边和右下角已经固定
131. fixeddofs = union([1:2:2*(nely+1)],[2*(nelx+1)*(nely+1)]); %固定结点
92.
end
93. end
94.
95. dcn(j,i) = dcn(j,i)/(x(j,i)*sum);
96. end
97. end
98.
99.
100. %%%%%%%%%% FE-ANALYSIS 有限元求解子程
序%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
101. function [U]=FE(nelx,nely,x,penal) %自定义函数,最后返回[U]
107. % *2 是因为 x,y 都有一个数
108. K = sparse(2*(nelx+1)*(nely+1), 2*(nelx+1)*(nely+1));
109. %力矩阵的稀疏矩阵
110. F = sparse(2*(nely+1)*(nelx+1),1);
111. U = zeros(2*(nely+1)*(nelx+1),1); %零矩阵
61. move = 0.2;
62.
63. while (l2-l1 > 1e-4)
64. lmid = 0.5*(l2+l1);
65.
66. %即论文公式的综合
67. xnew = max(0.001,max(x-move,min(1.,min(x+move,x.*sqrt(-dc./lmid)))));
12. change = 1.;
%每次迭代,目标函数(柔度)的改变值,用来判断何时
收敛
13.
14. % START ITERATION
15. while change > 0.01 %当两次连续目标函数迭代的差<=0.01 时,迭代结束
16. loop = loop + 1;
17. xold = x; %把前一次的设计变量付给 xold
40. [dc] = check(nelx,nely,rmin,x,dc); %灵敏度过滤,为了边界光顺一点
41. 42. % DESIGN UPDATE BY THE OPTIMALITY CRITERIA METHOD 最优准则法优化更新设计变量
43. [x] = OC(nelx,nely,x,volfrac,dc);
主程序部分包括: 数据初始化;有限元分析;敏度分析,OC算法,结果显示
1. function top(nelx,nely,volfrac,penal,rmin);
2.
3. nelx=80;
% x 轴方向上单元个数
4. nely=20;
% y 轴方向上单元个数
{ }是用于元胞数组,即cell,其 中的元素可以是不同格式的,如 字符和数值,大小也可以不同; [ ] 是用于描述矩阵,初始化或 赋值时使用; ( ) 是用于提取元素,或函数调 用,定义时使用。
102.
103. [KE] = lk; %单元刚度矩阵
104.
105. % sparse 把一个全矩阵转化为一个稀疏矩阵,只存储每一个非零元素的三个值:元素值,元
素的行号和列号 106. %总体刚度矩阵的稀疏矩阵
在矩阵中,若数值为0的元素数目远远多于非0元素的数目, 并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵
68.
69. if sum(sum(xnew)) - volfrac*nelx*nely > 0;%二乘法减半
70. l1 = lmid;
71. else
72. l2 = lmid;
73. end
74. end
75.
76.
77. %%%%%%%%%% MESH-INDEPENDENCY FILTER 敏度过滤技术子程序%%%%%%%%%%%%%%%%%%%
5. volfrac=0.4;
%体积比
6. penal=3;
%材料插值的惩罚因子
7. rmin=2;
%敏度过滤半径
8.
9. % INITIALIZE
10. x(1:nely,1:nelx) = volfrac; % x 是设计变量(单元伪密度) 材料设计区域的均匀分配
11. loop = 0;
%存放迭代次数的变量
153.
k(3) k(8) k(1) k(6) k(7) k(4) k(5) k(2)
154.
k(4) k(7) k(6) k(1) k(8) k(3) k(2) k(5)
155.
k(5) k(6) k(7) k(8) k(1) k(2) k(3) k(4)
156.
k(6) k(5) k(4) k(3) k(2) k(1) k(8) k(7)
87.
for l = max(j-floor(rmin),1):min(j+floor(rmin),nely)
88.
fac = rmin-sqrt((i-k)^2+(j-l)^2);
89.
sum = sum + max(0,fac);
90.
91.
dcn(j,i) = dcn(j,i) + max(0,fac)*x(l,k)*dc(l,k);
120. % 一个点有两个,所以要*2。第一个从 1 开始,所以*2 之后要-1。
121. edof = [2*n1-1;2*n1; 2*n2-1;2*n2; 2*n2+1;2*n2+2; 2*n1+1;2*n1+2];
122.
123. %将单元刚度矩阵组装成总的刚度矩阵
124. K(edof,edof) = K(edof,edof) + x(ห้องสมุดไป่ตู้ly,elx)^penal*KE;
34.
c = c + x(ely,elx)^penal*Ue'*KE*Ue; %计算目标函数的值(柔度)
35.
dc(ely,elx) = -penal*x(ely,elx)^(penal-1)*Ue'*KE*Ue; %目标函数的灵敏度
36. end