主要内容

比较paretosearch而且gamultiobj

这个例子展示了如何使用这两者在帕累托前面创建一组点paretosearch而且gamultiobj.目标函数有两个目标和一个二维控制变量x.目标函数mymulti3在您的MATLAB®会话中可用,当您单击按钮编辑或尝试此示例时。或者,复制mymulti3为会话编写代码。为了计算速度,函数是向量化的。

类型mymulti3
函数f = mymulti3(x) % f(:,1) = x(:,1)。^4 + x(:,2)。^4 + x(:,1)。*x(:,2) - (x(:,1).^2).*(x(:,2).^2) - 9*x(:,1).^2; f(:,2) = x(:,2).^4 + x(:,1).^4 + x(:,1).*x(:,2) - (x(:,1).^2).*(x(:,2).^2) + 3*x(:,2).^3;

基本示例与图

求目标函数的帕累托集paretosearch而且gamultiobj.设置UseVectorized选项真正的为了提高速度。包括一个图形函数来可视化帕累托集。

rng默认的Nvars = 2;Opts = optimoptions(@gamultiobj,“UseVectorized”,真的,“PlotFcn”“gaplotpareto”);[xga fvalga, ~, gaoutput] = gamultiobj (@ (x) mymulti3 (x)据nvar ,[],[],[],[],[],[],[], 选择);
优化终止:Pareto解扩散的平均变化小于options.FunctionTolerance。万博 尤文图斯

