OptiStruct及HyperStudy优化与工程应用
上QQ阅读APP看书,第一时间看更新

4.2 设计变量和变量关联

4.2.1 离散变量

在定义优化问题时,设计变量都有自己的变化范围,例如零件的厚度可以在1.0mm~2.0mm之间变化,梁截面的高度可以在10mm~40mm之间变化。人们却往往忽视了一个问题,厚度和高度真的可以在这个区间内任意取值吗?如果最优厚度计算结果是1.268mm,最终产品该如何选择?实际设计中,由于工艺、成本、设备的种种限制,设计变量的取值并不是那么自由。钢材的厚度和梁截面的高度只能在有限的几个规格中选择。此时,这些设计变量就不能在取值范围内连续变化了。数学上,把可在一定区间内连续取值的量叫连续变量。相应地,只能取有限个数值的量叫离散变量。

OptiStruct中对离散变量的设置需要经过以下两步。

1)定义离散变量的取值范围(DDVAL)。面板:Analysis>Optimization>discrete dvs,如图4-15所示。离散变量的定义支持多种方式,一种是直接在individual values中依次输入各个取值,另一种是在value range中指定起始值、终值和步长值。也可把上述两种方法结合起来使用。

图4-15 离散值定义

2)更新尺寸变量的定义,引用取值范围(DDVAL)。面板:Analysis>Optimization>size(parameter),如图4-16所示。切换下方按钮到ddval,即可选择已经创建的离散变量范围。

图4-16 设计变量

小技巧:变量最终的取值范围是size(parameter)面板的范围和离散变量范围的交集,因此,通常会给离散变量一个很大的变化范围,然后在该面板中确定上下限。

对于连续变量的尺寸优化和形状优化问题,默认的优化算法是可行方向法(MFD)。如果设计约束中有等式约束,那么序列二次规划(SQP)是默认算法。优化算法可以通过卡片DOPTPRM、OPTMETH进行控制。对于离散变量,OptiStruct默认进行全离散变量优化。也可以选择两阶段优化,即先进行一次连续变量优化,然后基于连续变量的最优解进行离散变量的优化。还可以忽略离散变量的定义,完全进行连续变量优化,不过变量的变化范围受DDVAL定义的约束。这三个方法可以通过卡片DOPTPRM,DDVOPT取1、2、3来定义,如图4-17所示。优化算法和离散变量选项也可以通过面板opti control下的OPMETH和DDVOPT进行设置。

图4-17 优化控制选项

4.2.2 变量关联

工程实践中各个变量可能还会相互制约和影响,表现在优化问题中就是变量之间有一定的数学关系,可以是相等,也可以是函数表达式关系。对称的两个零件具有相同的厚度和形状,装配在一起的轴和孔必须大小一致。对称零件在产品设计中相当普遍,图4-18上面的图就显示了汽车白车身中A柱左右内板厚度对称的情况,另一张图则展示了激光拼焊的两块板板厚之差应该在允许的范围内。当出现这些情况时,需要显式地定义两个变量之间的关系,把两个变量关联起来,以其中一个变量为独立变量,另外有限个变量为非独立变量,定义它们之间的关系表达式。变量关联不仅满足了产品设计的要求,也在一定程度上减少了优化计算的运算量。

图4-18 零件厚度的对称和相关关系

定义变量关联的方式有两种,线性求和关系用DLINK定义,函数表达式关系用DLINK2定义。

线性求和关系是指变量之间的关系是一阶多项式相加的结果,表达式中的系数分别与面板中的各项对应,如图4-19所示。

图4-19 线性求和关系定义

函数表达式关系是指变量之间的关系不是简单的线性关系,而是复杂的函数关系。这就需要首先定义一个equation(方程),然后在dlink2面板中引用该方程,最后通过edit按钮,按照定义方程时参数的出现顺序依次选择所需要的变量,如图4-20所示。

图4-20 函数表达式关系定义

4.2.3 批量创建尺寸变量

如果需要进行优化的零件数量很多,需要设置的尺寸变量非常多,那么按照标准流程需要先定义变量,再定义变量与属性之间的关系,这个过程工作量较大。HyperMesh提供批量创建尺寸变量的方式,通过optimization面板下的gauge子面板可以批量选中多个属性,自动创建所有的变量和关系。目前支持PSHELL、PCOMP和PCOMPG三种类型的属性。value from property开关决定各个变量的初值是从当前属性读取还是统一输入数值。lower bound和upper bound可直接指定上下限的绝对值,也可输入百分比,代表在初值基础上上下浮动。separate desvar for each prop表示每个属性各生成一个尺寸变量,切换成same desvar for all props时表示只生成一个设计变量,即所有选中的属性值都相等,等于同一个尺寸变量,如图4-21所示。

图4-21 批量创建尺寸变量

4.2.4 尺寸优化结果的后处理

