主要内容

比较帕累托研究伽默多布吉

此示例演示如何使用这两种方法在Pareto front上创建一组点帕累托研究伽默多布吉.目标函数有两个目标和一个二维控制变量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)。*x(:,2)-(x(:,1)。*x(:,2)。^3;

基本示例和情节

使用以下方法查找目标函数的Pareto集帕累托研究伽默多布吉.设定使用矢量化选择符合事实的为了增加速度。包括一个绘图函数以可视化Pareto集。

rng违约nvars=2;opts=options(@gamultiobj,“使用矢量化”符合事实的“PlotFcn”,“帕累托”);[xga,fvalga,~,gaoutput]=gamultiobj(@(x)mymulti3(x),nvars,[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、opts);
优化终止:帕累托解扩散的平均变化小于options.FunctionTolerance。万博 尤文图斯

图遗传算法包含一个轴。标题为Pareto front的轴包含一个line类型的对象。

optsp=options(“paretosearch”,“使用矢量化”符合事实的“PlotFcn”,{“psplotparetof”“psplotparetox”}); [xp,fvalp,~,psoutput]=paretosearch(@(x)mymulti3(x),nvars,[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、optsp);
找到满足约束条件的Pareto集。优化已完成,因为Pareto集合体积的相对变化小于“options.ParetoSetChangeTolerance”,并且约束在“options.ConstraintTolerance”内得到满足。

Figure paretosearch包含2个轴。标题为Pareto Front的轴1包含line类型的对象。标题为参数空间的轴2包含line类型的对象。

使用mymulti4这个mymulti4单击按钮编辑或尝试此示例时,MATLAB®会话中的函数可用。

类型mymulti4
函数mout=mymulti4(x)%gg=[4*x(1)^3+x(2)-2*x(1)*(x(2)^2)-18*x(1);x(1)+4*x(2)^3-2*(x(1)^2)*(2)];gf=gg+[18*x(1);9*x(2)^2];mout=gf(1)*(2)-gf(2)*(1);

这个mymulti4函数评估两个目标函数的梯度x(2)使用一元函数零点定位渐变完全平行的点,即输出的位置移动= 0.

a=[fzero(@(t)mymulti4([t,-3.15]),[2,3]),-3.15];对于jj=linspace(-3.125,-1.89,50)a=[a;[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”,“真的”)xlabel(“目标1”)伊拉贝尔(“目标2”)持有

图形包含一个轴。轴包含3个line类型的对象。这些对象表示Paretosearch、Gamultiobj和True。

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

[x,y]=网格网格(1.9:.01:3.1,-3.2:.01:-1.8);mydata=mymulti3([x(:),y(:)]);多年筹资框架=sqrt(多年筹资数据(:,1)+39);%更好地分隔轮廓mygg=sqrt(mydata(:,2)+28);%更好地分隔轮廓多年筹资框架=重塑(多年筹资框架,尺寸(x));多年筹资框架=重塑(多年筹资框架,尺寸(x));数字;保持不变在…上等高线(x,y,mygg,50)等高线(x,y,myff,50)图(xp(:,1),xp(:,2),“波”)图(xga(:,1),xga(:,2),“r*”)图(a(:,1),a(:,2),“-k”)xlabel("x(1)")伊拉贝尔("x(2)")持有

图形包含一个轴。该轴包含5个轮廓、直线类型的对象。

不像帕累托研究解决方案伽默多布吉在目标函数空间中,解的点位于范围的最末端帕累托研究在目标函数空间和决策变量空间中,解有更多更接近真实解的点。使用默认选项时,每个解算器的帕累托前沿上的点数不同。

移位问题

如果问题的解决方案的控制变量较大,会发生什么情况?通过移动问题变量来检查此情况。对于无约束问题,伽默多布吉可能会失败,而帕累托研究对这种转变更为稳健。

为便于比较,请为每个解算器在Pareto front上指定35个点。

shift=[20,-30];fun=@(x)mymulti3(x+shift);opts.PopulationSize=100;%opts.ParetoFraction=35[xgash,fvalgash,~,gashoutput]=gamultiobj(乐趣,nvars,[],[],[],[],[],[],[],[]选项);
优化终止:帕累托解扩散的平均变化小于options.FunctionTolerance。万博 尤文图斯

图遗传算法包含一个轴。标题为Pareto front的轴包含一个line类型的对象。

伽默多布吉未能找到有用的帕累托集。

optsp.PlotFcn=[];optsp.ParetoSetSize=35;[xpsh,fvalpsh,~,pshoutput]=paretosearch(fun,nvars,[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、optsp);
找到满足约束条件的Pareto集。优化已完成,因为Pareto集合体积的相对变化小于“options.ParetoSetChangeTolerance”,并且约束在“options.ConstraintTolerance”内得到满足。
图表(fvalpsh(:,1),fvalpsh(:,2),“波”); 持有在…上绘图(fs(:,1),fs(:,2),“k.”)传奇(“Paretosearch”,“真的”)xlabel(“目标1”)伊拉贝尔(“目标2”)持有

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

帕累托研究查找几乎在整个可能范围内均匀分布的解决方案点。

增加边界,即使是相当宽松的边界,也有助于两者伽默多布吉帕累托研究要找到合适的解决方案,请设置万博 尤文图斯-50在每个组件中,以及50.

opts.PlotFcn=[];optsp.PlotFcn=[];lb=[-50,-50];ub=-lb;[xgash,fvalgash,~,gashoutput]=gamultiobj(fun,nvars,[],[],[],[],lb,ub,opts);
优化终止:帕累托解扩散的平均变化小于options.FunctionTolerance。万博 尤文图斯
[xpsh2,fvalpsh2,~,pshoutput2]=paretosearch(乐趣,nvars,[],[],[],[],lb,ub,[],optsp);
找到满足约束条件的Pareto集。优化已完成,因为Pareto集合体积的相对变化小于“options.ParetoSetChangeTolerance”,并且约束在“options.ConstraintTolerance”内得到满足。
曲线图(fvalpsh2(:,1),fvalpsh2(:,2),“波”); 持有在…上地块(fvalgash(:,1),fvalgash(:,2),“r*”); 绘图(fs(:,1),fs(:,2),“k.”)传奇(“Paretosearch”,“Gamultiobj”,“真的”)xlabel(“目标1”)伊拉贝尔(“目标2”)持有

图形包含一个轴。轴包含3个line类型的对象。这些对象表示Paretosearch、Gamultiobj和True。

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

开始帕累托研究从…起伽默多布吉解决方案

从解算器获得类似范围的解万博 尤文图斯帕累托研究伽默多布吉解决方案

optsp.InitialPoints=xgash;[xpsh3,fvalpsh3,~,pshoutput3]=paretosearch(fun,nvars,[],[],[],[],[],[],lb,ub,[],optsp);
找到满足约束条件的Pareto集。优化已完成,因为Pareto集合体积的相对变化小于“options.ParetoSetChangeTolerance”,并且约束在“options.ConstraintTolerance”内得到满足。
曲线图(fvalpsh3(:,1),fvalpsh3(:,2),“波”); 持有在…上地块(fvalgash(:,1),fvalgash(:,2),“r*”); 绘图(fs(:,1),fs(:,2),“k.”)传奇(“Paretosearch”,“Gamultiobj”,“真的”)xlabel(“目标1”)伊拉贝尔(“目标2”)持有

图形包含一个轴。轴包含3个line类型的对象。这些对象表示Paretosearch、Gamultiobj和True。

现在帕累托研究解决方案类似于伽默多布吉解决方案,尽管某些解决方案点不同。

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

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

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

nobj=2;%目标数目x0=移位;%单目标极小化的初始点uncmin=单元(nobj,1);%保持单目标极小值的单元阵列allfuns=0(nobj,2);%保持目标函数值不变eflag=0(nobj,1);fopts=最佳选项(“模式搜索”,“显示”,“关”);%在此处使用适当的解算器对于i=1:nobj indi=0(nobj,1);%选择要最小化的目标indi(i)=1;funi=@(x)点(fun(x),indi);[uncmin{i},~,eflag(i)]=patternsearch(funi,x0,[],[],[],[],[],[],[],[],[],[],[],[],fopts);%最小化目标iallfuns(i,:)=fun(uncmin{i});终止uncmin=cell2mat(uncmin);%起点矩阵

开始帕累托研究从单目标最小点开始,注意它的解决方案有一个完整的范围。万博 尤文图斯帕累托研究将随机初始点添加到提供的点,以使总体至少为options.ParetoSetSize个人。同样,伽默多布吉将随机点添加到提供的点,以获得至少(options.PopulationSize)*(options.ParetoFraction)个人。

optsp=最佳选项(optsp,“初始点”,uncmin);[xpinit,fvalpinit,~,outputpinit]=paretosearch(fun,nvars,[],[],[],[],[],[],[],[],[],[],optsp);
找到满足约束条件的Pareto集。优化已完成,因为Pareto集合体积的相对变化小于“options.ParetoSetChangeTolerance”,并且约束在“options.ConstraintTolerance”内得到满足。

现在使用伽默多布吉从初始点开始。

opts=最佳选项(opts,“初始填充矩阵”,uncmin);[xgash2,fvalgash2,~,gasshoutput2]=gamultiobj(fun,nvars,[],[],[],[],[],[],[],[],opts);
优化终止:帕累托解扩散的平均变化小于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”,“真的”,“起点”)xlabel(“目标1”)伊拉贝尔(“目标2”)持有

图中包含一个轴。轴包含4个line类型的对象。这些对象表示Paretosearch、Gamultiobj、True和起点。

两个解算器都使用合理精确且间距合理的解填充极值点之间的帕累托前沿。万博 尤文图斯

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

保持在…上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*”)ashift=a-shift;绘图(ashift(:,1),ashift(:,2),“-k”)绘图(uncmin(:,1),uncmin(:,2),“gs”,“MarkerSize”,12);xlabel("x(1)")伊拉贝尔("x(2)")持有

图形包含一个轴。该轴包含6个轮廓、直线类型的对象。

另见

|

相关话题