帕累托研究
和伽默多布吉
此示例演示如何使用这两种方法在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。万博 尤文图斯
optsp=options(“paretosearch”,“使用矢量化”符合事实的“PlotFcn”,{“psplotparetof”“psplotparetox”}); [xp,fvalp,~,psoutput]=paretosearch(@(x)mymulti3(x),nvars,[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、optsp);
找到满足约束条件的Pareto集。优化已完成,因为Pareto集合体积的相对变化小于“options.ParetoSetChangeTolerance”,并且约束在“options.ConstraintTolerance”内得到满足。
使用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”)持有关
伽默多布吉
查找目标函数空间中分布稍宽的点。绘制决策变量空间中的解,以及两个目标函数的理论最优帕累托曲线和等高线图。万博 尤文图斯
[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)")持有关
不像帕累托研究
解决方案伽默多布吉
在目标函数空间中,解的点位于范围的最末端帕累托研究
在目标函数空间和决策变量空间中,解有更多更接近真实解的点。使用默认选项时,每个解算器的帕累托前沿上的点数不同。
如果问题的解决方案的控制变量较大,会发生什么情况?通过移动问题变量来检查此情况。对于无约束问题,伽默多布吉
可能会失败,而帕累托研究
对这种转变更为稳健。
为便于比较,请为每个解算器在Pareto front上指定35个点。
shift=[20,-30];fun=@(x)mymulti3(x+shift);opts.PopulationSize=100;%opts.ParetoFraction=35[xgash,fvalgash,~,gashoutput]=gamultiobj(乐趣,nvars,[],[],[],[],[],[],[],[]选项);
优化终止:帕累托解扩散的平均变化小于options.FunctionTolerance。万博 尤文图斯
伽默多布吉
未能找到有用的帕累托集。
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”)持有关
帕累托研究
查找几乎在整个可能范围内均匀分布的解决方案点。
增加边界,即使是相当宽松的边界,也有助于两者伽默多布吉
和帕累托研究
要找到合适的解决方案,请设置万博 尤文图斯-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”)持有关
在这种情况下,两个解算器都能找到好的解决方案。万博 尤文图斯
帕累托研究
从…起伽默多布吉
解决方案从解算器获得类似范围的解万博 尤文图斯帕累托研究
从伽默多布吉
解决方案
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”)持有关
现在帕累托研究
解决方案类似于伽默多布吉
解决方案,尽管某些解决方案点不同。
另一种获得好解的方法是从分别最小化每个目标函数的点开始。
从多目标函数中,创建一个单目标函数,依次选择每个目标。使用上一节中的移位函数。由于为解算器提供了良好的起点,因此无需指定边界。
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”)持有关
两个解算器都使用合理精确且间距合理的解填充极值点之间的帕累托前沿。万博 尤文图斯
查看决策变量空间中的最终点。
保持在…上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)")持有关