执行后修正优化变量
优化变量可以在优化执行之间修改,此时使用[OPVAR]命令(Main Menu>Design Opt>Design Variables)。例如,用户可能想修改目标函数的允差,状态变量的上下限,或删除一个设计变量,定义一个新的设计变量。不论是哪种情况,只要优化变量在一次优化分析后修改了,程序将自动对优化数据库进行部分的修改。这将不影响现存的设计序列和优化设定选项。只有与优化计算有关的信息将被清除。这样做是为了清除不适合于修改后的优化变量序列的数据。
局部最小值和全局最小值
有些情况下,求解过程将终止于得到一个局部最小值而非全局最小值(见图1-4)。要验证这种情况是否存在,可以用一个不同的初始设计序列(即不同的初始设计变量值)重新进行分析。另外的方法见“零阶方法的特殊情况”一章。
最小重量和最小体积
如果当前分析不需要时,应避免指定材料密度。因为不计算质量矩阵,可以节省机时。因为重量=密度*体积,所以可以通过这种方式参数化地计算重量,而把体积作为最小化的目标(假定模型密度是均匀的)。
网格密度
在形状优化问题中,循环之间有限元网格是变化的,因此验证网格精度是否足够很重要。通过用参数方式指定网格划分数或网格大小,可以在每次循环中正确的改变之。
而且,在线性应力或热分析中,可以用能量法则列出每次循环的误差率(见ANSYS Basic Analysis Procedures Guide 第五章)。一个更加有趣的扩展方式是在设计优化循环中进行一次自适应网格循环来保证网格划分误差不超过一个定值。自适应网格划分的内容见ANSYS Advanced Analysis Techniques Guide 第二章。用下列方法列出误差率:
Command: PRERR
GUI: Main Menu>General Postproc>List Results>Percent Error
Utility Menu>List>Results>Percent Error
使用子结构
如果模型只有一部分在优化设计中改变的话,可以考虑把不变的部分作成子结构。优化运行将只在使用部分(和扩展部分,如果必须的话)进行循环,从而大大节省机时。(子结构见ANSYS Advanced Analysis Techniques Guide。)
优化分析的示例(GUI方法)
在本例中,用一阶方法进行优化分析。
问题描述
一个有三根杆组成的珩架承受纵向和横向载荷。珩架的重量在
最大应力不超过400psi最小化。(因此重量为目标函数。)三根梁的横截面面积和基本尺寸B在指定范围内变化。
结构的重量初始设计为109.10磅。缺省允差(由程序计算)为初始重量的1%(11磅)。但是,为了便于收敛,一阶方法的优化分析中将目标函数的允差定为2.0。
问题参数
分析中使用如下材料特性:
E=2.1E6psi
RHO=2.85E-4lb/in3 (比重)
最大许用应力=400psi
分析中使用如下几何特性:
横截面面积变化范围=1到1000in2 (初始值为1000)
基本尺寸B变化范围=400到1000in (初始值为1000)
问题简图
第一步:指定文件名
1. 选择Utility Menu>File>Change Jobname,打开文件名对话框。
2. 输入“truss”为工作文件名。
3. 单击OK关闭对话框。
第二步:指定分析题目
1. 选择Utility Menu>File>Change Title,打开更改分析题目对话框。
2. 输入“Optimization of a Three-Bar Truss”作为分析题目。
3. 单击OK关闭对话框。
第三步:定义参数初始值
1. 选择Utility Menu>Parameters>Scalar Parameters,打开数值参数对话框。在选择区域中输入下列内容:
B=1000 按ENTER键
A1=1000 按ENTER键
A2=1000 按ENTER键
A3=1000 单击OK。
参数将在菜单中显示出来。
2. 在数值参数对话框中单击OK。
第四步:定义单元类型
1. 选择Main Menu>Preprocessor>Element Type>Add/Edit/Delete,打开单元类型对话框。
2. 在单元类型库对话框中单击Add。
3. 在左边列中单击Structural Link。
4. 在右边列中单击2D Spar 1。
5. 在单元参考号区域键入1。
6. 在单元类型库对话框中单击OK。
7. 在单元类型对话框中单击Close。
第五步:定义实参
1. 选择Main Menu>Preprocessor>Real Constants,打开实参对话框。
2. 单击Add,打开实参对话框中单元类型。
3. 单击OK,打开LINK1实参对话框。
4. 在实参序列号区域中键入1。
5. 在横截面区域中键入A1。
6. 单击Apply。这将确认LINK1的实参并将1000输入实参1的横截面区域。
7. 在实参序列号区域键入2。
8. 在横截面面积区域键入A2。
9. 单击Apply。这将确认LINK1的实参并将1000输入实参1的横截面区域。
10.在实参序列号区域键入3。
11.在横截面面积区域键入A3。
12.在LINK1实参对话框中单击OK。
13.在实参对话框中单击 Close。
第六步:定义材料特性
1. 选择Main Menu>Preprocessor>Material Props>-Constant->Isotropic,打开各项同性材料特性对话框。
2. 在材料号区域中输入1。
3. 单击OK打开第二个各项同性材料特性对话框。
4. 在杨氏模量对话框输入2.1E6。
5. 单击OK并关闭对话框。
第七步:生成结点
1. 选择Main Menu>Preprocessor>-Modeling->Create>Nodes>In Active CS,打开在活动坐标系中生成结点对话框。
2. 在结点号区域中输入1。
3. 在活动坐标域,第一个域中输入-B,第二个域中输入0,第三个输入0。
4. 单击Apply。结点1将出现在ANSYS图形窗口。
5. 在结点号码域中输入2。
6. 在活动坐标域,第一个域中输入0,第二个域中输入0,第三个输入0。
7. 单击Apply。结点2将出现在ANSYS图形窗口。
8. 在结点号码域中输入3。
9. 在活动坐标域,第一个域中输入B,第二个域中输入0,第三个输入0。
10.单击Apply。结点2将出现在ANSYS图形窗口。
11.在结点号码域中输入3。
12.在活动坐标域,第一个域中输入0,第二个域中输入-1000,第三个输入0。
13.单击OK关闭在活动坐标系生成结点对话框。结点4将出现在ANSYS图形窗口中。所有4个结点都出现在ANSYS图形窗口
14.打开结点号码。选择菜单Utility Menu>PlotCtrls>Window Controls>Window Options打开窗口选项对话框。
15.在结点号码框上单击OFF(将切换为ON)。
16.单击OK关闭对话框。
17.选择菜单Utility Menu>PlotCtrls>Window Controls>Windows Options打开窗口对话框。
18.在坐标位置出选取不显示选项。
19.单击OK关闭对话框。
第八步:生成单元
1. 选择菜单Main Menu>Preprocessor>-Modeling->Create>Elements>-Auto Numbered->Thru Nodes打开结点对话框的单元项。
2. 在图形窗口,拾取结点1和4(按照该顺序)。在选择的结点周围将出现一个小框。
3. 在该对话框单击OK关闭对话框。ANSYS图形窗口中1和4结点之间将出现一个线单元1。
4. 选择菜单Main Menu>Preprocessor>-Modeling->Create>Elements>
Elem Attributes打开单元特性对话框。
5. 在实参序列号中输入2。
6. 在单元特性对话框中单击OK。
7. 选择菜单Main Menu>Preprocessor>-Modeling->Create>Elements>-Auto Numbered->Thru Nodes打开结点对话框的单元项。
8. 在图形窗口,拾取结点2和4(按照该顺序)。
9. 在该对话框单击OK关闭对话框。ANSYS图形窗口中3和4结点之间将出现一个线单元2。
10.选择菜单Main Menu>Preprocessor>-Modeling->Create>Elements>Elem Attributes打开单元特性对话框。
11.在实参序列号中输入2。
12.在单元特性对话框中单击OK。
13.选择菜单Main Menu>Preprocessor>-Modeling->Create>Elements>-Auto Numbered->Thru Nodes打开结点对话框的单元项。
14.在图形窗口,拾取结点2和4(按照该顺序)。
15.在该对话框单击OK关闭对话框。ANSYS图形窗口中3和4结点之间将出现一个线单元3。
第九步:施加位移约束和载荷
1. 选择菜单Main Menu>Solution>-Loads->Apply>-Structural->Displacement>On Nodes 打开Apply U,ROT on Nodes的对话框。
2. 在ANSYS图形窗口,拾取结点1,2和3。
3. 单击OK关闭对话框并打开第二个Apply U,ROT on Nodes的对话框。
4. 在要约束的自由度菜单上单击ALL DOF选项。
5. 单击OK关闭对话框。
6. 选择菜单Main Menu>Solution>-Loads-Apply>-Structural-Force/Moment>On Nodes打开Apply F/M on Nodes对话框。
7. 在ANSYS图形窗口,拾取结点4。
8. 在对话框中单击OK关闭并打开第二个Apply F/M on Nodes对话框。
9. 将Force/Mom方向设为FX。
10.在Force/Moment Value域输入200000。
11.单击OK关闭对话框。在结点4上将出现一个横向箭头表示施加的载荷。
12.选择菜单Main Menu>Solution>-Loads-Apply>-Strutural-Force/Moment>On Nodes打开Apply F/M on Nodes对话框。
13.在ANSYS图形窗口,单击结点4。
14.在对话框中单击OK关闭并打开第二个Apply F/M on Nodes对话框。
15.将Force/Mom方向设为FX。
16.在Force/Moment Value域输入-200000。
17.单击OK关闭对话框。在结点4上将出现一个垂直箭头表示施加的载荷。
第十步:求解模型
1. 选择菜单Main Menu>Solution>-Solve->Current LS打开Solve Current Load Step对话框。求解目标和载荷步选项在出现在状态窗口。
2. 查看状态窗口中的目标信息并在菜单条上单击Close关闭。
3. 在该对话框中单击OK。
4. 求解完毕后,将出现信息框告诉用户求解完毕。单击Close关闭对话框。
第十一步: 进入后处理器并读出单元总体积
1. 选择菜单Main Menu>General Postproc>Element Table>Define Table 打开Element Table Data 对话框。
2. 单击Add定义单元表格并打开Define Additional Elementary Table Items 对话框。
3. 在User Label域中输入EVOL。
4. 在Item,Comp Results Data Item菜单的左列单击Geometry,在右列单击Elem Volume VOLU。
5. 单击OK关闭对话框。
6. 在Element Table Data对话框中单击Close。
7. 选择菜单Main Menu>General Postproc>Element Table>Sum of Each Item打开Tabular Sum of Each Element Table Item对话框。
8. 单击OK计算总和。SSUM命令窗口将显示总和为0.382842E+07。
9. 单击菜单条上的Close关闭SSUM命令窗口。
10.选择菜单Utility Menu>Parameters>Get Scalar Data打开Get Scalar Data对话框。
11.在Type of Data to be Retrieved 菜单左列单击Results Data,在右列单击Elem Table Sums。
12.单击OK关闭对话框并打开Get Element Table Sum Results 对话框。
13.在Name of Parameter to be Defined域输入VTOT。
14.单击OK关闭对话框。
15.选择菜单Utility Menu>Parameters>Scalar Parameters 打开Scalar Parameters对话框。
16.在Selection域输入RHO=2.85E-4并按ENTER键。本信息应显示在菜单上。
17.在Selection域输入WT=RHO*VTOT并按ENTER键。总的体积将计算并显示在菜单中。重量应为1091.10173。
18.单击Close关闭对话框。
第十二步:读出轴向应力
1. 选择菜单Main Menu>General Postproc>Element Table>Define Table打开Element Table Data对话框。
2. 单击Add打开Define Additional Element Table Items对话框。
3. 在User Lable for Item域键入SIG。
4. 在Item,Comp Results Data Item菜单左列单击By Sequence Num,在右列单击LS。
5. 在Selection域,在“LS”后键入1(表示序列号为1)。
6. 单击OK关闭对话框。
7. 在Element Table Data对话框中单击Close。
8. 选择菜单Utility Menu>Parameters>Get Scalar Data打开Get Scalar Data对话框。
9. 在the Type of Data to be Retrieved菜单,在左列单击Results Data,在右列单击Elem Table Data。
10.单击OK关闭对话框并打开Get Element Table Data对话框。
11.在Name of Parameter to be Defined 域输入SIG1。
12.在Element Number N域输入1。
13.将Elem Table Data to be Retrieved 域设为SIG。
14.单击Apply关闭对话框并打开Get Scalar Data 对话框。
15.在Type of Data to be Retrieved菜单,在左列单击Results Data,在右列单击Elem Table Data。
16.单击OK打开Get Element Table Data 对话框。
17.在Name of Parameter to be Defined 域输入SIG2。
18.在Element Number N域输入2。
19.将Elem Table Data to be Retrieved 域设为SIG。
20.单击Apply关闭对话框并打开Get Scalar Data 对话框。
21.在Type of Data to be Retrieved菜单,在左列单击Results Data,在右列单击Elem Table Data。
22.单击OK打开Get Element Table Data 对话框。
23.在Name of Parameter to be Defined 域输入SIG3。
24.在Element Number N域输入3。
25.将Elem Table Data to be Retrieved 域设为SIG。
26.单击OK关闭对话框。
27.计算轴向应力的绝对值。选择菜单Utility Menu>Parameters>Scalar Parameters打开Scalar Parameters对话框。在Selection域输入以下信息:
SIG1=ABS(SIG1) 输入ENTER
SIG2=ABS(SIG2) 输入ENTER
SIG3=ABS(SIG3) 单击OK
28.单击Close关闭对话框。
第十三步:显示当前设计
1. 选择菜单Utility Menu>PlotCtrls>Style>Size and Shape打开the Size and Shape对话框。
2. 在Display of element shapes based on real constant description表示的行中单击OFF将其切换为ON。
3. 在Real constant
4. 单击OK关闭对话框。
5. 选择菜单Utility Menu>PlotCtrls>Pan,Zoom,Rotate打开Pan,Zoom,Rotate对话框。
6. 单击ISO显示3杆珩架的轴测图。
7. 单击Close关闭对话框。
8. 选择菜单Utility Menu>Plot>Elements画出珩架。
第十四步:生成优化分析文件
1. 选择菜单Utility Menu>File>Write DB Log File打开Write Database Log对话框。
2. 在Write Database Log To域中添加“truss.lgw”到路径名中。
3. 单击OK关闭对话框。
第十五步:进入优化处理器并指定分析文件
1. 选择菜单Main Menu>Design Opt>-Analysis File->Assign打开Assign Analysis File对话框。
2. 在Selection域添加“truss.lgw”到路径名(或在文件列表中拾取truss.lgw)。
3. 单击OK关闭对话框。
第十六步:定义优化设计变量
1. 选择菜单Main Menu>Design Opt>Design Variables打开Design Variables对话框。
2. 单击Add打开Define a Design Variable对话框。
3. 在Parameter Name菜单单击B;B将出现在Selection域。
4. 在Minimum Value域中输入400。
5. 在Maximum Value域中输入2000。
6. 单击Apply确认设计变量。
7. 在Parameter Name菜单单击A1;A1将出现在Selection域。
8. 在Minimum Value域中输入1。
9. 在Maximum Value域中输入1000。
10.单击Apply确认设计变量。
11.在Parameter Name菜单单击A2。
12.在Minimum Value域中输入1。
13.在Maximum Value域中输入1000。
14.单击Apply确认设计变量。
15.在Parameter Name菜单单击A3。
16.在Minimum Value域中输入1。
17.在Maximum Value域中输入1000。
18.单击OK关闭对话框。
19.单击Close关闭Design Variables对话框。
第十七步:定义优化状态变量
1. 选择菜单Main Menu>Design Opt>State Variables打开State Variables对话框。
2. 单击Add打开Define a State Variable 对话框。
3. 在Parameters Name域选择SIG1;SIG1将出现在Selection 域。
4. 在Upper Limit 域输入400。
5. 单击Apply确认状态变量。
6. 在Parameters Name域选择SIG2;SIG2将出现在Selection 域。
7. 在Upper Limit 域输入400。
8. 单击Apply确认状态变量。
9. 在Parameters Name域选择SIG3;SIG3将出现在Selection 域。
10.在Upper Limit 域输入400。
11.单击OK关闭对话框。
12.单击Close关闭State Variable对话框。
第十八步:存储优化数据库
1. 选择菜单Main Menu>Design Opt>-Opt Database->Save打开Save Optimization Data 对话框。
2. 在Selection域添加“trussvar.opt”到路径名。
3. 单击OK关闭对话框。
第十九步:设置重量为目标函数
1. 选择菜单Main Menu>Design Opt>Objective 打开Define Objective Function对话框。
2. 在Parameter Name菜单单击WT;WT将出现在Selection域。
3. 在Convergence Tolerance域输入2。
4. 单击OK关闭对话框。
第二十步:指定一阶优化方法
1. 选择菜单Main Menu>Design Opt>Method/Tool打开Specify Optimization Method对话框。
2. 在Select Method/Tool列表中单击First-Order radio按纽。
3. 单击OK打开Controls for First-Order Optimization对话框。
4. 在maximum Iterations域中输入45。
5. 单击OK关闭对话框。
第二十一步:运行优化
1. 选择菜单Main Menu>Design Opt>Run打开Begin Execution of Run 对话框。
2. 查看分析信息,单击OK开始优化运算。
求解过程要持续一些时间。在优化循环结束后,最佳设计序列号为16,重量为3
第二十二步:列出最佳设计序列和所有设计序列
1. 选择菜单Main Menu>Design Opt>-Design Sets->List打开List Design Set对话框。
2. 在列表选项中拾取BEST序列。
3. 拾取OK打开OPLIST命令窗口。最佳序列为16。
4. 在查看优化参数值后,在菜单条上单击Close。
5. 选择菜单Main Menu>Design Opt>-Design Sets->List打开List Design Sets 对话框。
6. 在列表选项中拾取ALL序列。
7. 单击OK打开OPLIST命令窗口。
8. 查看完所有设计序列后,单击菜单条上的Close。
第二十三步:将重量和基本尺寸作为迭代次数的函数显示
1. 选择菜单Utility Menu>PlotCtrls>Pan,Zoom,Rotate 打开Pan-Zoom-Rotate对话框。
2. 单击Front选择X-Y平面视角。
3. 单击Close关闭对话框。
4. 选择Utility Menu>PlotCtrls>Style>Graphs打开Graph Controls对话框。
5. 在X-Axis标记域输入ITERATION NUMBER。
6. 在Y-Axis标记域输入STRUCTURE WEIGHT。
7. 单击OK关闭对话框。
8. 选择菜单Main Menu>Design Opt>Graphs/Tables打开Graph/List Tables of Design Set Parameters对话框。
9. 在Y-Variable Params菜单单击WT。
10.单击OK关闭对话框。在ANSYS图形窗口将显示重量和迭代的图形。
11.选择Utility Menu>PlotCtrls>Style>Graphs打开Graph Controls对话框。
12.在Y-Axis 标记域输入BASE DIMENSION。
13.单击OK关闭对话框。
14.选择菜单Main Menu>Design Opt>Graphs/Tables打开Graph/List Tables of Design Set Parameters 对话框。
15.在Y-Variable Params菜单单击WT不选它,然后单击B。
16.单击OK关闭对话框。在ANSYS图形窗口将显示Base Dimension和Iteration图形。
第二十四步:将最大应力和截面尺寸作为迭代数的函数显示
1. 选择菜单Utility Menu>PlotCtrls>Style>Graphs打开Graph Controls对话框。
2. 在Y-Axis 标记域输入MAXIMUM STRESS。
3. 单击OK关闭对话框。
4. 选择菜单Main Menu>Design Opt>Graphs/Tables打开Graph/List Tables of Design Set Parameters对话框。
5. 在Y-Variable Params菜单单击B不选它,然后单击SIG1,SIG2,SIG3。
6. 单击OK关闭对话框。在ANSYS图形窗口将显示应力和迭代数的图形。
7. 选择菜单Utility Menu>PlotCtrls>Style>Graphs打开Graph Controls对话框。
8. 在Y-Axis 标记域输入CROSS-SECTIONAL AREA。
9. 单击OK关闭对话框。
10.选择菜单Main Menu>Design Opt>Graphs/Tables打开Graph/List Tables of Design Set Parameters对话框。
11.在Y-Variable Params菜单单击 SIG1,SIG2,SIG3不选它,然后单击A1,A2,A3。
12.单击OK关闭对话框。在ANSYS图形窗口将显示截面面积和迭代数的图形。
第二十五步:退出ANSYS
1. 在ANSYS工具栏单击Quit。
2. 选择一个选项存盘,然后单击OK。
优化分析示例(命令和批处理方式)
也可以用命令行方式做以上的优化分析。以!开始的行为注释行。
/FILNAM,truss
/TITLE,Optimization of a three-bar truss
!初始化设计变量参数
B=1000 !基本尺寸
A1=1000 !第一个面积
A2=1000 !第二个面积
A3=1000 !第三个面积
!
!进入PREP7并建模
/PREP7
ET,1,LINK1 !二维杆单元
R,1,A1 !以参数形式的实参
R,2,A2
R,3,A3
MP,EX,1,2.1E6 !杨氏模量
N,1,-B,0,0 !定义结点
N,2,0,0,0
N,3,B,0,0
N,4,0,-1000,0
E,1,4 !定义单元
REAL,2
E,2,4
REAL,3
E,3,4
FINISH
!
!进入求解器,定义载荷和求解
/SOLU
D,1,ALL,0,,3 !结点UX=UY=0
F,4,FX,200000 !结点4上
F,4,FY,-200000 !结点4上的Y方向载荷分量
SOLVE
FINISH
!
!进入POST1并读出状态变量数值
/POST1
SET,LAST
ETABLE,EVOL,VOLU !将每个单元的体积放入ETABLE
SSUM !将单元表格内数据求和
*GET,VTOT,SSUM,,ITEM,EVOL !VTOT=总体积
RHO=2.85E-4
WT=RHO*VTOT !计算总体积
ETABLE,SIG,LS,1 !将轴向应力放入ETABLE
!
*GET,SIG,ELEM,1,ETAB,SIG !SIG1=第一个单元的轴向应力
*GET,SIG,ELEM,2,ETAB,SIG !SIG2=第二个单元的轴向应力
*GET,SIG,ELEM,3,ETAB,SIG !SIG3=第三个单元的轴向应力
!
SIG1=ABS(SIG1) !计算轴向应力的绝对值
SIG2=ABS(SIG2)
SIG3=ABS(SIG3)
!
/ESHAPE,2 !以实体单元模式显示壳单元
/VIEW,1,1,1,1 !轴测视图
EPLOT !画单元
!
/OPT !进入优化处理器
OPANL,truss,lgw !指定分析文件(批处理方式中不用这个命令)
!
OPVAR,B,DV,400,2000 !定义设计变量
OPVAR,A1,DV,1,1000
OPVAR,A2,DV,1,1000
OPVAR,A3,DV,1,1000
OPVAR,SIG1,SV,,400 !定义状态变量
OPVAR,SIG2,SV,,400
OPVAR,SIG3,SV,,400
!
OPSAVE,trussvar,opt !存储数据
!
OPVAR,WT,OBJ,,,2, !定义目标函数
!
OPTYPE,FIRST !定义一阶方法
OPFRST,45 !最大45次迭代
OPEXE !开始优化分析
!
OPLIST,16 !列出最佳设计序列,号为16
OPLIST,ALL !列出所有设计序列
!
/VIEW,1,,,1 !前视图
!
/AXLAB,X,ITERATION NUMBER !画重量对迭代数图形
/AXLAB,Y STRUCTURE WEIGHT
PLVAROPT,WT
!
/AXLAB,Y,BASE DIMENSION !画B对迭代数图形
PLVAROPT,B
!
/AXLAB,Y,MAX STRESS !画最大应力对迭代数图形
PLVAROPT,SIG1,SIG2,SIG3
!
/AXLAB,Y,CROSS-SECTIONAL AREA ! 画面积对迭代数图形
PLVAROPT,A1,A2,A3
!
FINISH
/EXIT
《ANSYS Verification Manual》中的例题:
VM155 悬臂梁的形状优化
VM157 框架结构的优化
转自:http://blog.sina.com.cn/s/blog_a319f5ff0101f6m5.html
|