主要内容

パレ,トフロントの生成とプロット

この例では,fgoalattainを使用して2次元多目的関数のパレ,トフロントを生成し,プロットする方法を説明します。

この例の2の目的関数は,凸関数 1 + x 2 をシフトしてスケ,リングしたバ,ジョンです。目的関数のコ,ドは,この例の最後に記載されたsimple_mult補助関数内に表示されます。

両方の目的関数が,領域 x 0 で減少し,領域 x 1 で増加します。0と 1 の間では、 f 1 x が増加し, f 2 x が減少するため,トレ,ドオフ領域が存在します。 x から - 1 / 2 までの範囲の 3. / 2 の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”“绿线之间的权衡区”})

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

パレトフロントを見けるには,まず,2の目的関数の制約なしの最小値を求めます。この例では,プロットから, 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];

パレ,トフロントを計算するには, 一个 が0から1の重みベクトル 一个 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 (“₂”

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

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结束

参考

関連するトピック