生成和情节帕累托
这个例子展示了如何生成和情节的帕累托面前使用二维多目标函数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 = 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结束