尺寸优化完成后的属性值如何更新到模型上呢?尺寸优化结果其实就是一组新的属性数值,如果变量少,当然可以根据优化结果手动更新,如果有几十甚至上百个属性要更新呢?Hy perMesh提供了更加简便的方法。尺寸优化的结果默认是最后一个迭代步的所有属性值,都会输出在prop文件中,只需将该文件导入原始模型中覆盖属性即可。注意勾选FE overwrite选项才能生效,如图4-22所示。

图4-22 导入尺寸优化结果

4.2.5 实例:厚度依赖的车架尺寸优化

在4.1.2节车架厚度优化模型的基础上,进行一个具有厚度依赖和离散变量的尺寸优化。

优化三要素

优化目标:结构质量最小化。

设计约束:左侧加载点Y向变形小于6mm;右侧加载点Y向变形大于-6mm(注意右侧加载点Y向变形为负);结构应力小于350MPa。

设计变量:前后横梁和左右边梁的厚度,共4个,每个变量的变化范围为初始值± 20%;厚度只能在[0.5mm,2.0mm]内取0.1mm的倍数;左右边梁厚度相等,且边梁厚度比前横梁厚度大0.2mm。

操作视频

操作步骤

Step 01 导入模型文件CH4_frame2_opt_start.fem。

Step 02 定义左右边梁厚度等于前横梁厚度加0.2mm。进入Analysis>optimization>desvar link子面板,输入dlink名称Rthick,依赖变量dependent选择d_right,独立变量independent选择d_front,C0处输入0.2,单击create按钮。这就相当于创建了关系d_right=d_front+0.2,如图4-23所示。

Step 03 重复上一步操作,创建另一个dlink,名为Lthick,定义左边梁d_left=d_front+0.2。这里需要注意,不能先定义左右边梁厚度相等,再定义右边梁厚度等于前横梁厚度加0.2,因为OptiStruct不支持链式的依赖关系。先定义d_left=d_right,再定义d_right=d_front+0.2,将会得到以下错误。

图4-23 变量关联

Step 04 定义离散变量变化范围。进入Analysis>optimization>discrete dvs子面板,离散变量名为dthick,变化范围为0.5~2.0,步长为0.1,如图4-24所示。

图4-24 定义离散变量

Step 05 更新设计变量。这里有两种方法,第一种方法:进入Analysis>optimization>size子面板。单击review按钮,选择d_left,更新变量范围为0.5~2.0,切换最下方的no ddval为ddval,单击ddval按钮,选择dthick,最后单击update按钮。重复这一步骤,依次更新4个变量,如图4-25所示。

图4-25 更新变量

第二种方法更简洁快速,可以一次性更新4个设计变量。通过左侧的模型浏览器,选中4个设计变量,在下方上下限(Lower Bound、Upper Bound)栏分别输入0.5和2.0。在Ddval Id一栏单击后选择已经创建的离散变量dthick,如图4-26所示。

Step 06 提交计算和后处理。优化后的厚度云图如图4-27所示。

图4-26 模型浏览器更新变量

图4-27 车架离散厚度优化结果

Step 07 将CH4_frame2_opt_finish.prop文件导入原模型覆盖,完成厚度更新。

拓展请思考以下问题

1)如果厚度的限制条件变为左右边梁厚度与前横梁的厚度差值小于0.3,该如何解决?2)如果给定扭转刚度值的计算公式,要求约束刚度值,该如何定义刚度响应?

