第一章 优化设计.docx
《第一章 优化设计.docx》由会员分享,可在线阅读,更多相关《第一章 优化设计.docx(44页珍藏版)》请在冰豆网上搜索。
第一章优化设计
第一章优化设计
什么是优化设计?
优化设计是一种寻找确定最优设计方案的技术。
所谓“最优设计”,指的是一种方案可以满足所有的设计要求,而且所需的支出(如重量,面积,体积,应力,费用等)最小。
也就是说,最优设计方案就是一个最有效率的方案。
设计方案的任何方面都是可以优化的,比如说:
尺寸(如厚度),形状(如过渡圆角的大小),支撑位置,制造费用,自然频率,材料特性等。
实际上,所有可以参数化的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优化数据流向
生成循环所用的分析文件。
该文件必须包括整个分析的过程,而且
必须满足以下条件:
参数化建立模型(PREP7)。
求解(SOLUTION)。
提取并指定状态变量和目标函数(POST1/POST26)。
在ANSYS数据库里建立与分析文件中变量相对应的参数。
这一步
是标准的做法,但不是必须的(BEGIN或OPT)。
进入OPT,指定分析文件(OPT)。
声明优化变量。
选择优化工具或优化方法。
指定优化循环控制方式。
进行优化分析。
查看设计序列结果(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
…
请查阅*GET和ETABLE命令以得到更详细的说明。
分析文件的准备
到此为止,我们已经对于分析文件的基本需求做了说明。
如果是用系统编辑器来编辑的批处理文件,那么简单地存盘进入第二步即可。
如果是用交互方式建模的话,用户必须在交互环境下生成分析文件。
可以通过两种方式完成本步操作:
数据库命令流文件或程序命令流文件。
数据库命令流文件——可以通过LGWRITE命令(UtilityMenu>File>WriteDBLogFile)生成命令流文件。
LGWRITE将数据库内部的命令流写到文件Jobname.LGW中。
内部命令流包含了生成当前模型所用的所有命令。
程序命令流文件——Jobname.LOG包含了交互方式下用户输入的所有命令。
如果用Jobneme.LOG作为分析文件时,用户必须用系统编辑器删除文件中所有不必要的命令。
因为交互方式下所有的操作都记录在LOG文件中,编辑工作会比较烦琐。
而且,如果分析是在几个过程中完成的,就必须将几个LOG文合在一起编辑生成一个完整的分析文件。
(关于数据库命令流文件和程序命令流文件,请参看ANSYSOperationsGuide。
)
注——用户可以退出ANSYS或使用/SYS命令来编辑分析文件。
细节请参看本章“生成分析文件”一节。
第二步:
建立优化过程中的参数
在完成了分析文件的建立以后,就可以开始优化分析了。
(如果是在系统中建立的分析文件的话,就要重新进入ANSYS。
)如果在交互方式下进行优化的话,最好(但不是必须)从分析文件中建立参数到ANSYS数据库中来。
(在批处理方式下除外。
)
做这一步有两个好处。
初始参数值可能作为一阶方法的起点,而且,对于各种优化过程来说,参数在数据库中可以在GUI下进行操作,便于定义优化变量。
建立数据库参数可以选择下列任一种方法:
●读入与分析文件相联的数据库文件(Jobname.DB)。
这样可以在ANSYS中建立整个模型的数据库。
读入数据库文件可以用如下方法:
Command:
RESUME
GUI:
UtilityMenu>File>ResumeJobname.db
UtilityMenu>File>Resumefrom
●将分析文件直接读入ANSYS进行整个分析。
这样将重新建立整个数据库,但对于大模型来说要耗费大量的机时。
要读入分析文件,可以选择下列方法之一:
Command:
/INPUT
GUI:
UtilityMenu>File>ReadInputfrom
●仅从存储的参数文件中读参数到ANSYS中,参数文件是用PARSAV命令或由UtilityMenu>Parameters>SaveParameters存储的。
读入参数可以用下列方法之一:
Command:
PARRES
GUI:
UtilityMenu>Parameters>RestoreParameters
●重新定义分析文件中存在的参数。
不过,这样做需要知道分析文件中定义了那些参数。
用以下任一方式:
Command:
*SETor“=”command
GUI:
UtilityMenu>Parameters>ScalarParameters
可以选择使用以上任意一种方式,然后用OPVAR命令(菜单路径MainMenu>DesignOpt>DesignVariables)来指定优化变量。
(参看第四步)
注——在优化过程中,ANSYS数据库不一定要同分析文件一致。
模型的输入是在优化循环过程中由分析文件中自动读入的。
第三步:
进入OPT,指定分析文件(OPT)
以下的步骤是由OPT处理器来完成的。
首次进入优化处理器时,ANSYS数据库中的所有参数自动作为设计序列1。
这些参数值假定是一个设计序列。
进入优化处理器可以用如下方式:
Command:
/OPT
GUI:
MainMenu>DesignOpt
在交互方式下,用户必须指定分析文件名。
这个文件用于生成优化循环文件Jobname.LOOP。
分析文件名无缺省值,因此必须输入。
指定分析文件名,可以用下列方式之一:
Command:
OPANL
GUI:
MainMenu>DesignOpt>Assign
在批处理方式下,分析文件通常是批命令流的第一部分,从文件的第一行到命令/OPT第一次出现。
在批处理方式中,缺省的分析文件名是Jobname.BAT(它是一个临时性的文件,是批处理输入文件的一个拷贝)。
因此,在批处理方式下通常不用指定分析文件名。
但是,如果出于某种考虑将批文件分成两个部分(一个用于分析,另一个用于整个优化分析),那么就必须在进入优化处理器后指定分析文件[OPANL]。
注——在分析文件中,/PREP7和/OPT命令必须出现在行的第一个非零字符处(即,不允许有诸如$等符号出现在有这些命令的行中)。
这一点在生成优化循环文件时很关键。
第四步:
声明优化变量
下一步是声明优化变量,即指定哪些参数是设计变量,哪些参数是状态变量,哪个参数是目标函数。
以上提到,允许有不超过60个设计变量和不超过100个状态变量,但只能有一个目标函数。
声明优化变量可以用如下的方法:
Command:
OPVAR
GUI:
MainMenu>DesignOpt>DesignVariables
MainMenu>DesignOpt>StateVariables
MainMenu>DesignOpt>Objective
对于设计变量和状态变量可以定义最大和最小值。
目标函数不需要给定范围。
每一个变量都有一个公差值,这个公差值可以由用户输入,也可以选择由程序计算得出。
如果用OPVAR命令定义的参数名不存在,ANSYS数据库中将自动定义这个参数,并将初始值设为零。
用户可以在任意时间简单地通过重新定义参数的方法来改变已经定义过的参数,也可以删除一个优化变量[OPVAR,Name,DEL]。
这种删除操作并不真正删除这个参数,而是不将它继续作为优化变量而已。
(参看“执行后修正优化变量”部分。
)
第五步:
选择优化工具或优化方法
ANSYS程序提供了一些优化工具和方法。
缺省方法是单次循环。
指定后续优化的工具和方法用下列命令:
Command:
OPTYPE
GUI:
MainMenu>DesignOpt>Method/Tool
优化方法是使单个函数(目标函数)在控制条件下达到最小值的传统化的方法。
有两种方法是可用的:
零阶方法和一阶方法。
除此之外,用户可以提供外部的优化算法替代ANSYS本身的优化方法。
使用其中任何一种方法之前,必须先定义目标函数。
●零阶方法(直接法):
这是一个完善的零阶方法,使用所有因变量(状态变量和目标函数)的逼近。
该方法是通用的方法,可以有效的处理绝大多数的工程问题。
●一阶方法(间接法):
本方法使用偏导数,即,使用因变量的一阶偏导数。
此方法精度很高,尤其是在因变量变化很大,设计空间也相对较大时。
但是,消耗的机时较多。
●用户提供的优化方法:
外部的优化程序(USEROP)可以代替ANSYS优化过程。
优化工具是搜索和处理设计空间的技术。
因为求最小值不一定是优化的最终目标,所以目标函数在使用这些优化工具时可以不指出。
但是,必须要指定设计变量。
下面是可用的优化工具:
●单步运行:
实现一次循环并求出一个FEA解。
可以通过一系列的单次循环,每次求解前设定不同的设计变量来研究目标函数与设计变量的变化关系。
●随机搜索法:
进行多次循环,每次循环设计变量随机变化。
用户可以指定最大循环次数和期望合理解的数目。
本工具主要用来研究整个设计空间,并为以后的优化分析提供合理解。
●等步长搜索法:
以一个参考设计序列为起点,本工具生成几个设计序列。
它按照单一步长在每次计算后将设计变量在变化范围内加以改变。
对于目标函数和状态变量的整体变化评估可以用本工具实现。
●乘子计算法:
是一个统计工具,用来生成由各种设计变量极限值组合的设计序列。
这种技术与称之为经验设计的技术相关,后者是用二阶的整体和部分因子分析。
主要目标是计算目标函数和状态变量的关系和相互影响。
●最优梯度法:
对用户指定的参考设计序列,本工具计算目标函数和状态变量对设计变量的梯度。
使用本工具可以确定局部的设计敏感性。
●用户提供的优化工具:
可以用外部过程(USEROP)替代ANSYS优化工具。
用户可以通过USEROP过程将自己的方法和工具补充进去。
更详细的解释在ANSYSProgrammer’sManual中。
第六步:
指定优化循环控制方式
每种优化方法和工具都有相应的循环控制参数,比如最大迭代次数等。
所有这些控制参数的设定都在同一个路径下:
GUI:
MainMenu>DesignOpt>Method/Tool
以下列出设定控制参数的命令:
●设定零阶方法的控制参数:
Command:
OPSUBP
和
Command:
OPEQN
●设定一阶方法的控制参数:
Command:
OPFRST
●设定随机搜索法的控制参数:
Command:
OPRAND
设定等步长搜索法的控制参数:
Command:
OPSWEEP
设定乘子计算法的控制参数:
Command:
OPFACT
设定最优梯度法的控制参数:
Command:
OPGRAD
设定用户优化工具的控制参数:
Command:
OPUSER
程序还提供了几个总体控制来设定优化过程中数据的存储方法:
指定优化数据的存储文件名(缺省为Jobname.OPT):
Command:
OPDATA
GUI:
MainMenu>DesignOpt>Controls
用下列方法激活详细的结果输出:
Command:
OPPRNT
GUI:
MainMenu>DesignOpt>Controls
确定最佳设计系列的数据是否存储,用下列方法(缺省是数据库和结果文件存储最后一个设计系列):
Command:
OPKEEP
GUI:
MainMenu>DesignOpt>Controls
用户还可以控制几个循环特性,包括分析文件在循环中如何读取。
可以从第一行读取(缺省),也可以从第一个/PREP7出现的位置开始读取;设定为优化变量的参数可以忽略(缺省),也可以在循环中处理。
而且,用户可以指定循环中存储哪种变量:
只存储数值变量还是存储数值变量和数组变量。
这个功能可以在循环中控制参数的数值(包括设计变量和非设计变量)。
用下列方法设定这些循环控制特性:
Command:
OPLOOP
GUI:
MainMenu>DesignOpt>Controls
注——OPLOOP命令中的Parms变量控制在循环中存储哪个参数。
在循环中存储数值变量和数组变量的选项在一般情况下不设置,除非是数组变量在分析文件外定义,而在循环中需要保存的情况。
第七步:
进行优化分析
所有的控制选项设定好以后,就可以进行分析了。
用下列方法开始分析:
Command:
OPEXE
GUI:
MainMenu>DesignOpt>Run
在OPEXE执行时,优化循环文件(Jobname.LOOP)会根据分析文件生成。
这个循环文件对用户是透明的,并在分析循环中使用。
循环在满足下列情况时终止:
收敛;中断(不收敛,但最大循环次数或是最大不合理解的数目达到了);分析完成。
如果循环是由于模型的问题(如网格划分有问题,非线性求解不收敛,与设计变量数值冲突等)中断时,优化处理器将进行下一次循环。
如果是在交互方式下,程序将显示一个警告信息并询问是继续还是结束循环。
如果是在批处理方式下,循环将自动继续。
NCNV命令(MainMenu>Solution>Nonlinear>CriteriatoStop)是控制非线性分析的,在优化循环中将被忽略。
中断循环的设计序列是存盘的,但参数的数据有可能非常大,不符合实际情况。
所有优化变量和其他参数在每次迭代后将存储在优化数据文件(Jobname.OPT)中