比较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,[],[],[],[],[],[],[],选择);
优化终止:平均变化量小于options.FunctionTolerance帕累托的传播解决方案。金宝搏官方网站
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)];女朋友= gg + [18 * x (1); 9 * x (2) ^ 2);城市= 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》)举行从
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))举行从
不像paretosearch
解决方案中,gamultiobj
在极端的解决方案分目标函数空间的范围。然而,paretosearch
解决方案有更多的点更接近真正的解决方案在这两个目标函数空间和决策变量空间。帕累托前面点的数量是不同的每个解算器时使用默认选项。
转移问题
如果你的问题的解决方案有很大的控制变量?检查这种情况下通过改变变量的问题。为一个无约束的问题,gamultiobj
可以失败,而paretosearch
更健壮的这种变化。
为了方便比较,为每个解算器指定在帕累托35分。
转变= (-30);有趣= @ (x) mymulti3 (x + shift);选择。PopulationSize = 100;%选择。ParetoFraction = 35[xgash fvalgash, ~, gashoutput] = gamultiobj(乐趣、据nvar[]、[][],[],[],[],选择);
优化终止:平均变化量小于options.FunctionTolerance帕累托的传播解决方案。金宝搏官方网站
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》)举行从
paretosearch
发现解决方案分均匀几乎整个可能的范围。
添加范围,即使是相当宽松的,帮助这两个gamultiobj
和paretosearch
找到相应的解决方案。金宝搏官方网站下界的-50年
在每个组件,上界50
。
选择。PlotFcn = [];optsp。PlotFcn = [];磅= (-50、-50);乌兰巴托=磅;[xgash fvalgash, ~, gashoutput] = gamultiobj(乐趣、据nvar[]、[][],[],磅,乌兰巴托,选择);
优化终止:平均变化量小于options.FunctionTolerance帕累托的传播解决方案。金宝搏官方网站
[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》)举行从
在这种情况下,解决找到好的解决方案。金宝搏官方网站
开始paretosearch
从gamultiobj
解决方案
获得一个类似的解决方案的范围开始金宝搏官方网站paretosearch
从gamultiobj
解决方案。
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》)举行从
现在,paretosearch
解决方案是相似的gamultiobj
解决方案的解决方案,虽然有些点是不同的。
从简略的解决方案金宝搏官方网站
获得一个好的解决方案的另一种方法是开始单独的点,每个目标函数最小化。
从多目标函数,创建一个简略依次选择每个目标函数。使用前一节的转移函数。因为你是给好的开始点解决,您不需要指定范围。
nobj = 2;%的目标数量x0 =转变;%初始点简略最小化uncmin =细胞(nobj, 1);%细胞数组来保存单目标最小值allfuns = 0 (nobj, 2);%的目标函数值eflag = 0 (nobj, 1);据= optimoptions (“patternsearch”,“显示”,“关闭”);%使用一个适当的解决者为i = 1:英蒂nobj = 0 (nobj, 1);%选择最小化的目标英蒂(i) = 1;funi = @ (x)点(英蒂乐趣(x));我[uncmin {}, ~, eflag (i)) = patternsearch (x0, funi[],[],[],[],[],[],[],录像);%减少客观的我allfuns(我)=乐趣(uncmin{我});结束uncmin = cell2mat (uncmin);%矩阵的开始点
开始paretosearch
简略的最低分,请注意,它有一个全面的解决方案。金宝搏官方网站paretosearch
将随机初始点添加到提供的以人口至少options.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[]、[][],[],[],[],选择);
优化终止:平均变化量小于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》)举行从
既解决者填写的极端点之间的帕累托面前,与合理准确而且恰到好处的解决方案。金宝搏官方网站
视图的最后点决策变量空间。
图;持有在xx = x -转移(1);yy = y -转移(2);轮廓(xx, yy mygg 50)轮廓(xx, yy myff 50)情节(xpinit (: 1), xpinit (:, 2),“波”)情节(xgash2 (: 1) xgash2 (:, 2),的r *)ashift =——转变;情节(ashift (: 1) ashift (:, 2),“- k”)情节(uncmin (: 1) uncmin (:, 2),“gs”,“MarkerSize”12);包含(“x”(1))ylabel (“x”(2))举行从