有关多目标优化设计完整过程icefox163邮箱:51perfect@163.com由于做项目,我在仿真论坛上搜索过N次,只是查到说多目标要用加权和方法。但是没有具体步骤,经过一些时间郁闷,看了几天的help,终于搞出来了。我的经验如下,不一定正确(我个人感觉是正确的),我用的是9.0版。我只是把我发现在问题,解决问题的过程说出来,可能语句不太通顺。1.我们用optistruct时只能有一个objective.如下图:我只用过min,其他三个我没有用过。特别是后两个,谁用过说一下。2.我们可以设置多个response,可以把很多response用dconstraint约束,但是只能有一个objective。有时我们需要同时满足某几个response的最小值或是最大值。但是deconstraint只能设置response的上限或是下,不能设置为min或是max。(听说可以将上限和下限设置成相近的值可以使约束近似定为某一确定的值)。3.多目标其实在help里有说明,如下。DRESP2–DesignResponseviaequationsfordesignoptimizationDescriptionWhenadesiredresponseisnotdirectlyavailablefromOptiStruct,itmaybecalculatedusingDRESP2.Thisresponsecanbeafunctionalcombinationofanysetofresponsesthataretheresultofadesignanalysisiteration.Theseresponsescanbeusedasadesignobjectiveorasdesignconstraints.TheDRESP2cardidentifiestheequationtousefortheresponserelationshipandtheinputvaluestoevaluatetheresponsefunction.我看过一些论文,现在还没有什么新的理论可以实现多目标(可能我没有发现),现在对多目标的处理情况是response用函数关联起来,将不同的response设置为函数的变量,把多目标处理成为一个单目标。方程形式如下:f=w1*response1+w2*response2W1,w2为权值。Optistruct中就是如此处理的,首先在dequation中设置方程,如下图:我对设置方程还有些地方没有弄明白,我只是举个简单的例子。(希望哪位高人能把编辑方程的详细过程,及要注意的地方,单独发个帖子,特别是复杂的方程的编写过程。)4.写方程。我以单工况情况下最小化compliance和最大化一阶固有频率为例子,(这个最简单,多工况的情况,和这个差不多).写方程时,我们不能简单的将方程写成f=w1*response1+w2*response2形式,因为w1*response1的值和w2*response2值可能会相差太大,并且两者的值很可能不是同时变大或是同时变小。所以我们要对两个response作一定的数学处理。(至于为什么要这样,大家可以想明白)。数学处理的方法很简单,我主要是通过看这篇论文想到的:汽车车架结构多目标拓扑优化方法研究范文杰,范子杰,苏瑞意(强烈推荐)MultiobjectiveoptimaltopologydesignofstructuresT.-Y.Chen,S.-C.WuUni®edtopologydesignofstaticandvibratingstructuresusingmultiobjectiveoptimizationSeungjaeMin,ShinjiNishiwaki,NoboruKikuchi1min2222max2maxmin1maxmin()()min(){[](1)[]}mkkkkkkCCF(1)至于为什么这样处理,都至少是本科生了,这个我想不需要说明(数学处理的方法肯定不只这一种,这个比较简单,也好理解,谁要是有其他的处理方法,大家讨论一下)这里只讨论一个工况情况下,k=1,kw=1,方程1里面的参数自己看论文去。1()C是我们设置的参数,为柔度,max1C怎么得到:以原模型做分析,原模型的柔度应该是最小的,因为我们要减小模型的柔度,提高刚度。它的值可以在out文件中取得。min1C怎么得到:将增加了设计区域的模型进行拓扑优化,objective设为compliance最小,经过优化可以得到最小的compliance值,out文件中可以取得。()为我们设置的变量,一阶固有频率。max怎么得到:将增加了设计区域的模型进行拓扑优化,objective设为frequency最大,out文件中可以得到优化后最大值。min怎么得到:将原模型进行分析,得出的值为最小值,因为我们要得到比这个大的值。W为权值,0至1之间,我们可以设置不同的权值,得出不同的结果,然后作出比较。写方程:我是用这在help里面有,大家自己看。x1-10123-x2f(x1,x2)=rss(0.3*(),0.7*())100-10123-60注意左边必需有变量的列表,我当时就搞了好久才试出来。我对编写方程不熟,看了好久也没有完全搞懂,很希望有位高手出来说说。5.将方程中的变量和要优化的response联系起来。(1)首先要定义要用到的response,本例中是compliance最小,和frequency最大。(2)然后定义一个类型为function的response。(3)在dequation中选已经定义的方程。其他有关noregiond之类的设置我不懂,大家讨论。(4)点击edit.这里面是关键了,我只会用response和response_by_loadstep,其他是什么意思我也不懂,(很想知道),我只是碰巧试出来的。Response有两种,这两种只能存在一个(也不知道为什么),选择一个后,另一个没有了。选第三个是没有loadstep的,第四个是有loadstep的,这就要看定义objective时是否要loadstep,比如我们在objective中定义frequency最大时,要选loadstep,在objective中定义compliance最小是也要选loadstep。这要看设置的response了,这里例子中选的是第四个。打勾后如下图:方框中的数字2是设置的response个数,有几个写几个。然后在黄色的按键中点相应的response和loadstep。注意,response的选择必需方程中它所对应的变量相对应,比如:x1代表最小化compliance,那么第一个response必需选compliance最小。顺序要对应。。。6.在objective中定义,和平常的做法一样。结束语:这是我自己摸索出来的方法,有很多地方不清楚,我只是把我发现问题,解决问题的过程完整写出来,可能不太通顺。我也不保证完全正确,希望大家能完善一下。想解决的问题:1.比较复杂的方程编写,例子中我只写了一行方程,不知道多行怎么写。不知道多个方程之间的变量是如何调用的,我试着写个多行的方程,但是在定义function类型的response时,只有第一行的那个方程可以用,其他行方程没有显示。2.下图中的其他几个变量用法我不懂,想搞清楚,第一个是不是将不同的design_variables联系起来?第二个是什么意思?第五个nodes是不是将不同的设计区域联系起来?第六个我不知道是什么意思?我发这个只是起抛砖引玉的作用,大家有什么不同的看法,希望一起讨论一下。