パレ,トフロントの生成とプロット
この例では,fgoalattain
を使用して2次元多目的関数のパレ,トフロントを生成し,プロットする方法を説明します。
この例の2の目的関数は,凸関数
をシフトしてスケ,リングしたバ,ジョンです。目的関数のコ,ドは,この例の最後に記載されたsimple_mult
補助関数内に表示されます。
両方の目的関数が,領域 で減少し,領域 で増加します。0と 1 の間では、 が増加し, が減少するため,トレ,ドオフ領域が存在します。 から までの範囲の の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”;“绿线之间的权衡区”})
パレトフロントを見けるには,まず,2の目的関数の制約なしの最小値を求めます。この例では,プロットから, の最小値が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,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 (“₂”)
2 .の目的関数間のトレ,ドオフを確認できます。
補助関数
次のコ,ドは関数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结束