这个例子展示了如何检验梁的强度和成本之间的权衡。一些出版物使用这个例子作为各种多目标算法的测试问题,包括Deb等人的[1]和Ray和Liew[2]。
有关此示例的视频概述,请参见多目标优化的Pareto集.
下面的草图改编自Ray和Liew[2]。
这幅草图描绘了焊接在基片上的梁。这条梁支撑着一种负金宝app荷P在远处l从底物。梁被焊接到基材上,上面和下面的焊缝,每个长度l和厚度h.梁的横截面为矩形,宽度为b,和高度t.梁的材料是钢。
这两个目标是梁的制造成本和梁端在施加荷载下的挠度P.负载P固定在6000磅,距离呢l固定在14英寸。
设计变量为:
x (1) =h,焊缝的厚度
x (2) =l,即焊缝的长度
x (3) =t,梁的高度
x (4) =b,横梁的宽度
光束的制造成本与光束中材料的数量成正比, ,加上焊缝中材料的数量, .使用引用文献中的比例常数,第一个目标是
梁的挠度与。成正比P和成反比 .同样,使用引用论文中的比例常数,第二个目标是
,在那里 和 .
这个问题有几个限制条件。
焊缝厚度不能超过横梁宽度。符号中,x(1) <= x(4)。在工具箱的语法:
Aineq = [1, 0, 0, 1];bineq = 0;
剪切应力 焊接压力不能超过13600 psi。要计算剪应力,首先计算初步表达式:
综上所述,焊缝上的剪应力具有约束 < = 13600。
正常的压力 焊接压力不能超过30,000 psi。法向应力是 .
垂直方向的屈曲载荷能力必须超过6000磅的应用载荷。使用杨氏模量的值 psi和 ,则屈曲载荷约束为 .从数值上看,这就是不等式 .
变量的边界是0.125 <=x(1) <= 5, 0.1 <=x(2) <= 10, 0.1 <=x(3) <= 10,和0.125 <=x(4) <= 5。在工具箱的语法:
磅= (0.125,0.1,0.1,0.125);乌兰巴托=[5、10、10、5];
目标函数出现在这个例子的末尾objval (x)
.非线性约束出现在函数的最后nonlcon (x)
.
paretosearch
解决方案你可以用几种方法来优化这个问题:
设置最大挠度,并在满足最大挠度约束的设计中找到一个单目标最小制造成本。
设定最大制造成本,并在满足制造成本约束的设计上找到一个单目标最小偏差。
解决一个多目标问题,可视化两个目标之间的权衡。
采用多目标方法,设置目标函数和非线性约束函数,使问题的信息更加清晰。
有趣= @objval;nlcon = @nonlcon;
使用方法解决问题paretosearch
与“psplotparetof”
图的功能。若要减少诊断显示信息的数量,请设置显示
选项“关闭”
.
opts_ps = optimoptions (“paretosearch”,“显示”,“关闭”,“PlotFcn”,“psplotparetof”);rng默认的%的再现性[x_ps1 fval_ps1, ~, psoutput1] = paretosearch (Aineq有趣,4日,bineq,[],[],磅,乌兰巴托,nlcon, opts_ps);
disp (“总功能数:”+ psoutput1.funccount);
功能总数:1870
为了更平滑的帕累托前端,尝试使用更多的点。
《不扩散核武器条约》= 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
solver在最佳帕累托前只保留了不到一半的解,使用的点数是以前的两倍。金宝搏官方网站
opts_ga = optimoptions (“gamultiobj”,“显示”,“关闭”,“PlotFcn”,“gaplotpareto”,“PopulationSize”, 2 *不扩散核武器条约》);[x_ga1 fval_ga1, ~, gaoutput1] = gamultiobj (Aineq有趣,4日,bineq,[],[],磅,乌兰巴托,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
.但是,得到的Pareto集可能有一些不同的范围。在这种情况下,非线性约束的存在导致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 (Aineq有趣,4日,bineq,[],[],磅,乌兰巴托,nlcon, opts_ga);disp (“总功能数:”+ gaoutputh.funccount);
功能总数:57478
fgah = 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
解决方案通过运行fgoalattain
从paretosearch
点的解决方案。建立一个目标和重量fgoalattain
通过使用相同的设置fgoalattain
中描述的gamultiobj混合函数.
Fmax = max (fval_ps1x0);nobj =元素个数(Fmax);Fmin = min (fval_ps1x0);w = sum((Fmax - fval_ps1x0))。/(1 + Fmax - Fmin),2);p = w.*((Fmax - fval_ps1x0). x0);/(1 + Fmax - Fmin));xnew = 0(大小(x_psx0));nsol =大小(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 ("fgoalattain功能计数:"+ nfv)
fgoalattain功能计数:14049
fnew = 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。funccount nfv + psoutput1x0.funccount)
gamultiobj单独的函数总数是37441。帕累托搜索和fgoalattain加在一起是18888。
绘制的点表示函数空间的最佳值。为了确定哪些参数达到这些功能值,找到梁的尺寸和焊缝的尺寸,以获得特定的成本/挠度点。例如,情节paretosearch
紧随其后的是fgoalattain
显示点的成本约为6,偏转约为3.5e-3。确定达到这些点的梁和焊缝的尺寸。
whichgood =找到(fvalnew (: 1) < = 6 & fvalnew (:, 2) < = 3.5 e - 3);goodpoints =表(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 = 6 e3. /√(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);τ=√tp。^ 2 + tpp。^ 2 + (x(:, 2)。* tp。* tpp)。/ sqrt (0.25 * (x(:, 2)。^2 + (x(:,1) + x(:,3)).^2));Cineq = [tau - 13600,sigma - 3e4,6e3 - P_c];测查= [];结束函数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);回报率目标结束
[1] 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] Ray, T.和K. M. Liew。多目标优化设计的群隐喻.工程科学与技术,2002,vol . 34, no .1 - 153。