如何用ansys进行优化设计.docx
《如何用ansys进行优化设计.docx》由会员分享,可在线阅读,更多相关《如何用ansys进行优化设计.docx(41页珍藏版)》请在冰豆网上搜索。
如何用ansys进行优化设计
第一章优化设计
什么是优化设计?
优化设计是一种寻找确定最优设计方案的技术。
所谓“最优设计”,指的是一种方案可以满足所有的设计要求,而且所需的支出(如重量,面积,体积,应力,费用等)最小。
也就是说,最优设计方案就是一个最有效率的方案。
设计方案的任何方面都是可以优化的,比如说:
尺寸(如厚度),形状(如过渡圆角的大小),支撑位置,制造费用,自然频率,材料特性等。
实际上,所有可以参数化的ANSYS选项都可以作优化设计。
(关于ANSYS参数,请参看ANSYSModelingandMeshingGuide第十四章。
)
ANSYS程序提供了两种优化的方法,这两种方法可以处理绝大多数的优化问题。
零阶方法是一个很完善的处理方法,可以很有效地处理大多数的工程问题。
一阶方法基于目标函数对设计变量的敏感程度,因此更加适合于精确的优化分析。
对于这两种方法,ANSYS程序提供了一系列的分析——评估——修正的循环过程。
就是对于初始设计进行分析,对分析结果就设计要求进行评估,然后修正设计。
这一循环过程重复进行直到所有的设计要求都满足为止。
除了这两种优化方法,ANSYS程序还提供了一系列的优化工具以提高优化过程的效率。
例如,随机优化分析的迭代次数是可以指定的。
随机计算结果的初始值可以作为优化过程的起点数值。
基本概念
在介绍优化设计过程之前,我们先给出一些基本的定义:
设计变量,状态变量,目标函数,合理和不合理的设计,分析文件,迭代,循环,设计序列等。
我们看以下一个典型的优化设计问题:
在以下的约束条件下找出如下矩形截面梁的最小重量:
●总应力不超过max[max]
●梁的变形不超过max[max]
●梁的高度h不超过hmax[hhmax]
图1-1梁的优化设计示例
设计变量(DVs)为自变量,优化结果的取得就是通过改变设计变量的数值来实现的。
每个设计变量都有上下限,它定义了设计变量的变化范围。
在以上的问题里,设计变量很显然为梁的宽度b和高度h。
b和h都不可能为负值,因此其下限应为b,h>0,而且,h有上限hmax。
ANSYS优化程序允许定义不超过60个设计变量。
状态变量(SVs)是约束设计的数值。
它们是“因变量”,是设计变量的函数。
状态变量可能会有上下限,也可能只有单方面的限制,即只有上限或只有下限。
在上述梁问题中,有两个状态变量:
(总应力)和(梁的位移)。
在ANSYS优化程序中用户可以定义不超过100个状态变量。
目标函数是要尽量减小的数值。
它必须是设计变量的函数,也就是说,改变设计变量的数值将改变目标函数的数值。
在以上的问题中,梁的总重量应该是目标函数。
在ANSYS优化程序中,只能设定一个目标函数。
设计变量,状态变量和目标函数总称为优化变量。
在ANSYS优化中,这些变量是由用户定义的参数来指定的。
用户必须指出在参数集中哪些是设计变量,哪些是状态变量,哪是目标函数。
设计序列是指确定一个特定模型的参数的集合。
一般来说,设计序列是由优化变量的数值来确定的,但所有的模型参数(包括不是优化变量的参数)组成了一个设计序列。
一个合理的设计是指满足所有给定的约束条件(设计变量的约束和状态变量的约束)的设计。
如果其中任一约束条件不被满足,设计就被认为是不合理的。
而最优设计是既满足所有的约束条件又能得到最小目标函数值的设计。
(如果所有的设计序列都是不合理的,那么最优设计是最接近于合理的设计,而不考虑目标函数的数值。
)
分析文件是一个ANSYS的命令流输入文件,包括一个完整的分析过程(前处理,求解,后处理)。
它必须包含一个参数化的模型,用参数定义模型并指出设计变量,状态变量和目标函数。
由这个文件可以自动生成优化循环文件(Jobname.LOOP),并在优化计算中循环处理。
一次循环指一个分析周期。
(可以理解为执行一次分析文件。
)最后一次循环的输出存储在文件Jobname.OPO中。
优化迭代(或仅仅是迭代过程)是产生新的设计序列的一次或多次分析循环。
一般来说,一次迭代等同于一次循环。
但对于一阶方法,一次迭代代表多次循环。
优化数据库记录当前的优化环境,包括优化变量定义,参数,所有优化设定,和设计序列集合。
该数据库可以存储(在文件Jobname.OPT),也可以随时读入优化处理器中。
上述的许多概念可以用图解帮助理解。
图1-2示出了优化分析中的数据流向。
分析文件必须作为一个单独的实体存在,优化数据库不是ANSYS模型数据库的一部分。
优化设计的步骤
共有两种方法实现ANSYS优化设计:
批处理方法和通过GUI交互式地完成。
这两种方法的选择取决于用户对于ANSYS程序的熟悉程度和是否习惯于图形交互方式。
如果对于ANSYS程序的命令相当熟悉,就可以选择用命令输入整个优化文件并通过批处理方式来进行优化。
对于复杂的需用大量机时的分析任务来说(如非线性),这种方法更有效率。
而另一方面,交互方式具有更大的灵活性,而且可以实时看到循环过程的结果。
在用GUI方式进行优化时,首要的是要建立模型的分析文件,然后优化处理器所提供的功能都可以交互式的使用,以确定设计空间,便于后续优化处理的进行。
这些初期交互式的操作可以帮助用户缩小设计空间的大小,使优化过程得到更高的效率。
优化设计通常包括以下几个步骤,这些步骤根据用户所选用优化方法的不同(批处理GUI方式)而有细微的差别。
图1-2优化数据流向
1.生成循环所用的分析文件。
该文件必须包括整个分析的过程,而且
必须满足以下条件:
a.参数化建立模型(PREP7)。
b.求解(SOLUTION)。
c.提取并指定状态变量和目标函数(POST1/POST26)。
2.在ANSYS数据库里建立与分析文件中变量相对应的参数。
这一步
是标准的做法,但不是必须的(BEGIN或OPT)。
3.进入OPT,指定分析文件(OPT)。
4.声明优化变量。
5.选择优化工具或优化方法。
6.指定优化循环控制方式。
7.进行优化分析。
8.查看设计序列结果(OPT)和后处理(POST1/POST26)。
优化设计步骤的细节在下面列出。
批处理方式和交互方式的区别也同时
指出。
第一步:
生成分析文件
分析文件生成是ANSYS优化设计过程中的关键部分。
ANSYS程序运用分析文件构造循环文件,进行循环分析。
分析文件中可以包括ANSYS提供的任意分析类型(结构,热,电磁等,线性或非线性)。
(注:
ANSYS/LS-DYNA的显式分析不能进行优化。
)
在分析文件中,模型的建立必须是参数化的(通常是优化变量为参数),结果也必须用参数来提取(用于状态变量和目标函数)。
优化设计中只能使用数值参数。
(参数和ANSYS参数化设计语言(APDL)在ANSYSModelingandMeshingGuide中有所细述。
)
用户的任务是建立分析文件并保证其正确性。
分析文件应当覆盖整个分析过程并且是简练的,不是必须的语句(如完成图形显示功能和列表功能的语句等)应当从分析文件中省略掉。
只有在交互过程中希望看到的显示[EPLODT等]可以包含在分析文件中,或者将其定位到一个显示文件中[/SHOW]。
请注意分析文件是要多次执行的,与优化分析本身无关的命令都会不必要的耗费机时,降低循环效率。
建立分析文件有两种方法:
1)用系统编辑器逐行输入;2)交互式地完成分析,将ANSYS的LOG文件作为基础建立分析文件。
这两种方式各有优缺点。
用系统编辑器生成分析文件同生成其他分析时的批处理文件方法是一样的。
这种方法使得用户可以通过命令输入来完全地控制参数化定义。
同样,本方法可以省去了删除多余命令的麻烦。
但是,如果对于ANSYS命令集不熟悉的话,这种方法是不方便的。
对于这类用户来说,第二种方法相对容易一些。
但是,在最后生成分析文件的过程中,ANSYS的LOG文件要做较大的修改才能适合循环分析。
不论采用哪种方法,分析文件需要包括的内容都是一样的。
以下说明建立分析文件的步骤:
A.参数化建立模型
用设计变量作为参数建立模型的工作是在PREP7中完成的。
在给出的梁的例子中,设计变量是B(梁的宽度)和H(梁的高度),因此单元的实参是由B和H来表示的:
…
/PREP7
!
初始化设计变量:
B=2.0
H=3.0
!
ET,1,BEAM3!
2-D梁单元
AREA=B*H!
梁的横截面面积
IZZ=(B*(H**3))/12!
绕Z轴的转动惯量
R,1,AREA,IZZ,H!
以设计变量表示的单元实参
!
!
模型的其他部分
MP,EX,1,30E6!
杨氏模量
N,1!
结点
N,11,120
FILL
E,1,2!
单元
EGEN,10,1,-1
FINISH!
退出PREP7
…
前面提到,可以对设计的任何方面进行优化:
尺寸,形状,材料性质,支撑位置,所加载荷等,唯一要求就是将其参数化。
设计变量(例如B和V)可以在程序的任何部分初始化,一般是在PREP7中定义。
这些变量的初值只是在设计计算的开始用得到,在优化循环过程中会被改变。
注意:
如果用GUI模式完成输入,可能会遇到直接用鼠标拾取(picking)的操作。
有些拾取操作是不允许参数化输入的。
因此,应当避免在定义设计变量,状态变量和目标函数时使用这些操作,应该用可以参数化的操作来代替。
B.求解
求解器用于定义分析类型和分析选项,施加载荷,指定载荷步,完成有限元计算。
分析中所用到的数据都要指出:
凝聚法分析中的主自由度,非线性分析中的收敛准则,谐波分析中的频率范围等。
载荷和边界条件也可以作为设计变量。
梁的例子中,SOLUTION部分的输入大致如下:
…
/SOLU
ANTYPE,STATIC!
静力分析(缺省)
D,1,UX,0,,11,10,UY!
UX=UY=0,梁两端结点固定
SFBEAM,ALL,1,PRES,100!
施加压力
SOLVE
FINISH!
退出SOLUTION
这一步骤不仅仅限于一次分析过程。
比如,可以先进行热分析再进行应力分析(在热应力计算中)。
C.参数化提取结果
在本步中,提取结果并赋值给相应的参数。
这些参数一般为状态变量和目标函数。
提取数据的操作用*GET命令(UtilityMenu>Parameters>GetScalarData)实现。
通常用POST1来完成本步操作,特别是涉及到数据的存储,加减或其他操作。
在梁的例题中,梁的总重量是目标函数。
因为重量与体积成比例(假定密度是均匀的),那么减小总体积就相当于减小总重量。
因此可以选择总体积为目标函数。
在本例中,状态变量选择为总应力和位移。
这些参数可以用如下方法定义:
…
/POST1
SET,…
NSORT,U,Y!
以UY为基准对结点排序
*GET,DMAX,SORT,,MAX!
参数DMAX=最大位移
!
!
线单元的推导数值由ETABLE得出
ETABLE,VOLU,VOLU!
VOLU=每个单元的体积
ETABLE,SMAX_I,NMISC,1!
SMAX_I=每个单元I结点处应力的
最大值
ETABLE,SMAX_J,NMISC,3!
SMAX_J=每个单元J结点处应力的最
大值
!
SSUM!
将单元表中每列的数据相加
*GET,VOLUME,SSUM,,ITEM,VOLU
!
参数VOLUME=总体积
ESORT,ETAB,SMAX_I,,1!
按照单元SMAX_I的绝对值大小排序
*GET,SMAXI,SORT,,MAX!
参数SMAXI=SMAX_I的最大值
ESORT,ETAB,SMAX_J,,1!
按照单元SMAX_J的绝对值大小排序
*GET,SMAXJ,SORT,,MAX!
参数SMAXJ=SMAX_J的最大值
SMAX=SMAXI>SMAXJ!
参数SMAX=最大应力值
FINISH