主要内容

焊接梁的优化设计

这个例子展示了如何在梁的强度和成本之间进行权衡。一些出版物使用这个例子作为各种多目标算法的测试问题,包括Deb等人[1]和Ray和Liew[2]。

有关此示例的视频概述,请参见多目标优化的帕累托集

问题描述

下面的小品改编自Ray和Liew[2]。

这张草图代表了焊接在基板上的光束。这梁能承受荷载金宝appP在远处l从底物。横梁焊接在基材上,上下焊缝各有长度l和厚度h.梁有一个矩形的横截面,宽度b,和高度t.梁的材料是钢。

这两个目标是梁的制造成本和梁端在外加载荷下的挠度P.负载P是6000磅,距离是多少l固定在14英寸。

设计变量为:

  • x (1) =h,焊缝的厚度

  • x (2) =l,焊缝的长度

  • x (3) =t,即梁的高度

  • x (4) =b,即光束的宽度

梁的制造成本与梁中材料的数量成正比, l + l t b ,加上焊缝中的材料量, l h 2 .使用引用论文的比例常数,第一个目标是

F 1 x 1 1 0 4 7 1 x 1 2 x 2 + 0 0 4 8 1 1 x 3. x 4 1 4 + x 2

梁的挠度与P和成反比 b t 3. .同样,使用引用论文的比例常数,第二个目标是

F 2 x P x 4 x 3. 3. C ,在那里 C 4 1 4 3. 3. 0 × 1 0 6 3. 6 5 8 7 × 1 0 - 4 而且 P 6 000

这个问题有几个限制条件。

  • 焊缝厚度不能超过梁宽。用符号表示,x(1) <= x(4)。在工具箱语法中:

Aineq = [1,0,0,-1];Bineq = 0;
  • 剪应力 τ x 在焊接上不能超过13,600 psi。计算剪应力,首先计算初步表达式:

τ 1 1 2 x 1 x 2

R x 2 2 + x 1 + x 3. 2

τ 2 l + x 2 / 2 R 2 x 1 x 3. x 2 2 / 3. + x 1 + x 3. 2

τ x P τ 1 2 + τ 2 2 + 2 τ 1 τ 2 x 2 R

综上所述,焊缝上的剪切应力具有一定的约束条件 τ x < = 13600。

  • 法向应力 σ x 在焊缝上不能超过30,000 psi。法向应力是 P 6 l x 4 x 3. 2 3. 0 × 1 0 3.

  • 垂直方向的屈曲载荷能力必须超过6000磅的施加载荷。利用杨氏模量 E 3. 0 × 1 0 6 psi和 G 1 2 × 1 0 6 ,屈曲载荷约束是 4 0 1 3. E x 3. x 4 3. 6 l 2 1 - x 3. 2 l E 4 G 6 0 0 0 .在数值上,这变成了不等式 6 4 7 4 6 0 2 2 1 - 0 0 2 8 2 3. 4 6 x 3. x 3. x 4 3. 6 0 0 0

  • 变量的边界为0.125 <=x(1) <= 5, 0.1 <=x(2) <= 10, 0.1 <=x(3) <= 10, 0.125 <=x(4) <= 5。在工具箱语法中:

Lb = [0.125,0.1,0.1,0.125];Ub = [5,10,10,5];

目标函数出现在本例函数的末尾objval (x).非线性约束出现在函数示例的最后nonlcon (x)

多目标问题的制定和paretosearch解决方案

你可以通过以下几种方式优化这个问题:

  • 设定最大挠度,并在满足最大挠度约束的设计上找到单目标最小制造成本。

  • 设定最大制造成本,并在满足制造成本约束的设计上找到一个单目标最小偏差。

  • 解决一个多目标问题,可视化两个目标之间的权衡。

为了使用多目标方法,可以提供更多关于问题的信息,设置目标函数和非线性约束函数。

Fun = @objval;Nlcon = @非lcon;

解决问题的方法paretosearch“psplotparetof”图的功能。若要减少诊断显示信息的数量,请设置显示选项“关闭”

