ANSYS优化揭密 引子 时下 ANSYS高手颇多,但还有很多FEA战友对 ANSYS的优化过程用之不 熟,这里抛砖引玉,写下自己对 ANSYS优化模块的使用心得,不当之处敬请指 正 1.认识 ANSYS优化模块 1.1什么时候我需要它的帮忙? 什么是 ANSYS优化?我想说明一个例子要比我在这里对你絮叨半天容易理 解的多 注意过普通的水杯吗?底面圆圆的,上面加盖的哪一种。仔细观察一下,你 会发现比较老式的此类水杯有一个共同特点:底面直径=水杯高度 图1水杯的简化模型 为什么是这样呢?偷偷的告诉你:因为只有满足这个条件,才能在原料耗费 最少的情况下使杯子的容积最大。可不是,在材料一定的情况下,如果水杯的底 面积大,其高度必然就要小;如果高度变大了,底面积又大不了,如何调和这两 者之间的矛盾?其实这恰恰就反应了一个完整的优化过程。 在这里,一个水杯的材料是一定的,所要优化的变量就是杯子底面的半径r 和杯子的高度h,在 ANSYS的优化模块里面把这些需要优化的变量叫做设计变 量(DV):优化的目标是要使整个水杯的容积最大,这个目标在 ANSYS的优化 过程里叫目标函数(OBJ);再者,对设计变量的优化有一定的限制条件,比如 说整个杯子的材料不变,这些限制条件在 ANSYS的优化模块中用状态变量(SV 来控制。闲话少说,下面我们就来看看 ANSYS中怎么通过设定DV、SV、OBJ, 利用优化模块求解以上问题 首先参数化的建立一个分析文件(我假设叫 volu. inp),水杯初始半径为 1,高度为H=1(DV),由于水杯材料直接喝水杯的表面积有关系,这里我假设 水杯表面积不能大于100,这样就有S=2RH+2R2<100(SV),水杯的容积
ANSYS 优化揭密 引子 时下 ANSYS 高手颇多,但还有很多 FEA 战友对 ANSYS 的优化过程用之不 熟,这里抛砖引玉,写下自己对 ANSYS 优化模块的使用心得,不当之处敬请指 正。 deform@smth Aug. 14,2002 1. 认识 ANSYS 优化模块 1.1 什么时候我需要它的帮忙? 什么是 ANSYS 优化?我想说明一个例子要比我在这里对你絮叨半天容易理 解的多。 注意过普通的水杯吗?底面圆圆的,上面加盖的哪一种。仔细观察一下,你 会发现比较老式的此类水杯有一个共同特点:底面直径=水杯高度。 图 1 水杯的简化模型 为什么是这样呢?偷偷的告诉你:因为只有满足这个条件,才能在原料耗费 最少的情况下使杯子的容积最大。可不是,在材料一定的情况下,如果水杯的底 面积大,其高度必然就要小;如果高度变大了,底面积又大不了,如何调和这两 者之间的矛盾?其实这恰恰就反应了一个完整的优化过程。 在这里,一个水杯的材料是一定的,所要优化的变量就是杯子底面的半径 r 和杯子的高度 h,在 ANSYS 的优化模块里面把这些需要优化的变量叫做设计变 量(DV);优化的目标是要使整个水杯的容积最大,这个目标在 ANSYS 的优化 过程里叫目标函数(OBJ);再者,对设计变量的优化有一定的限制条件,比如 说整个杯子的材料不变,这些限制条件在 ANSYS 的优化模块中用状态变量(SV) 来控制。闲话少说,下面我们就来看看 ANSYS 中怎么通过设定 DV、SV、OBJ, 利用优化模块求解以上问题。 首先参数化的建立一个分析文件(我假设叫 volu.inp),水杯初始半径为 R= 1,高度为 H=1(DV),由于水杯材料直接喝水杯的表面积有关系,这里我假设 水杯表面积不能大于 100,这样就有 S=2πRH+2πR 2 <100(SV),水杯的容积
为V=πRH(OBJ)。 File: volu. inp R=1 S=2*3.14*R*H+2*3.14*R*R V=100003.14R*R*H) 然后再建一个优化分析文件(我假设叫 optol inp),设定优化变量,并求解 File optvolu inp /input, volu, inp pt opal, volu, inp opvar, R, dv, 1, 10,1e-2 opvar, H, dv, 1, 10,1e-2 opvar, S, Sv,, 100,1e-2 V,obi,le-2 optype, subp opsave, optvolu, opto opexec 最后,哈,打开 Ansys6.1,在命令输入框中键入/ input, optvolu, inp”,整个优 化过程就开始了 SavE De I REsu ce our L PoMRGRPHLECE 图2 ANSYS优化过程图 几秒钟的优化过程结束后,让我们来看一下优化的结果: lopt optlist. all
为 V=πR 2 H (OBJ)。 File:volu.inp R=1 H=1 S=2*3.14*R*H+2*3.14*R*R V=10000/(3.14*R*R*H) 然后再建一个优化分析文件(我假设叫 optvolu.inp),设定优化变量,并求解。 File:optvolu.inp /clear,nostart /input,volu,inp /opt opanl,volu,inp opvar,R,dv,1,10,1e-2 opvar,H,dv,1,10,1e-2 opvar,S,sv,,100,1e-2 opvar,V,obj,,,1e-2 opkeep,on optype,subp opsave,optvolu,opt0 opexec 最后,哈,打开 Ansys6.1,在命令输入框中键入”/input,optvolu,inp”,整个优 化过程就开始了。 图 2 ANSYS 优化过程图 几秒钟的优化过程结束后,让我们来看一下优化的结果: /opt optlist,all
AOPLIST Command FEASIBLE》 FEASI SET 18 1的.日5 2.2978 2.2971 23 E) (FEASIBLE) 138.23 图3优化结果1 上图中左右带*的SET22是最优解,由此可以看出,要想在表面积一定的情 况下使水杯容积最大,的确有这样一个规律H=D=2*R。有兴趣的同志可以用求 极值的方法演算一下,一定会得到相同的答案。(话外语:原来那些无盖的糖瓷 盆有一个规律是H=R,也是为了满足瓷盆容积最大。) ANSYS的优化模块是用来求解工程分析中的优化例子的,但上面一个例子 说明即使这样于工程毫无关系纯数学极值问题,也能够轻松求解。不过在细节处 会有一些技巧,后面再仔细分析。(其实用 ANSYS的优化模块完全能解决数学 上比较负责的极值问题,不过现在有了 Matlab、 Mathematica,大概也没有人愿 意来用 ANSYS献丑了) 12 ANSYS优化设计基础 前面写了一个例子,来说明 ANSYS的基本优化过程。在这一节中,我们结 合这个例子来说明一下优化模块中的一些概念。 121优化模块中的三大变量: 设计变量(DV):即自变量。例子中的 opvar,R,dv,1,10,le-2就是用来定义一个设 计变量R,其上限为10,下限为1,公差为102(公差和优化过程的收敛有关)。 ANSYS优化模块中允许定义不超过60个设计变量 状态变量(sV):用来体现优化的边界条件,是设计变量的函数。例子里面 oprah,S,sv,100le-2就是定义了一个状态变量S,它的上限为100,无下限,公差 为102。从文件 volu inp中可以看到,S=2*3.14+R*H+2*3.14+R*R。可见,定义 这样一个状态变量,即是限制水杯的表面积(可以认为表示材料的多少)不大于 100。在 ANSYS优化模块中用户可以定义不超过100个状态变量
图 3 优化结果 1 上图中左右带*的 SET 22 是最优解,由此可以看出,要想在表面积一定的情 况下使水杯容积最大,的确有这样一个规律 H=D=2*R。有兴趣的同志可以用求 极值的方法演算一下,一定会得到相同的答案。(话外语:原来那些无盖的糖瓷 盆有一个规律是 H=R,也是为了满足瓷盆容积最大。) ANSYS 的优化模块是用来求解工程分析中的优化例子的,但上面一个例子 说明即使这样于工程毫无关系纯数学极值问题,也能够轻松求解。不过在细节处 会有一些技巧,后面再仔细分析。(其实用 ANSYS 的优化模块完全能解决数学 上比较负责的极值问题,不过现在有了 Matlab、Mathematica,大概也没有人愿 意来用 ANSYS 献丑了) 1.2 ANSYS 优化设计基础 前面写了一个例子,来说明 ANSYS 的基本优化过程。在这一节中,我们结 合这个例子来说明一下优化模块中的一些概念。 1.2.1 优化模块中的三大变量: 设计变量(DV):即自变量。例子中的 opvar,R,dv,1,10,1e-2 就是用来定义一个设 计变量 R,其上限为 10,下限为 1,公差为 10-2(公差和优化过程的收敛有关)。 ANSYS 优化模块中允许定义不超过 60 个设计变量。 状态变量(SV):用来体现优化的边界条件,是设计变量的函数。例子里面 opvar,S,sv,,100,1e-2 就是定义了一个状态变量 S,它的上限为 100,无下限,公差 为 10-2。从文件 volu.inp 中可以看到,S=2*3.14*R*H+2*3.14*R*R。可见,定义 这样一个状态变量,即是限制水杯的表面积(可以认为表示材料的多少)不大于 100。在 ANSYS 优化模块中用户可以定义不超过 100 个状态变量
目标函数(OBJ):最终的优化目的。它必须是设计变量的函数,而且只能求其 最小值。看到 volu inp里面目标函数的定义了吧V=100004*R*R+H,为了把 求最大体积转化为求最小值,只好对它求倒数了;如果知道目标函数的上限,还 可以用一个大数减目标函数的方法来转换。例子中 opvar,V,obj,le-2就是定义了 个目标函数V,它的公差是102。 122 ANSYS优化模块中的两种求解模式 ANSYS优化模块的求解有两种运行模式,一种是在GUI方式下运行,即已 经打开 ANSYS的分析界面后进行分析;另一种是 Batch模式,无需打开 ANSYS 分析界面,后台运行求解。 前面例子的运行过程其实就是一个典型的GUI方式体现,它涉及到两个重要 的文件:一个就是类似 volu inp的 ANSYS分析文件,如果是一个工程问题,该 文件中应该有参数定义、参数建模、求解、结果提取、目标函数赋值的一个全过 程(由于优化求解是一个不断跌代的过程, ANSYS分析文件其实是包涵了一个 完整的循环)。另一个文件是类似 optvolu inp的优化控制文件,基本语句就那么 几条,无非是定义三大变量、优化方式、优化控制等几条,用户拿过去稍稍替换 下就可以用在不同的问题上。(注:细心的读者可能会提问,既然 ANsYS分析 文件包涵了一个完整的循环,但是整个优化过程中是要求设计变量不断改变的 每次循环都有一个参数重定义的过程,不会使设计变量恢复初始值吗?这一点勿 用担心,正是由于有了另一个优化控制文件,优化过程只在第一次进行完全的参 数定义工作,在后续循环中,优化控制文件中声明的设计变量定义将被忽略)。 有了这样两个文件,简单的在命令窗口把优化控制文件输入进去(其中的 opal 命令会自动调用指定的 ANSYS分析文件),就可以完成整个优化过程。以上说 明的是完全使用命令流的GUI方式,至于如何在菜单中进行优化过程的定制, 窃以为没有命令流方式快捷,这里就不再赘述了。 另一种方式是后台运行的 Batch方式,它只需要一个输入命令流文件( batch 文件)。该文件可以简单的把GUI方式下 ANSYS分析文件和优化控制文件合并 得到。不过有几个注意点:1、需要把 otani语句去掉,因为在 batch文件中, 不需要提供 ANSYS分析文件名字,系统默认 batch文件中opt语句以前的所有 部分为 ANSYS分析文件内容。2、以前为防止在GUI方式下的重新定义错误而 引入的一些语句,如/cle, nostart需要去除。上述例子经过合并、处理,就可以得 到Bach方式下需要的 batch文件 batch. inp File: batch. inp R=1 S=2*3.14*R*H+2*3.14*R*R V=100003.14*R*R*H pt opvar, R, dv, 1, 10,1e-2
目标函数(OBJ):最终的优化目的。它必须是设计变量的函数,而且只能求其 最小值。看到 volu.inp 里面目标函数的定义了吧 V=10000/(3.14*R*R*H),为了把 求最大体积转化为求最小值,只好对它求倒数了;如果知道目标函数的上限,还 可以用一个大数减目标函数的方法来转换。例子中 opvar,V,obj,,,1e-2 就是定义了 一个目标函数 V,它的公差是 10-2。 1.2.2 ANSYS 优化模块中的两种求解模式 ANSYS 优化模块的求解有两种运行模式,一种是在 GUI 方式下运行,即已 经打开 ANSYS 的分析界面后进行分析;另一种是 Batch 模式,无需打开 ANSYS 分析界面,后台运行求解。 前面例子的运行过程其实就是一个典型的 GUI 方式体现,它涉及到两个重要 的文件:一个就是类似 volu.inp 的 ANSYS 分析文件,如果是一个工程问题,该 文件中应该有参数定义、参数建模、求解、结果提取、目标函数赋值的一个全过 程(由于优化求解是一个不断跌代的过程,ANSYS 分析文件其实是包涵了一个 完整的循环)。另一个文件是类似 optvolu.inp 的优化控制文件,基本语句就那么 几条,无非是定义三大变量、优化方式、优化控制等几条,用户拿过去稍稍替换 下就可以用在不同的问题上。(注:细心的读者可能会提问,既然 ANSYS 分析 文件包涵了一个完整的循环,但是整个优化过程中是要求设计变量不断改变的, 每次循环都有一个参数重定义的过程,不会使设计变量恢复初始值吗?这一点勿 用担心,正是由于有了另一个优化控制文件,优化过程只在第一次进行完全的参 数定义工作,在后续循环中,优化控制文件中声明的设计变量定义将被忽略)。 有了这样两个文件,简单的在命令窗口把优化控制文件输入进去(其中的 opanl 命令会自动调用指定的 ANSYS 分析文件),就可以完成整个优化过程。以上说 明的是完全使用命令流的 GUI 方式,至于如何在菜单中进行优化过程的定制, 窃以为没有命令流方式快捷,这里就不再赘述了。 另一种方式是后台运行的 Batch 方式,它只需要一个输入命令流文件(batch 文件)。该文件可以简单的把 GUI 方式下 ANSYS 分析文件和优化控制文件合并 得到。不过有几个注意点:1、需要把 optanl 语句去掉,因为在 batch 文件中, 不需要提供 ANSYS 分析文件名字,系统默认 batch 文件中/opt 语句以前的所有 部分为 ANSYS 分析文件内容。2、以前为防止在 GUI 方式下的重新定义错误而 引入的一些语句,如/cle,nostart 需要去除。上述例子经过合并、处理,就可以得 到 Batch 方式下需要的 batch 文件 batch.inp File:batch.inp R=1 H=1 S=2*3.14*R*H+2*3.14*R*R V=10000/(3.14*R*R*H) /opt opvar,R,dv,1,10,1e-2
opvar, H, dv, 1, 10,1e-2 S.sv.100.le-2 opvar,V,obJ upkeep, on optype, sub re,optvolu, opto 假定 batch. inp在目录 bvolu下,在cmd命令行方式下,进入 bvolu目录,执行命 ansys61-b-j bvolu-p ane3flds-i batch inp-o output txt 命令中-b参数指定用 batch模式求解 i bvolu参数指定该求解默认工作名字为 bvolu(不指定就默认为file) p ane3flds参数指定使用 ANS Y S/MultiphySICS/LS-DYNA求解器 i batch. inp参数指定输入bach文件为 batch. inp - o output. txt参数指定把输出导向到 output. txt中,便于查看过程纠错 运行结束后,可以从 output. txt文件中看到最有解是多少: 文件 output. txt中的一部分数据 >>>> SOLUTION HAS CONVERGED TO POSSIBLE OPTIMUM <<<<< BASED ON DV TOLERANCES BETWEEN FINAL TWO DESIGNS FINAL VARIABLES ARE SET 22 (FEASIBLE (sV)99997 RHV (V) 2.2851 (DV)46830 (OBJ)130.23 其结果与用GUI方式求解完全一样,生成的 bvoluopt文件中也有最优解的 信息,同时还能看到求解整个参数迭代求解过程 123 ANSYS的优化方法和收敛准则 例子中优化控制文件里面的优化命令,还有 upkeep, on(用来要求保留最优 解的DB), opexec(执行优化),剩下重要的命令就只有 optype了,这个命令指 定 ANSYS优化中使用的优化方法。 优化方法发展到今天可说是形形色色,比较完善了。 ANSYS的优化模块中 只支持两种优化方法,不能不说是一大遗憾。但 ANSYS的这两种优化方法对绝 大多数的工程问题已经足够,更何况 ANSYS还留下了用户话优化接口,方便用 户写出适合于自己问题的优化方法来使用。 看看例子中的命令” optype, subp”,这里指定的是第一种通用的函数逼进优化 方法。改种方法的本质是采用最小二乘逼进,求取一个函数面来拟和解空间,然
opvar,H,dv,1,10,1e-2 opvar,S,sv,,100,1e-2 opvar,V,obj,,,1e-2 opkeep,on optype,subp opsave,optvolu,opt0 opexec 假定 batch.inp 在目录 bvolu 下,在 cmd 命令行方式下,进入 bvolu 目录,执行命 令: ansys61 -b -j bvolu -p ane3flds -i batch.inp –o output.txt 命令中 -b 参数指定用 batch 模式求解; -j bvolu 参数指定该求解默认工作名字为 bvolu (不指定就默认为 file) -p ane3flds 参数指定使用 ANSYS/Multiphysics/LS-DYNA 求解器 -i batch.inp 参数指定输入 batch 文件为 batch.inp -o output.txt 参数指定把输出导向到 output.txt 中,便于查看过程纠错 运行结束后,可以从 output.txt 文件中看到最有解是多少: 文件 output.txt 中的一部分数据: >>>>>> SOLUTION HAS CONVERGED TO POSSIBLE OPTIMUM <<<<<< (BASED ON DV TOLERANCES BETWEEN FINAL TWO DESIGNS) FINAL VARIABLES ARE SET 22 (FEASIBLE) S (SV) 99.997 R (DV) 2.2851 H (DV) 4.6830 V (OBJ) 130.23 其结果与用 GUI 方式求解完全一样,生成的 bvolu.opt 文件中也有最优解的 信息,同时还能看到求解整个参数迭代求解过程。 1.2.3 ANSYS 的优化方法和收敛准则 例子中优化控制文件里面的优化命令,还有 opkeep,on(用来要求保留最优 解的 DB),opexec(执行优化),剩下重要的命令就只有 optype 了,这个命令指 定 ANSYS 优化中使用的优化方法。 优化方法发展到今天可说是形形色色,比较完善了。ANSYS 的优化模块中 只支持两种优化方法,不能不说是一大遗憾。但 ANSYS 的这两种优化方法对绝 大多数的工程问题已经足够,更何况 ANSYS 还留下了用户话优化接口,方便用 户写出适合于自己问题的优化方法来使用。 看看例子中的命令”optype,subp”,这里指定的是第一种通用的函数逼进优化 方法。改种方法的本质是采用最小二乘逼进,求取一个函数面来拟和解空间,然
后再对该函数面求极值。无疑这是一种普适的优化方法,不容易陷入局部极值点, 但优化精度一般不是很高,因此多用来做粗优化的手段 另外一种是针对第一种优化方法缺点的改进方法,叫做梯度寻优。如果说第 种方法是C0阶、大范围普适的粗优化方法;第二种方法就是C1阶、局部寻 优的精优化方法。一般来说,一个比较负责的问题都需要同时采用两种优化方法, 先用函数逼进的第一类方法初步求得最优解基本位置,然后再采用梯度寻优的对 最优解的位置进行更精确的确定。(注:但用第二类梯度寻优进行优化,不仅时 间消耗长,还可能陷入局部最小点,因此通常的问题都建议使用0阶函数逼进优 化subp) 前面讨论了 ANSYS的两种优化方法,但光了解优化进行的方式是不够的。 ANSYS进行优化计算,都是一个不断迭代的过程。有时候,了解优化过程什么 时候结束比了解优化过程本身更加重要。下面我们就来谈谈决定优化过程什么时 候结束的条件:优化准则。 假设F、Ⅺ和F、Ⅺ分别为目标函数、设计变量第j次迭代和第j-l次迭 代的结果(X为矢量),Fb和Xb分别是当前的最优目标函数和其相应的设计变量 值。如果满足F-FA或者F,-F≤r,为目标函数的公差,那么认为迭 代收敛,于是迭代停止。假设x-XA≤或者x-XA≤,那么也认为设计 变量的搜索已经趋于收敛,于是迭代停止。当然,为了防止优化过程在某些问题 中不收敛, ANSYS还提供了循环数量控制。比如说,如果你使用的是0阶函数 逼进优化,你可以用 opsu命令设定最多循环多少次退出,已经当不可行解连 续出现多少次就认为优化过程发散,强行退出等。(注:在0阶函数逼进优化中 默认的最大循环次数为30;默认当连续出现7次不可行解,就认为优化过程发 散) 在上面的描述中,可能只有公差τ和不可行解这两个概念在 ANSYS中的意 义我们不甚了解了。可行解与不可行解的定义将在下一小节中详细定义,这里说 明一下公差τ。从例子里面可以看出,我对设计变量、状态变量、日标函数都给 出了公差限制。从上面一段的的分析可以得知,设计变量、目标函数的公差可以 控制优化过程的收敛性。其实设计变量也一样,如果前后两次设计变量之间的误 差小于设计变量的公差时,优化过程也会自动停止,不过对它的限制主要是来控 制可行性(下一节介绍可行性),三大变量的公差都有一个默认值: 对于设计变量,歇认公差就是001×(上限下限),如果只有上限,默认公差为 001×上限绝对值。(设计变量定义时必须指定上限)。 对于目标函数,由于定义时不指定上下限,默认公差为001×当前目标函数值。 对于状态变量,如果指定了上下限,默认公差为0.01×(上限下限),如果只有 上限或者下限,默认公差为0.01×上限或者下限的绝对值。 上述默认公差的定义都能在 ANSYS的随机帮助中查到,这里为什么如此冗
后再对该函数面求极值。无疑这是一种普适的优化方法,不容易陷入局部极值点, 但优化精度一般不是很高,因此多用来做粗优化的手段。 另外一种是针对第一种优化方法缺点的改进方法,叫做梯度寻优。如果说第 一种方法是 C0 阶、大范围普适的粗优化方法;第二种方法就是 C1 阶、局部寻 优的精优化方法。一般来说,一个比较负责的问题都需要同时采用两种优化方法, 先用函数逼进的第一类方法初步求得最优解基本位置,然后再采用梯度寻优的对 最优解的位置进行更精确的确定。(注:但用第二类梯度寻优进行优化,不仅时 间消耗长,还可能陷入局部最小点,因此通常的问题都建议使用 0 阶函数逼进优 化 subp) 前面讨论了 ANSYS 的两种优化方法,但光了解优化进行的方式是不够的。 ANSYS 进行优化计算,都是一个不断迭代的过程。有时候,了解优化过程什么 时候结束比了解优化过程本身更加重要。下面我们就来谈谈决定优化过程什么时 候结束的条件:优化准则。 假设 Fj、Xj 和 Fj-1、Xj-1 分别为目标函数、设计变量第 j 次迭代和第 j-1 次迭 代的结果(Xj 为矢量),Fb 和 Xb 分别是当前的最优目标函数和其相应的设计变量 值。如果满足 − Fj Fj−1 或者 − Fj Fb , 为目标函数的公差,那么认为迭 代收敛,于是迭代停止。假设 − X j X j−1 或者 − X j Xb ,那么也认为设计 变量的搜索已经趋于收敛,于是迭代停止。当然,为了防止优化过程在某些问题 中不收敛,ANSYS 还提供了循环数量控制。比如说,如果你使用的是 0 阶函数 逼进优化,你可以用 opsubp 命令设定最多循环多少次退出,已经当不可行解连 续出现多少次就认为优化过程发散,强行退出等。(注:在 0 阶函数逼进优化中, 默认的最大循环次数为 30;默认当连续出现 7 次不可行解,就认为优化过程发 散) 在上面的描述中,可能只有公差 和不可行解这两个概念在 ANSYS 中的意 义我们不甚了解了。可行解与不可行解的定义将在下一小节中详细定义,这里说 明一下公差 。从例子里面可以看出,我对设计变量、状态变量、目标函数都给 出了公差限制。从上面一段的的分析可以得知,设计变量、目标函数的公差可以 控制优化过程的收敛性。其实设计变量也一样,如果前后两次设计变量之间的误 差小于设计变量的公差时,优化过程也会自动停止,不过对它的限制主要是来控 制可行性(下一节介绍可行性),三大变量的公差都有一个默认值: 对于设计变量,默认公差就是 0.01×(上限-下限),如果只有上限,默认公差为 0.01×上限绝对值。(设计变量定义时必须指定上限)。 对于目标函数,由于定义时不指定上下限,默认公差为 0.01×当前目标函数值。 对于状态变量,如果指定了上下限,默认公差为 0.01×(上限-下限),如果只有 上限或者下限,默认公差为 0.01×上限或者下限的绝对值。 上述默认公差的定义都能在 ANSYS 的随机帮助中查到,这里为什么如此冗
余的详细介绍它呢?因为大多数情况下你不能得到最优解都是这个东西在作怪。 为什么例子中要每个变量都详细定义公差呢?我们可以把这些公差都去掉,看看 是什么结果 LIST OPTIMIZATION SETS FROM SET 1 TO SET AND SHOW ONLY OPT I ON PARAMETERS. (A M SYMBOI INDI CATE THE BEST LISTED SET) SET 1 SET 2 SET 4 (FEASIBLE (INFEASIBLE> CINFEASIBLE CINFEASIBLE> sU)12.56744.15338.71>454.6 8.6246 4.4919 5.8388 5.114 .2313 6.5613 (oBJ3184.7 8.371g 21.827 14.241 *SET 5 SET 6 (FEASIBLE (FEASIBLE> >>>> SOLUTION HAS CON VERGED TO POSSIBLE OPTIMUM<<<<<< (BASED ON OBJ TOLERANCE BETWEEN BESTAND FINAL DESIGNS 可见是因为F-F≤r导致循环提前结束。(注:细观上图,F=15720, Fb=151.62,默认公差似乎此处应该是1.5720,似乎还没有满足这个收敛准则 为什么 ANSYS却认为满足了,这里就不得而知,可能 ANSYS内部对默认公差 里面的当前值另有解释;如果你强行规定目标函数公差为1,可以看到循环多进 行一步后也会提前结束,不过这时候当前解151.65和最优解15162倒的确相差 小于公差1了)。此时,大家一定可以理解例子中为什么要对公差的限制如此严 谨了(001)。因为程序的取样,迭代都有随机性,只有这样,才能保证程序不 会因为上述公差太大的缘故自动停止而得不到最优解。 有兴趣的同学还可以改变一下其他参数的公差大小,甚至用 opsu命令改 变默认循环的次数等,这些实验将会更加加深你对优化过程、收敛准则的理解 便于提高你都负责优化问题的驾驭能力 124可行解与不可行解 这两个概念比较好理解,所谓可行解就是满足要求的一组结果。既是说设计 变量都在设计变量的上下限内,相应的状态变量也满足状态变量上下限要求。以
余的详细介绍它呢?因为大多数情况下你不能得到最优解都是这个东西在作怪。 为什么例子中要每个变量都详细定义公差呢?我们可以把这些公差都去掉,看看 是什么结果: 图 4 优化结果 2 由此可见,不带任何公差的最优化分析得不到我们所要求的最有解(151.62 显然比带公差后得到的结果 130.23 要大许多),而且优化过程才做了 6 步就停止 了,查看下 ANSYS 的输出窗口,显示: >>>>>> SOLUTION HAS CONVERGED TO POSSIBLE OPTIMUM <<<<<< (BASED ON OBJ TOLERANCE BETWEEN BEST AND FINAL DESIGNS) 可见是因为 − Fj Fb 导致循环提前结束。(注:细观上图,Fj=157.20, Fb=151.62,默认公差似乎此处应该是 1.5720,似乎还没有满足这个收敛准则, 为什么 ANSYS 却认为满足了,这里就不得而知,可能 ANSYS 内部对默认公差 里面的当前值另有解释;如果你强行规定目标函数公差为 1,可以看到循环多进 行一步后也会提前结束,不过这时候当前解 151.65 和最优解 151.62 倒的确相差 小于公差 1 了)。此时,大家一定可以理解例子中为什么要对公差的限制如此严 谨了(0.01)。因为程序的取样,迭代都有随机性,只有这样,才能保证程序不 会因为上述公差太大的缘故自动停止而得不到最优解。 有兴趣的同学还可以改变一下其他参数的公差大小,甚至用 opsubp 命令改 变默认循环的次数等,这些实验将会更加加深你对优化过程、收敛准则的理解, 便于提高你都负责优化问题的驾驭能力。 1.2.4 可行解与不可行解 这两个概念比较好理解,所谓可行解就是满足要求的一组结果。既是说设计 变量都在设计变量的上下限内,相应的状态变量也满足状态变量上下限要求。以
上任何一条不满足都被示为不可行解 图4中SET2、3、4都被示为不可行解,因为他们相应的状态变量都越界了。 有的同学会提问,SET6中状态变量为100.71,不是也越界了吗?这是因为 ANSYS中判断越界也有一个公差,状态变量的默认公差在这个例子中是1,而 00.71和100直接的差的绝对值小于这个公差,因此认为SET6也为可行解。 2. ANSYS优化设计的万能三步曲 这里我描述一下拿到一个工程问题,怎么用一种通用的模式进行最优化分 析。我通常不不使用 Batch模式的优化方法,因为最好还不免需要打开 ANSYS 的GUI界面去提取优化数据库,绘出变量关系曲线等。这一节介绍的万能方法 是基于GUI的命令流方法 由于鄙人想象力有限,这里只要引以前写APDL教程时候的一个例子来说明 优化设计的一般方法。(上次是用APDL做单循环求解最优角度,这里我们用强 大的 ANSYS优化模块来完成它) 问题描述 (b) 图5薄板受压的模型图 如图5(a)所示,一带孔薄板,长4000mm,宽2000mm,顶部中心部分1800mm 处承受42MP的压力,左右两个长圆孔中心分别踞四周1000mm,长圆孔的具体 形式如图5(b)所示,上下分别为半圆,中部用直线衔接。这里假设长圆长轴与水 平方向夹角为α。为了使得孔边缘应力集中最小,这里拟调整a的大小(a∈[0 π/2]),以在固定的H情况下达到长圆孔周围应力集中最小。 21构建优化分析文件 这里用参数 My sita和MyH对整个模型进行参数化建模:( My sita表征角 a,MyH表征高度H,两者的初始值分别为0°和100mm,最后提取出孔边缘 最大应力值 mysmax)
上任何一条不满足都被示为不可行解。 图 4 中 SET 2、3、4 都被示为不可行解,因为他们相应的状态变量都越界了。 有的同学会提问,SET 6 中状态变量为 100.71,不是也越界了吗?这是因为 ANSYS 中判断越界也有一个公差,状态变量的默认公差在这个例子中是 1,而 100.71 和 100 直接的差的绝对值小于这个公差,因此认为 SET 6 也为可行解。 2. ANSYS 优化设计的万能三步曲 这里我描述一下拿到一个工程问题,怎么用一种通用的模式进行最优化分 析。我通常不不使用 Batch 模式的优化方法,因为最好还不免需要打开 ANSYS 的 GUI 界面去提取优化数据库,绘出变量关系曲线等。这一节介绍的万能方法 是基于 GUI 的命令流方法。 由于鄙人想象力有限,这里只要引以前写 APDL 教程时候的一个例子来说明 优化设计的一般方法。(上次是用 APDL 做单循环求解最优角度,这里我们用强 大的 ANSYS 优化模块来完成它) 问题描述: (a) α (b) H r 图 5 薄板受压的模型图 如图5(a)一所示,一带孔薄板,长4000mm,宽2000mm,顶部中心部分1800mm 处承受 42MP 的压力,左右两个长圆孔中心分别踞四周 1000mm,长圆孔的具体 形式如图 5(b)所示,上下分别为半圆,中部用直线衔接。这里假设长圆长轴与水 平方向夹角为α。为了使得孔边缘应力集中最小,这里拟调整α的大小(α∈[0, π/2]),以在固定的 H 情况下达到长圆孔周围应力集中最小。 2.1 构建优化分析文件 这里用参数 My_sita 和 My_H 对整个模型进行参数化建模:(My_sita 表征角 α,My_H 表征高度 H,两者的初始值分别为 0°和 100mm,最后提取出孔边缘 最大应力值 mysmax)
File: circle PI=3.14159 sa=45 sita=My sita/180"PI H=MyH/1000 I Customize the environment keyw, pr st /prep et 1. shell63 r,1,0.12,0.12,0.12,0.12 uimp, 1, ex, dens, nuxy, 2.1e9, 1. 2,0.375 I Modeling k,1,0.0 k,2,20 k,3,2,2 k40,2 k,5,0.9,2 k6,1,1 l,1,2 12.3 1.3.5 al,1,2,3,4,5 I Create hole I Create my coordinate k, 7, 1+H*cos(sita), 1+H*sin(sita) k, 10, 1+H*cos(sita), 1+H*sin(sita), 100 k, 8, 1+r*cos(sita+PI/2), 1+r*sin(sita+PI/2) cskp,110,6,78 csys, Il I Create Hole k,9,H 1,7,9 1,7,6
File:circle.inp PI=3.14159 My_H=150 My_sita=45 sita=My_sita/180*PI r=0.2 H=My_H/1000 !Customize the Environment keyw,pr_struc,1 /prep7 et,1,shell63 r,1,0.12,0.12,0.12,0.12 uimp,1,ex,dens,nuxy,2.1e9,1.2,0.375 !Modeling !Create plate k,1,0,0 k,2,2,0 k,3,2,2 k,4,0,2 k,5,0.9,2 k,6,1,1 l,1,2 l,2,3 l,3,5 l,5,4 l,4,1 al,1,2,3,4,5 !Create hole !Create my coordinate k,7,1+H*cos(sita),1+H*sin(sita) k,10,1+H*cos(sita),1+H*sin(sita),100 k,8,1+r*cos(sita+PI/2),1+r*sin(sita+PI/2) cskp,11,0,6,7,8 csys,11 !Create Hole k,9,H,r l,7,9 l,7,6
arag 6.7 arotat,6,,7,10,-90 ansys,y, 2, 3, 1 add,2,3,4,5,6,7,8,9 asba.1.10 asym, x, 2,,,, 0,0 nummer all...low aadd, 1, 2 lauto plot gpl Meshing the plane smrt.6 amesh all lAdd dOF DK...UY SFL 4 PRES. 42 SFL.ILPRES 42 /solu ost 1 arll-ndingr(0, 14) *dim. sl arl1 get, sl(1), node, 1, S, 1 *vscfun, mysmax, max, sl(1) 22构建优化控制文件 这第二步工作非常简单,随便拿个优化控制文件来,稍微把设计变量、状态 变量、目标函数一修改,就成完成了优化控制文件
adrag,6,,,,,,7 arotat,6,,,,,,7,10,-90 arsys,y,2,3,1 arsym,x,2,5,1 aadd,2,3,4,5,6,7,8,9 asba,1,10 csys,0 arsym,x,2, , , ,0,0 nummer,all, , , ,low aadd,1,2 /auto,1 gplot !Meshing the plane smrt,6 amesh,all !Add DOF DK,2,UX,0, ,,UY DK,14,UX,0,,,UY !Add Pressure SFL,4,PRES,42 SFL,11,PRES,42 /solu solve /post1 ar11=ndinqr(0,14) _s1= *dim,_s1,,ar11 *vget,_s1(1),node,1,s,1 *vscfun,mysmax,max,_s1(1) 2.2 构建优化控制文件 这第二步工作非常简单,随便拿个优化控制文件来,稍微把设计变量、状态 变量、目标函数一修改,就成完成了优化控制文件