paretosearch
和伽默多布吉
此示例演示如何使用这两种方法在Pareto front上创建一组点paretosearch
和伽默多布吉
.目标函数有两个目标和一个二维控制变量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
和伽默多布吉
.设置UseVectorized
选项符合事实的
为了增加速度。包括一个绘图函数以可视化Pareto集。
rng默认的nvars=2;opts=options(@gamultiobj,“UseVectorized”,真的,“PlotFcn”,“帕累托”);[xga fvalga, ~, gaoutput] = gamultiobj (@ (x) mymulti3 (x)据nvar ,[],[],[],[],[],[],[], 选择);
优化终止:帕累托解决方案的平均变化小于可选方案。金宝搏官方网站
optsp = optimoptions (“paretosearch”,“UseVectorized”,真的,“PlotFcn”,{“psplotparetof”“psplotparetox”}); [xp,fvalp,~,psoutput]=paretosearch(@(x)mymulti3(x),nvars,[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、optsp);
找到满足约束条件的Pareto集。优化已完成,因为Pareto集合体积的相对变化小于“options.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(a);绘图(fvalga(:,1),fvalga(:,2),“r*”); 绘图(fs(:,1),fs(:,2),“k.”)传说(“Paretosearch”,“Gamultiobj”,“真正的”)包含(“目标1”)伊拉贝尔(《目标2》)持有关
伽默多布吉
查找目标函数空间中分布稍宽的点。绘制决策变量空间中的解,以及两个目标函数的理论最优帕累托曲线和等高线图。金宝搏官方网站
(x, y) = meshgrid(1.9: .01:3.1, -3.2:幅:-1.8);mydata = mymulti3 ([x (:), y (:)));Myff =√(mydata(:,1) + 39);%空间的轮廓更好Mygg = sqrt(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)")伊拉贝尔("x(2)")持有关
不像paretosearch
解决方案中,伽默多布吉
解在目标函数空间的极值处有点。然而,paretosearch
在目标函数空间和决策变量空间中,解有更多更接近真实解的点。使用默认选项时,每个解算器的帕累托前沿上的点数不同。
如果你的问题的解决方案有很大的控制变量,会发生什么?通过转移问题变量来检查这种情况。对于无约束问题,伽默多布吉
可能会失败,而paretosearch
对这种转变更有活力。
为便于比较,请为每个解算器在Pareto front上指定35个点。
shift=[20,-30];fun=@(x)mymulti3(x+shift);opts.PopulationSize=100;%选择。ParetoFraction = 35[xgash fvalgash, ~, gashoutput] = gamultiobj(有趣,据nvar ,[],[],[],[],[],[], 选择);
优化终止:帕累托解决方案的平均变化小于可选方案。金宝搏官方网站
伽默多布吉
找不到一个有用的帕累托集合。
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”,“真正的”)包含(“目标1”)伊拉贝尔(《目标2》)持有关
paretosearch
找到几乎在整个可能范围内均匀分布的解点。
增加界限,即使是相当松散的界限,对两者都有帮助伽默多布吉
和paretosearch
找到合适的解决方案。金宝搏官方网站设定的下界-50
和的上界50
.
opts.PlotFcn=[];optsp.PlotFcn=[];lb=[-50,-50];ub=-lb;[xgash,fvalgash,~,gashoutput]=gamultiobj(fun,nvars,[],[],[],[],lb,ub,opts);
优化终止:帕累托解决方案的平均变化小于可选方案。金宝搏官方网站
[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”,“真正的”)包含(“目标1”)伊拉贝尔(《目标2》)持有关
在这种情况下,两个求解器都找到了好的解决方案。金宝搏官方网站
paretosearch
从…起伽默多布吉
解决方案通过开始,从求解器中获得一个相似的解范围金宝搏官方网站paretosearch
从伽默多布吉
解决方案
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”,“真正的”)包含(“目标1”)伊拉贝尔(《目标2》)持有关
现在,paretosearch
解类似于伽默多布吉
解决方案,尽管有些解决方案点不同。
另一种获得好的解的方法是分别从最小化每个目标函数的点开始。
在多目标函数中,创建一个单目标函数,该函数依次选择每个目标。使用前一节中的移位函数。因为你给了求解器很好的起点,所以你不需要指定界限。
nobj = 2;%目标数目x0 =转变;%单目标最小化的初始点uncmin=单元(nobj,1);单元格数组保持单目标最小值allfuns=0(nobj,2);%保持目标函数值eflag=0(nobj,1);fopts=最佳选项(“patternsearch”,“显示”,“关”);%在这里使用一个合适的求解器为i=1:nobj indi=0(nobj,1);选择最小化的目标indi(i)=1;funi=@(x)点(fun(x),indi);[uncmin{i},~,eflag(i)]=patternsearch(funi,x0,[],[],[],[],[],[],[],[],[],[],[],[],fopts);%最小化目标iallfuns(我)=乐趣(uncmin{我});结束uncmin = cell2mat (uncmin);%起点矩阵
开始paretosearch
从单目标最小点开始,注意它的解决方案有一个完整的范围。金宝搏官方网站paretosearch
将随机初始点添加到提供的点,以使总体至少为选项。ParetoSetSize
个人。同样的,伽默多布吉
将随机点添加到提供的点,以获得至少(options.PopulationSize) * (options.ParetoFraction)
个人。
optsp=最佳选项(optsp,“InitialPoints”,uncmin);[xpinit,fvalpinit,~,outputpinit]=paretosearch(fun,nvars,[],[],[],[],[],[],[],[],[],[],optsp);
找到满足约束条件的Pareto集。优化已完成,因为Pareto集合体积的相对变化小于“options.ParetoSetChangeTolerance”,并且约束在“options.ConstraintTolerance”内得到满足。
现在解决使用问题伽默多布吉
从初始点开始。
选择= 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”)伊拉贝尔(《目标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*”) asshift = a - shift;情节(ashift (: 1) ashift (:, 2),“- k”)绘图(uncmin(:,1),uncmin(:,2),“gs”,“MarkerSize”,12);xlabel("x(1)")伊拉贝尔("x(2)")持有关