主要内容

生成并绘制帕累托前沿

此示例演示如何使用生成和绘制二维多目标函数的帕累托前沿福格拉坦.

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

这两个目标函数在该地区都有所减少 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\u mult(t);plot(t,F,“线宽”,2)保持在…上绘图([0,0],[0,8],“g——”);绘图([1,1],[0,8],“g——”); 绘图([0,1],[1,6],“k.”,“MarkerSize”,15); 文本(-0.25,1.5,“最小值(f_1(x))”)文本(.75,5.5,“最小值(f_2(x))”)持有传奇(‘f_1(x)’,‘f_2(x)’)xlabel({“x”;“绿线之间的折衷区域”})

图中包含一个轴。轴包含7个类型为line、text的对象。这些对象表示f_1(x),f_2(x)。

要找到帕累托前沿,首先要找到两个目标函数的无约束极小值 F 1. ( x ) 为1,且最小值为 F 2. ( x ) 是6,但通常您可能需要使用优化例程来查找最小值。

通常,编写一个函数,返回多目标函数的特定组件精选索引辅助函数在本例结束返回 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];

要计算帕累托前沿,请获取权重向量 [ A. , 1. A. ] 对于 A. 从0到1。解决目标达成问题,将权重设置为各种值。

nf=2;%目标函数数N=50;%用于打印的点数onen=1/N;x=零(N+1,1);f=零(N+1,nf);乐趣=@simple\u mult;x0=0.5;选项=最佳选项(“fgoalattain”,“显示”,“关”);对于r=0:nt=onen*r;%0到1重量=[t,1-t];[x(r+1,:),f(r+1,:)]=fgoalattain(乐趣,x0,目标,体重,...[]、[]、[]、[]、[]、[]、[]、[]、选项);终止图(f(:,1),f(:,2),“高”); xlabel(“f_1”)伊拉贝尔(“f_2”)

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

您可以看到这两个目标函数之间的折衷。

辅助函数

下面的代码创建简单多作用

作用f=简单的(x)f(:,1)=sqrt(1+x.^2);f(:,2)=4+2*sqrt(1+(x-1)。^2;终止

下面的代码创建精选索引作用

作用z=pickindex(x,k)z=simple_mult(x);%评估两个目标z=z(k);%返回目标k终止

另见

相关话题