这个例子展示了如何为三个目标绘制帕累托阵线。每个目标函数是到特定三维点的距离的平方。为提高计算速度,将每个目标函数以点积的形式向量化。为了得到稠密的解集,在帕累托前面使用200个点。
该示例首先展示了如何使用内置的“psplotparetof”
图的功能。然后求解同样的问题,得到使用的地块gamultiobj
,这需要稍微不同的选项设置。这个例子展示了如何获得帕累托图中特定点的解变量。然后,该示例演示了如何直接绘制这些点,而不使用绘图函数,并演示了如何绘制插值曲面而不是帕累托点。
@(x)[点(x - [1,2,3],x - [1,2,3],2),...点(x - [-1,3,-2],x - [-1,3,-2],2),...点(x - [0,-1,1],x - [0,-1,1],2)];选择= optimoptions (“paretosearch”,“UseVectorized”,真的,“ParetoSetSize”, 200,...“PlotFcn”,“psplotparetof”);磅= 5 *的(1、3);乌兰巴托=磅;rng默认的%的再现性[x, f] = paretosearch(有趣,3 ,[],[],[],[], 磅,乌兰巴托,[]选项);
帕累托集合满足约束条件。优化完成是因为帕累托集合体积的相对变化小于“选项”。paretosetchangettolerance '和约束满足于'options. constraintolerance '。
选择= optimoptions (“gamultiobj”,“PlotFcn”,“gaplotpareto”,“PopulationSize”, 200);[xg, fg] = gamultiobj(有趣,3 ,[],[],[],[], 磅,乌兰巴托,[],选择);
优化终止:帕累托解决方案的平均变化小于可选方案。金宝搏官方网站
这张图显示的点比paretosearch
情节。用更大的人口来解决这个问题。
选择。PopulationSize = 400;[xg, fg] = gamultiobj(有趣,3 ,[],[],[],[], 磅,乌兰巴托,[],选择);
优化终止:帕累托解决方案的平均变化小于可选方案。金宝搏官方网站
改变观察角度以更好地匹配psplotpareto
情节。
视图(-40年,57)
使用数据提示工具在图中选择一个点。
图中点的指数为92。显示点xg (92:)
它包含与图中点相关的解变量。
: disp (xg (92))
-0.2889 0.0939 0.4980
此时对目标函数进行评估,以查看它是否与显示的值匹配。
disp(乐趣(xg(92年,:)))
11.5544 15.1912 1.5321
在帕累托前面绘制点scatter3
.
图次要情节(2 2 1)scatter3 (f (: 1), f (:, 2), f (:, 3),“k”。);次要情节(2,2,2)scatter3 (f (: 1), f (:, 2), f (:, 3),“k”。);视图(-148 8)次要情节(2,2,3)scatter3 (f (: 1), f (:, 2), f (:, 3),“k”。);视图(-180 8)次要情节(2,2,4)scatter3 (f (: 1), f (:, 2), f (:, 3),“k”。);视图(-300 8)
通过交互式地旋转情节,你可以更好地了解它的结构。
要将帕累托前端看作一个表面,创建一个分散的插值。
图F = scatteredInterpolant (F (: 1), F (:, 2), F (:, 3),“线性”,“没有”);
要绘制生成的曲面,在x-y空间中创建一个从最小到最大的网格。然后绘制插值曲面。
sgr = linspace (min (f (: 1)), max (f (: 1)));ygr = linspace (min (f (:, 2)), max (f (:, 2)));[XX, YY] = meshgrid (sgr, ygr);ZZ = F (XX, YY);
将帕累托点和曲面绘制在一起。
图次要情节(2 2 1)冲浪(YY, XX ZZ,“线型”,“没有”)举行在scatter3 (f (: 1) f (:, 2), f (:, 3),“k”。);持有从次要情节(2,2,2)冲浪(YY, XX ZZ,“线型”,“没有”)举行在scatter3 (f (: 1) f (:, 2), f (:, 3),“k”。);持有从视图(-148 8)次要情节(2,2,3)冲浪(YY, XX ZZ,“线型”,“没有”)举行在scatter3 (f (: 1) f (:, 2), f (:, 3),“k”。);持有从视图(-180 8)次要情节(2,2,4)冲浪(YY, XX ZZ,“线型”,“没有”)举行在scatter3 (f (: 1) f (:, 2), f (:, 3),“k”。);持有从视图(-300 8)
通过交互式地旋转情节,你可以更好地了解它的结构。
你可以得到帕累托集合上的点的图“psplotparetox”
图的功能。
选项。PlotFcn =“psplotparetox”;[x, f] = paretosearch(有趣,3 ,[],[],[],[], 磅,乌兰巴托,[]选项);
帕累托集合满足约束条件。优化完成是因为帕累托集合体积的相对变化小于“选项”。paretosetchangettolerance '和约束满足于'options. constraintolerance '。
或者,创建帕累托集合中x值的散点图。
图次要情节(2 2 1)scatter3 (x (: 1), (:, 2), x (:, 3),“k”。);次要情节(2,2,2)scatter3 (x (: 1), (:, 2), x (:, 3),“k”。);视图(-148 8)次要情节(2,2,3)scatter3 (x (: 1), (:, 2), x (:, 3),“k”。);视图(-180 8)次要情节(2,2,4)scatter3 (x (: 1), (:, 2), x (:, 3),“k”。);视图(-300 8)
这个布景表面不清晰。通过交互式地旋转情节,你可以更好地了解它的结构。
您可以使用平行坐标绘制帕累托集合。你可以用平行坐标绘制任意维数的图。在绘图中,每条彩色线代表一个帕累托点,每个坐标变量绘图到相关的垂直线。使用。绘制目标函数值parellelplot
.
图p =平行图(f);p.CoordinateTickLabels = [“其中Obj1”;“methoda”;“Obj3”];
为最小的十分之一的帕累托点着色methoda
.
minObj2 = min (f (:, 2));maxObj2 = max (f (:, 2));grpRng = minObj2 + 0.1*(maxObj2-minObj2);grpData = f(:,2) <= grpRng;p.GroupData = grpData;p.LegendVisible =“关闭”;