主要内容

生成和绘制Pareto Front

这个例子展示了如何为一个二维多目标函数生成和绘制帕累托前沿fgoalattain

这个例子中的两个目标函数是凸函数的平移和缩放版本 1 + x 2 .目标函数的代码出现在simple_mult的辅助函数这个例子到此结束

两个目标函数都在区域内减小 x 0 并在该地区增长 x 1 .在0和1之间, f 1 x 增加和 f 2 x 减小,因此存在一个权衡区域。为的两个目标函数 x - 1 / 2 3. / 2

t = linspace (1/2, 3/2);F = simple_mult (t);情节(t、F“线宽”, 2)情节([0,0],[0,8],“g——”);情节([1],[0,8],“g——”);情节([0,1],(1,6),“k”。“MarkerSize”15);文本(-0.25,1.5,“最小f (f (x))”5.5)文本(综合成绩,“最低(₂(x))”)举行传奇(' f (x)的“₂(x)”)包含({“x”“绿线之间的权衡区域”})

图中包含一个坐标轴。轴包含7个对象的类型行,文本。这些对象代表f_1(x) f_2(x)

求帕累托前沿,首先求两个目标函数的无约束极小值。在这种情况下,你可以在图中看到最小值 f 1 x 是1,最小值是 f 2 x 是6,但一般来说,您可能需要使用优化程序来找到最小值。

一般来说,编写一个函数,返回多目标函数的一个特定组件。(pickindex的辅助函数这个例子到此结束返回 k 目标函数值。)然后用优化求解器求出各分量的最小值。您可以使用fminbnd在这种情况下,还是fminunc对于高维问题。

k = 1;[min1, minfn1] = fminbnd (@ (x) pickindex (x, k), 1, 2);k = 2;[min2, minfn2] = fminbnd (@ (x) pickindex (x, k), 1, 2);

为每个目标函数设定无约束最优目标。只有在目标函数互不干扰的情况下,即不存在权衡,您才能同时实现这些目标。

目标= [minfn1, minfn2];

为了计算帕累托前沿,取权向量 一个 1 - - - - - - 一个 一个 从0到1。解决目标实现的问题,为各个值设定权重。

nf = 2;%目标函数个数N = 50;%绘制的点数onen = 1 / N;x = 0 (N + 1);f = 0 (N + 1 nf);有趣= @simple_mult;x0 = 0.5;选择= optimoptions (“fgoalattain”“显示”“关闭”);r = 0:N t = onen*r;% 0到1重量= (t - t);[x (r + 1:), f (r + 1:)] = fgoalattain(有趣,x0,目标,重量,...[],[],[],[],[],[],[], 选项);结束图绘制(f (: 1), f (:, 2),“柯”);包含(“f”) ylabel (“₂”

图中包含一个坐标轴。轴包含一个线型对象。

你可以看到两个目标函数之间的权衡。

辅助函数

下面的代码创建simple_multi函数。

函数F(:,1) =√(1+x.^2);F(:,2) = 4 + 2*根号1+(x-1) ^2;结束

下面的代码创建pickindex函数。

函数Z = pickindex(x,k) Z = simple_mult(x);同时评估两个目标z = z (k);回报率目标结束

另请参阅

相关的话题