Opts_ps = optimoptions(“paretosearch”“显示”“关闭”“PlotFcn”“psplotparetof”);rng默认的%用于再现性[x_ps1,fval_ps1,~,psoutput1] = paretosearch(fun,4,Aineq,bineq,[],[],lb,ub,nlcon,opts_ps);

disp (“总函数数:”+ psoutput1.funccount);
总功能数:1870

为了更平滑的帕累托前面,尝试使用更多的点。

NPTS = 160;%默认为60opts_ps。ParetoSetSize = npts; [x_ps2,fval_ps2,~,psoutput2] = paretosearch(fun,4,Aineq,bineq,[],[],lb,ub,nlcon,opts_ps);

disp (“总函数数:”+ psoutput2.funccount);
总功能计数:6254

这个解看起来是一个更平滑的曲线,但是它的目标2的范围更小。当使用160个帕累托点而不是60个时,求解器需要3倍多的函数计算。

gamultiobj解决方案

要查看求解器是否有不同,请尝试gamultiobj解决这个问题。设置与前一个解决方案中相同的选项。因为gamultiobj求解器在最佳帕累托前面保留不到一半的解,使用比以前多两倍的点。金宝搏官方网站

Opts_ga = optimoptions(“gamultiobj”“显示”“关闭”“PlotFcn”“gaplotpareto”“PopulationSize”, 2 *不扩散核武器条约》);[x_ga1,fval_ga1,~,gaoutput1] = gamultiobj(fun,4,Aineq,bineq,[],[],lb,ub,nlcon,opts_ga);

disp (“总函数数:”+ gaoutput1.funccount);
总功能数:38401

gamultiobj需要成千上万的函数求值,而paretosearch只需要几千。

比较方案金宝搏官方网站

gamultiobj解决办法似乎不同paretosearch解,虽然很难告诉,因为绘制的尺度不同。用相同的比例尺,把两个解画金宝搏官方网站在同一张图上。

Fps2 = sortrows(fval_ps2,1,“提升”);图保存情节(fps2 (: 1) fps2 (:, 2),的r -) fga = sortrows(fval_ga1,1,“提升”);情节(fga (: 1), fga (:, 2),“b——”) xlim([0,40]) ylim([0,1e-2])“paretosearch”“gamultiobj”)包含“成本”ylabel“偏差”持有

gamultiobj解在图的最右边的部分较好,而paretosearch解在最左边更好。paretosearch使用更少的函数求值来获得它的解。

通常,当问题没有非线性约束时,paretosearch至少和gamultiobj.然而,得到的帕累托集可能有一些不同的范围。在这种情况下,非线性约束的存在会导致paretosearch解决方案是不准确的部分范围。

的主要优点之一paretosearch它通常需要更少的函数求值。

从单一目标解决方案开始金宝搏官方网站

为了帮助求解者找到更好的解,可以从最小化单个目标函数的解的点开始金宝搏官方网站求解。的pickindex函数返回单个目标objval函数。使用fmincon找到单目标最优。然后将这些解作为多目标搜索的初金宝搏官方网站始点。

X0 = 0 (2,4);X0f = (lb + ub)/2;Opts_fmc = optimoptions(“fmincon”“显示”“关闭”“MaxFunctionEvaluations”1 e4);x0 (1) = fmincon (@ (x) pickindex (x, 1), x0f, Aineq, bineq,[],[],磅,乌兰巴托,@nonlcon, opts_fmc);x0 (2) = fmincon (@ (x) pickindex (x, 2), x0f, Aineq, bineq,[],[],磅,乌兰巴托,@nonlcon, opts_fmc);

检查单目标最优。

: objval (x0 (1))
ans =1×22.3810 - 0.0158
: objval (x0 (2))
ans =1×276.7188 - 0.0004

最低成本为2.381,偏差为0.158。最小挠度为0.0004,代价为76.7253。绘制的曲线在其范围的末端相当陡峭,这意味着如果你的成本略高于其最小值,你会得到更小的挠度,或者如果你的挠度略高于其最小值,你会得到更小的挠度。

