这个例子展示了如何为一个二维多目标函数生成和绘制帕累托前沿fgoalattain
.
这个例子中的两个目标函数是凸函数的平移和缩放版本
.目标函数的代码出现在simple_mult
的辅助函数这个例子到此结束.
两个目标函数都在区域内减小 并在该地区增长 .在0和1之间, 增加和 减小,因此存在一个权衡区域。为的两个目标函数 从 来 .
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”;“绿线之间的权衡区域”})
求帕累托前沿,首先求两个目标函数的无约束极小值。在这种情况下,你可以在图中看到最小值 是1,最小值是 是6,但一般来说,您可能需要使用优化程序来找到最小值。
一般来说,编写一个函数,返回多目标函数的一个特定组件。(pickindex
的辅助函数这个例子到此结束返回
目标函数值。)然后用优化求解器求出各分量的最小值。您可以使用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];
为了计算帕累托前沿,取权向量 为 从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);回报率目标结束