主要内容

生成和情节帕累托

这个例子展示了如何生成和情节的帕累托面前使用二维多目标函数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”;“绿线之间的权衡地区”})

图包含一个坐标轴对象。坐标轴对象包含x绿线之间的权衡地区包含7线类型的对象,文本。一个或多个行显示的值只使用这些对象标记代表f (x)₂(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 (“₂”)

图包含一个坐标轴对象。坐标轴对象包含f indexOf 1基线f, f ylabel indexOf 2基线₂包含一行对象显示它的值只使用标记。

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

辅助函数

下面的代码创建simple_multi函数。

函数f = simple_mult f (x) (:, 1 =√(1 + x ^ 2);f (: 2) = 4 + 2 * sqrt (1 + (x - 1) ^ 2);结束

下面的代码创建pickindex函数。

函数z = pickindex (x, k) z = simple_mult (x);%评估这两个目标z = z (k);%返回目标k结束

另请参阅

相关的话题