开始paretosearch从单目标解决方案。金宝搏官方网站因为稍后您将在同一图形上绘制解,所以删除金宝搏官方网站paretosearch图的功能。

opts_ps。InitialPoints = x0;opts_ps。PlotFcn = []; [x_psx0,fval_ps1x0,~,psoutput1x0] = paretosearch(fun,4,Aineq,bineq,[],[],lb,ub,nlcon,opts_ps); disp(“总函数数:”+ psoutput1x0.funccount);
总功能计数:4839

开始遗传算法从相同的初始点出发,并去掉其图函数。

opts_ga。InitialPopulationMatrix = x0;opts_ga。PlotFcn = []; [~,fval_ga,~,gaoutput] = gamultiobj(fun,4,Aineq,bineq,[],[],lb,ub,nlcon,opts_ga); disp(“总函数数:”+ gaoutput.funccount);
总功能计数:37441

把解画在相同的坐标金宝搏官方网站轴上。

FPS = sortrows(fval_ps1x0,1,“提升”);图保存情节(fps (: 1), fps (:, 2),的r -) fga = sortrows(fval_ga,1,“提升”);情节(fga (: 1), fga (:, 2),“b——”) xlim([0,40]) ylim([0,1e-2])“paretosearch”“gamultiobj”)包含“成本”ylabel“偏差”持有

通过从单一目标解决方案开始,我们金宝搏官方网站gamultiobj解决办法比paretosearch在标绘范围内的解。然而,gamultiobj需要几乎十倍的函数计算才能得到它的解。

混合函数

gamultiobj可以调用混合函数吗fgoalattain自动地尝试得到一个更精确的解。看看混合函数是否改善了解决方案。

opts_ga。HybridFcn =“fgoalattain”;[xgah,fval_gah,~,gaoutputh] = gamultiobj(fun,4,Aineq,bineq,[],[],lb,ub,nlcon,opts_ga);disp (“总函数数:”+ gaoutputh.funccount);
总功能计数:57478
fah = sortrows(fval_gah,1,“提升”);图保存情节(fps (: 1), fps (:, 2),的r -)情节(fga (: 1) fga (:, 2),“b——”)情节(fgah (: 1) fgah (:, 2),“g -”) xlim([0,40]) ylim([0,1e-2])“paretosearch”“gamultiobj”“gamultiobj / fgoalattain”)包含“成本”ylabel“偏差”持有

的混合函数略有改进gamultiobj解,主要在图的最左边。

运行fgoalattain手动的paretosearch解决方案分

虽然paretosearch没有内置的混合功能,可以改进吗paretosearch跑步解决方案fgoalattainparetosearch点的解决方案。为它设定一个目标和权重fgoalattain通过使用相同的设置fgoalattain如在gamultiobj Hybrid函数

Fmax = max(fval_ps1x0);nobj =数字(Fmax);Fmin = min(fval_ps1x0);w = sum((Fmax - fval_ps1x0)。/(1 + Fmax - Fmin),2);p = w.*((Fmax - fval_ps1x0)。/(1 + Fmax - Fmin));Xnew = 0 (size(x_psx0));Nsol = size(xnew,1);Fvalnew = 0 (nsol,nobj);Opts_fg = optimoptions(“fgoalattain”“显示”“关闭”);NFV = 0;2 = 1: nsol xnew (ii):), fvalnew (ii):), ~, ~,输出]= fgoalattain(有趣,x_psx0 (ii):), fval_ps1x0 (ii):), p (ii):)...Aineq bineq,[][],磅,乌兰巴托,nlcon, opts_fg);nfv = nfv + output.funcCount;结束disp (函数计数:+ nfv)
函数数:14049
fvalnew = sortrows(fvalnew,1,“提升”);图保存情节(fps (: 1), fps (:, 2),的r -)情节(fga (: 1) fga (:, 2),“b——”)情节(fgah (: 1) fgah (:, 2),“g -”)情节(fnew (: 1) fnew (:, 2),“k -”) xlim([0,40]) ylim([0,1e-2])“paretosearch”“gamultiobj”“gamultiobj / fgoalattain”“paretosearch / fgoalattain”)包含“成本”ylabel“偏差”