{

Optsp = optimoptions(“paretosearch”“UseVectorized”,真的,“PlotFcn”, {“psplotparetof”“psplotparetox”});[xp, fvalp, ~, psoutput] = paretosearch (@ (x) mymulti3 (x)据nvar ,[],[],[],[],[],[],[], optsp);
帕累托集合满足约束条件。优化完成,因为帕累托集体积的相对变化小于“选项”。' paretosetchangettolerance '和'options.ConstraintTolerance'内的约束被满足。

{

计算在帕累托前面的精确点mymulti4.的mymulti4函数在您的MATLAB会话中可用,当您单击按钮编辑或尝试此示例时。

类型mymulti4
功能城市= mymulti4 (x) % gg = (4 * x (1) ^ 3 + x x (1) (2) 2 * * (x (2) ^ 2) - 18 * x (1);(1) + 4 * x (2) ^ 3 - 2 * (x (1) ^ 2) * x (2)];Gf = gg + [18*x(1);9*x(2)^2];Mout = gf(1)*gg(2) - gf(2)*gg(1);

mymulti4函数计算两个目标函数的梯度。接下来,对于的值范围x (2),使用fzero找到梯度完全平行的点,也就是输出的点城市= 0。

A = [fzero(@(t)mymulti4([t,-3.15]),[2,3]),-3.15];jj = linspace(-3.125, -1.89, 50) =(一个;[fzero (@ (t) mymulti4 ([t, jj]),[2、3]),jj]];结束图绘制(fvalp (: 1), fvalp (:, 2),“波”);持有Fs = mymulti3(a);情节(fvalga (: 1) fvalga (:, 2),的r *);情节(fs (: 1), fs (:, 2),“k”。)传说(“Paretosearch”“Gamultiobj”“真正的”)包含(“目标1”) ylabel (《目标2》)举行

图中包含一个轴对象。axis对象包含3个line类型的对象。这些对象表示Paretosearch, Gamultiobj, True。

gamultiobj在目标函数空间中寻找分布稍宽的点。在决策变量空间中绘万博 尤文图斯制解,以及理论最优帕累托曲线和两个目标函数的等高线图。

[x,y] = meshgrid(1.9:.01:3.1,-3.2:.01:-1.8);Mydata = mymulti3([x(:),y(:)]);Myff =√(mydata(:,1) + 39);%的空间轮廓更好Mygg =√(mydata(:,2) + 28);%的空间轮廓更好Myff =重塑(Myff,大小(x));Mygg =重塑(Mygg,大小(x));图;持有轮廓(x, y, mygg 50)轮廓(x, y, myff, 50)情节(xp (: 1), xp (:, 2),“波”)情节(xga (: 1) xga (:, 2),的r *)图((:1)、(:,2),“- k”)包含(“x”(1)) ylabel (“x”(2))举行

图中包含一个轴对象。坐标轴对象包含等高线、直线等5个对象。

不像paretosearch解决方案中,gamultiobj解在目标函数空间的极值端点上有点。然而,paretosearch在目标函数空间和决策变量空间中,解都有更多更接近真解的点。当您使用默认选项时,每个求解器的帕累托前面的点数是不同的。

转移问题

如果问题的解决方案有很大的控制变量,会发生什么?通过移动问题变量来检查这种情况。对于一个无约束的问题,gamultiobj可能会失败,而paretosearch对这种转变更加稳健。

为了便于比较,为每个求解器指定帕累托前面的35个点。

Shift = [20,-30];Fun = @(x)mymulti3(x+shift);选择。PopulationSize = 100;%选择。ParetoFraction = 35[xgash fvalgash, ~, gashoutput] = gamultiobj(有趣,据nvar ,[],[],[],[],[],[], 选择);
优化终止:Pareto解扩散的平均变化小于options.FunctionTolerance。万博 尤文图斯

{

gamultiobj没有找到一个有用的帕累托集。

optsp。PlotFcn = [];optsp。ParetoSetSize = 35;[xpsh fvalpsh, ~, pshoutput] = paretosearch(有趣,据nvar ,[],[],[],[],[],[],[], optsp);
帕累托集合满足约束条件。优化完成,因为帕累托集体积的相对变化小于“选项”。' paretosetchangettolerance '和'options.ConstraintTolerance'内的约束被满足。
图绘制(fvalpsh (: 1), fvalpsh (:, 2),“波”);持有情节(fs (: 1), fs (:, 2),“k”。)传说(“Paretosearch”“真正的”)包含(“目标1”) ylabel (《目标2》)举行

图中包含一个轴对象。axis对象包含2个line类型的对象。这些对象表示Paretosearch, True。

paretosearch找到解点均匀分布在几乎整个可能的范围。

增加边界,即使是相当宽松的边界,对两者都有帮助gamultiobj而且paretosearch找到合适的解决方案。万博 尤文图斯设置的下界-50年的上界50

选择。PlotFcn = [];optsp。PlotFcn = [];Lb = [-50,-50];Ub = -lb;[xgash fvalgash, ~, gashoutput] = gamultiobj(有趣,据nvar ,[],[],[],[], 磅,乌兰巴托,选择);
优化终止:Pareto解扩散的平均变化小于options.FunctionTolerance。万博 尤文图斯
[xpsh2 fvalpsh2, ~, pshoutput2] = paretosearch(有趣,据nvar ,[],[],[],[], 磅,乌兰巴托,[],optsp);
帕累托集合满足约束条件。优化完成,因为帕累托集体积的相对变化小于“选项”。' paretosetchangettolerance '和'options.ConstraintTolerance'内的约束被满足。
图绘制(fvalpsh2 (: 1), fvalpsh2 (:, 2),“波”);持有情节(fvalgash (: 1) fvalgash (:, 2),的r *);情节(fs (: 1), fs (:, 2),“k”。)传说(“Paretosearch”“Gamultiobj”“真正的”)包含(“目标1”) ylabel (《目标2》)举行

图中包含一个轴对象。axis对象包含3个line类型的对象。这些对象表示Paretosearch, Gamultiobj, True。

在这种情况下,两个求解器都能找到很好的解。万博 尤文图斯

开始paretosearchgamultiobj解决方案

从求解器中得到一个相似范围的解万博 尤文图斯paretosearchgamultiobj解决方案。

optsp。InitialPoints = xgash;[xpsh3 fvalpsh3, ~, pshoutput3] = paretosearch(有趣,据nvar ,[],[],[],[], 磅,乌兰巴托,[],optsp);
帕累托集合满足约束条件。优化完成,因为帕累托集体积的相对变化小于“选项”。' paretosetchangettolerance '和'options.ConstraintTolerance'内的约束被满足。
图绘制(fvalpsh3 (: 1), fvalpsh3 (:, 2),“波”);持有情节(fvalgash (: 1) fvalgash (:, 2),的r *);情节(fs (: 1), fs (:, 2),“k”。)传说(“Paretosearch”“Gamultiobj”“真正的”)包含(“目标1”) ylabel (《目标2》)举行

图中包含一个轴对象。axis对象包含3个line类型的对象。这些对象表示Paretosearch, Gamultiobj, True。

现在,paretosearch解类似于gamultiobj解决方案,尽管有些解决方案点不同。

从单一目标解决方案开始万博 尤文图斯

另一种获得好的解的方法是从分别最小化每个目标函数的点开始。

从多目标函数中,创建依次选择每个目标的单目标函数。使用前一节中的移位函数。因为您为解算器提供了良好的起始点,所以不需要指定边界。

Nobj = 2;目标数量%X0 = -shift;%单目标最小化的初始点Uncmin = cell(nobj,1);保持单目标最小值的单元格数组allfun = 0 (nobj,2);保持目标函数值Eflag = 0 (nobj,1);Fopts = optimoptions(“patternsearch”“显示”“关闭”);此处使用适当的求解器I = 1:nobj indi = 0 (nobj,1);选择最小化目标Indi (i) = 1;Funi = @(x)dot(fun(x),indi);我[uncmin {}, ~, eflag (i)) = patternsearch (funi, x0 ,[],[],[],[],[],[],[], 据);最小化目标iallfun (i,:) = fun(unmin {i});结束Uncmin = cell2mat(Uncmin);%起始点矩阵

开始paretosearch从单目标最小值点出发,注意它的解有一个完整的范围。万博 尤文图斯paretosearch将随机初始点添加到所提供的初始点,以使总体至少为选项。ParetoSetSize个人。同样的,gamultiobj将随机点添加到所提供的点,以获得至少为的总体(options.PopulationSize) * (options.ParetoFraction)个人。

Optsp = optimoptions(Optsp,“InitialPoints”, uncmin);[xpinit fvalpinit, ~, outputpinit] = paretosearch(有趣,据nvar ,[],[],[],[],[],[],[], optsp);
帕累托集合满足约束条件。优化完成,因为帕累托集体积的相对变化小于“选项”。' paretosetchangettolerance '和'options.ConstraintTolerance'内的约束被满足。

现在用它来解决问题gamultiobj从最初的点开始。

Opts = optimoptions(Opts,“InitialPopulationMatrix”, uncmin);[xgash2 fvalgash2, ~, gashoutput2] = gamultiobj(有趣,据nvar ,[],[],[],[],[],[], 选择);
优化终止:Pareto解扩散的平均变化小于options.FunctionTolerance。万博 尤文图斯
图绘制(fvalpinit (: 1), fvalpinit (:, 2),“波”);持有情节(fvalgash2 (: 1) fvalgash2 (:, 2),的r *);情节(fs (: 1), fs (:, 2),“k”。)情节(allfuns (: 1) allfuns (:, 2),“gs”“MarkerSize”12)传说(“Paretosearch”“Gamultiobj”“真正的”“开始点”)包含(“目标1”) ylabel (《目标2》)举行

图中包含一个轴对象。axis对象包含4个line类型的对象。这些对象表示Paretosearch, Gamultiobj, True, Start Points。

这两种求解器都填充在极值点之间的帕累托前沿,具有相当精确和间隔良好的解。万博 尤文图斯

在决策变量空间中查看最后的点。

图;持有Xx = x - shift(1);Yy = y - shift(2);轮廓线(xx,yy,mygg,50)轮廓线(xx,yy,myff,50) plot(xpinit(:,1),xpinit(:,2),“波”)情节(xgash2 (: 1) xgash2 (:, 2),的r *) shift = a - shift;情节(ashift (: 1) ashift (:, 2),“- k”)情节(uncmin (: 1) uncmin (:, 2),“gs”“MarkerSize”12);包含(“x”(1)) ylabel (“x”(2))举行

图中包含一个轴对象。坐标轴对象包含等高线、直线等6个对象。

另请参阅

|

相关的话题