このページ最新ではありませ。をクリックし,英语のの最新版版を参照参照し。
この例で,Fgoalattain
2次元しし次元关数のパレートをし,プロットする方法を说明说明ますます。
このこののつのつの关数は,凸关数凸关数
をシフトてたバージョンです。关数のコードは,この例の最后に记载さたSimple_mult
补助关数に表示さ。。
両方の关数が,领域 で减少し领域 で増加ます。。。とのの间で,,, が増加し, が减少ためトレードオフが存在します。 から までの范囲の 2つのつのをプロットします。。
t = linspace(-1/2,3/2);f = simple_mult(t);情节(t,f,'行宽',2)保持在图([0,0],[0,8],,'G - ');图([1,1],[0,8],,'G - ');图([0,1],[1,6],,'k。',,,,“标记”,15);文本(-0.25,1.5,'最低(f_1(x))')文字(.75,5.5,'最低(f_2(x))') 抓住离开传奇('f_1(x)',,,,'f_2(x)')xlabel({'X';“绿线之间的权衡区域”})
2つの,まず,,,つの关数のなしの最小値を求め求めます。このこの例ではは, の最小値ががでで 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 =零(n+1,1);f =零(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),'ko');Xlabel('f_1')ylabel('f_2')
2つの关数トレードオフを确认。。。
次のコード关数Simple_multi
を作成し。
功能f = simple_mult(x)f(:,1)= sqrt(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结尾