KF*L/arctan(dy/L

式中,F为加载力的大小;L为两加载点的距离;dy为两加载点在Y方向上的位移之差的绝对值。

4.2.6 实例:高层建筑框架结构梁截面优化

框架结构是多层、小高层建筑中一种常见的结构形式,在高层的民用建筑和多层的工业厂房中应用广泛,主要由横梁和柱组成的节点构成承载结构,如图4-28所示。按材料来分,可以有钢框架、混凝土框架、胶合木框架等。框架结构的受力特点类似于竖向悬臂剪切梁,其总体水平位移上大下小,但相对于各楼层而言,层间变形上小下大,如何提高框架抵抗侧向载荷的刚度及控制好结构层间的位移角是设计中的重要考虑因素。

图4-28 框架结构简图

本例将以一个9层高钢框架建筑为例,在风载作用下,优化梁截面参数,在控制结构层间位移角的情况下,最小化结构的用钢量。结构受自重和风载作用,楼板采用壳单元模拟,材料为混凝土。柱和梁采用梁单元模拟,材料为钢。梁单元类型为CBEAM,属性类型为PBEAML。梁和柱均采用工字型截面,只是规格不同,截面各参数如图4-29所示。风载的大小需要结合建筑本身、地理位置和设计规范进行计算,施加在侧面节点处,如图4-30所示。自重使用GRAV卡片定义,自重和风载最后通过一个LOADADD卡片进行组合。

图4-29 工字梁截面参数

图4-30 框架结构受力

静力分析后结构的X方向即水平位移如图4-31所示。初始状态下结构总重量为1043.31t,其中钢材用量为143.31t。层间位移角是指按弹性方法计算的风载或多遇地震标准值作用下的楼层层间最大水平位移与层高之比Δu/h。从图4-31可以看出,层间位移最大的地方出现在第1、2、3、4层之间,本例中的层高相等,故层间位移角也是这几个楼层间最大,所以在优化中以1、2、3、4层的层间位移角为约束。

图4-31 框架结构初始变形结果

优化三要素

优化目标:结构质量最小化。

设计约束:1、2层,2、3层,3、4层的层间位移角小于1/500。

设计变量:梁和柱两种工字型截面的各4个尺寸,分别为DIM1、DIM2、DIM3、DIM在初始值的基础上,上下浮动20%。

操作视频

操作步骤

Step 01 导入模型文件steel_beam_start.fem,定义设计变量。进入Analysis>optimization>size面板,选择desvar子面板,如图4-32所示。依次定义8个设计变量,名称和取值范围见表4-2。

表4-2设计变量名称和取值范围

图4-32 设计变量

Step 02 定义设计变量与属性厚度的关联。进入generic relationship子面板,定义设计变量D1与属性column的尺寸Dimension1之间的关系,名字为RD1,如图4-33所示。重复以上步骤,再分别定义变量D2~D4与column属性的Dimension2~Dimension4相关联,DH1~DH4与pb_hori的Dimension1~Dimension4相关联。

图4-33 关系创建

Step 03 定义梁质量响应,名称为mass。选择类型为sum,然后仅选择梁单元属性。

Step 04 定义位移响应,分别为d11、d20、d39、d49,分别选择4个节点(11,20,39,49)的X方向位移,即dof1。

Step 05 定义层间位移角响应。

① 层间位移角的公式为Δu/h,需要先定义一个方程。进入Optimization>dequations子面板,输入方程名称fdrift和表达式f(u1,u2)=abs(u1-u2)/3500.0,如图4-34所示。

图4-34 方程创建

② 定义1、2层的层间位移角。进入responses子面板,如图4-35所示,输入响应名drift12,选择类型为function,dequation选择方程fdrift,然后单击edit按钮,进入编辑面板,如图4-36所示。

图4-35 函数响应

③ 勾选RESPONSES,并在弹出的nresponses文本框中输入需要引用的响应个数2。面板上方将会弹出选择按钮,分别选择已经创建好的11号节点和20号节点的位移响应。单击return按钮,返回responses子面板,然后单击create按钮,1、2层间的位移角创建完毕。

图4-36 响应定义

④ 重复以上步骤,分别定义2、3层的层间位移角和3、4层的层间位移角为drift23、drift34。注意选择对应节点的响应。

Step 06 定义层间位移角约束。进入dconstraints子面板,分别定义3个层间位移角小于1/500的约束,如图4-37所示。

图4-37 约束定义

Step 07 定义最小化质量为优化目标。

Step 08 提交计算。进入Analysis面板下的OptiStruct子面板,保存文件为steel_beam_finish.fem,单击OptiStruct提交计算。

Step 09 查看优化结果。计算完成后,可以在.out文件中看到优化收敛并具有FEASIBLE DESIGN。如图4-38所示,优化最后一步的结果显示在.out文件中,优化后的属性保存在steel_beam_finish.prop文件中。同时,还可以从.out文件中看出,优化最后一个迭代步的总质量为1019.44t,钢材重量为119.44t,相对于初始重量143.31,减重16.66%。

图4-38 优化输出

Step 10 返回HyperMesh,确保优化模型已经载入。单击Import按钮,选择导入solver deck。选择steel_beam_finish.prop文件,并注意勾选下方的FE overwrite选项,单击import按钮,模型中梁截面的参数将被更新。

拓展请思考以下问题

1)本例中最后梁截面的优化结果可能是不规则的小数,现实中的选择是有限的截面,如何得到更符合工程实际的值?

2)优化得到的一组设计变量一定是最优化的结果吗?如果是,那么优化算法是遍历了所有可能的组合吗?

3)本例中梁单元使用了PBEAML属性,为什么不使用PBEAM属性呢?

PBEAML属性中直接引用梁截面的尺寸参数来计算截面的相关物理特性,下面的DIM1(A)、DIM2(A)等字段就是截面参数,所以PBEAML支持常见的标准截面,如图4-39所示。这里仅列出部分截面,更详细的信息请参考帮助文档。

图4-39 PBEAML截面参数

由于PBEAML属性中直接引用了截面参数,尺寸优化中便可以直接以这些参数作为优化的设计变量。反观PBEAM的卡片定义,卡片中直接使用的是截面的物理参数,如面积A,截面的惯性矩I1、I2等,那么在尺寸优化中,只能选择这些物理参数作为设计变量,最后的优化结果也是这些物理参数的值。这将带来一个问题,工程师需要根据数值的大小去选择一个现有的截面来使用,也就是要凑出一个物理参数等于最优值的截面。同一组物理参数,可能会有多种截面对应,甚至出现找不到合适截面的情况。

属性为PBEAM时,可选择的优化参数如图4-40所示。

图4-40 PBEAM可选属性