结合paretosearch而且fgoalattain创造最精确的帕累托前沿。放大看看。

Xlim ([3.64 13.69]) ylim([0.00121 0.00442])持有

即使有额外的fgoalattain计算时,组合函数的总函数计数小于组合函数计数的一半gamultiobj独自解决方案。

流(“gamultiobj的总函数计数是%d.\n”+...“paretosearch和fgoalattain一起用的是%d。\n”...gaoutput。nfv + psoutput1x0.funccount)
仅gamultiobj的总函数计数为37441。对于paretosearch和fgoalattain,是18888。

从图中找到好的参数

图中的点表示函数空间中的最佳值。为了确定哪些参数实现了这些函数值,请找到梁的尺寸和焊缝的尺寸,以便获得特定的成本/偏转点。例如,的情节paretosearch紧随其后的是fgoalattain显示代价约为6,偏转约为3.5e-3的点。确定实现这些点的梁和焊缝的尺寸。

whichgood =找到(fvalnew (: 1) < = 6 & fvalnew (:, 2) < = 3.5 e - 3);Goodpoints = table(xnew(whichgood,:)),fvalnew(whichgood,:),“VariableNames”,{“参数”“目标”})
goodpoints =4×2表参数的目标  ________________________________________ ___________________ 0.63457 - 1.5187 10 0.67262 5.6974 0.0032637 0.61635 1.5708 0.63165 5.391 0.0034753 0.63228 1.5251 10 0.6674 5.6584 0.0032892 0.65077 1.4751 0.70999 5.976 0.0030919

四组参数可实现成本小于6和偏转小于3.5e-3:

  • 焊缝厚度略大于0.6

  • 焊缝长度约1.5

  • 梁高10(上界)

  • 波束宽度在0.63和0.71之间

客观约束和非线性约束

函数[Cineq,测查]= nonlconσ(x) = 5.04 e5。/ (x(:, 3)。^2 .* x(:,4));P_c = 64746.022 * (1 - 0.028236 * x(:, 3))。* x(:, 3)。* x(:, 4)。^ 3;Tp = 6e3./√(2)./(x(:,1).*x(:,2));tpp = 6 e3. /√(2). * (14 + 0.5 * x(:, 2))。* sqrt (0.25 * (x(:, 2)。^ 2 + (x (: 1) + x (:, 3)) ^ 2)) / (x(: 1)。* x(:, 2)。* (x(:, 2)。^2 / 12 + 0.25*(x(:,1) + x(:,3)).^2));Tau =根号rt(tp。^2 + tpp。^2 + (x(:,2).*tp.*tpp)./根号(0.25*(x(:,2).)^2 + (x(:,1) + x(:,3)).^2)));Cineq = [tau - 13600,sigma - 3e4,6e3 - P_c];Ceq = [];结束函数F = objval f1 (x) = 1.10471 * x(: 1)。^ 2。* x(:, 2) + 0.04811 *(:, 3)。* x(:, 4)。* (14.0 + x (:, 2));F2 = 2.1952./(x(:,3)。^3 .* x(:,4));F = [f1,f2];结束函数Z = pickindex(x,k) Z = objval(x);%同时评估两个目标Z = Z (k);%回报目标k结束

参考文献

Deb, Kalyanmoy, J. Sundar, Udaya Bhaskara Rao N和Shamik Chaudhuri。基于进化算法的参考点多目标优化.计算智能研究,Vol. 2, No. 3, 2006, pp. 273-286。可以在https://www.softcomputing.net/ijcir/vol2-issu3-paper4.pdf

[2]雷、T.和刘锦明。多目标设计优化的群隐喻.土木工程学报(自然科学版),2002,29(4):344 - 344。

相关的话题