主要内容

生成和绘制帕累托前面

这个例子展示了如何生成和绘制一个2-D多目标函数的帕累托前沿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”“绿线之间的权衡区”})

图中包含一个轴对象。axis对象包含7个类型为line, text的对象。这些对象表示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,1);f = 0 (N+1,nf);Fun = @simple_mult;X0 = 0.5;选项= optimoptions(“fgoalattain”“显示”“关闭”);r = 0:N t = onen*r;% 0到1权重= [t,1-t];[x (r + 1:), f (r + 1:)] = fgoalattain(有趣,x0,目标,重量,[],[],[],[],[],[],[], 选项);结束图绘制(f (: 1), f (:, 2),“柯”);包含(“f”) ylabel (“₂”)

图中包含一个轴对象。axis对象包含一个line类型的对象。

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

辅助函数

下面的代码创建simple_multi函数。

函数F = simple_mult(x) 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);%回报目标k结束

另请参阅

相关的话题