主要内容

比较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默认的据nvar = 2;选择= optimoptions (@gamultiobj,“UseVectorized”,真的,“PlotFcn”“gaplotpareto”);[xga fvalga, ~, gaoutput] = gamultiobj (@ (x) mymulti3 (x)据nvar ,[],[],[],[],[],[],[], 选择);
优化终止:帕累托解扩散的平均变化小于期权。

{

optsp = optimoptions (“paretosearch”“UseVectorized”,真的,“PlotFcn”, {“psplotparetof”“psplotparetox”});[xp, fvalp, ~, psoutput] = paretosearch (@ (x) mymulti3 (x)据nvar ,[],[],[],[],[],[],[], optsp);
发现满足约束条件的帕累托集。优化完成,因为帕累托集体积的相对变化小于'选项。ParetoSetChangeTolerance'和约束被满足在'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(一个);情节(fvalga (: 1) fvalga (:, 2),的r *);情节(fs (: 1), fs (:, 2),“k”。)传说(“Paretosearch”“Gamultiobj”“真正的”)包含(“目标1”) ylabel (《目标2》)举行

图中包含一个axes对象。坐标轴对象包含3个line类型的对象。这些对象表示Paretosearch、Gamultiobj、True。

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

(x, y) = meshgrid(1.9: .01:3.1, -3.2:幅:-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))举行

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

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

转移问题

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

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

转变= (-30);有趣= @ (x) mymulti3 (x + shift);选择。PopulationSize = 100;%选择。ParetoFraction = 35[xgash fvalgash, ~, gashoutput] = gamultiobj(有趣,据nvar ,[],[],[],[],[],[], 选择);
优化终止:帕累托解扩散的平均变化小于期权。

{

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

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

图中包含一个axes对象。坐标轴对象包含两个line类型的对象。这些对象表示Paretosearch、True。

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

添加边界,即使是相当宽松的边界,对两者都有帮助gamultiobj而且paretosearch寻找合适的解决方案。设置下界-50年的上界50

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

图中包含一个axes对象。坐标轴对象包含3个line类型的对象。这些对象表示Paretosearch、Gamultiobj、True。

在这种情况下,两个解都能找到好的解。

开始paretosearchgamultiobj解决方案

通过启动,从求解器中获得相似的解范围paretosearchgamultiobj解决方案。

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

图中包含一个axes对象。坐标轴对象包含3个line类型的对象。这些对象表示Paretosearch、Gamultiobj、True。

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

从单一目标解决方案开始

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

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

nobj = 2;%目标数量x0 =转变;%单目标最小化的初始点uncmin =细胞(nobj, 1);单元格数组保持单目标最小值allfuns = 0 (nobj, 2);保持目标函数值eflag = 0 (nobj, 1);据= optimoptions (“patternsearch”“显示”“关闭”);在这里使用适当的求解器I = 1:nobj indi = 0 (nobj,1);选择要最小化的目标英蒂(i) = 1;funi = @ (x)点(英蒂乐趣(x));我[uncmin {}, ~, eflag (i)) = patternsearch (funi, x0 ,[],[],[],[],[],[],[], 据);最小化目标iallfuns(我)=乐趣(uncmin{我});结束uncmin = cell2mat (uncmin);%起始点矩阵

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

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

现在用它来解决问题gamultiobj从起始点开始。

选择= optimoptions(选择,“InitialPopulationMatrix”, uncmin);[xgash2 fvalgash2, ~, gashoutput2] = gamultiobj(有趣,据nvar ,[],[],[],[],[],[], 选择);
优化终止:帕累托解扩散的平均变化小于期权。
图绘制(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》)举行

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

这两种求解方法都是在极值点之间填充帕累托前沿,具有相当精确且间距良好的解。

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

图;持有Xx = x - shift(1);Yy = y - shift(2);轮廓(xx, yy mygg 50)轮廓(xx, yy myff 50)情节(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))举行

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

另请参阅

|

相关的话题

Baidu
map