Line Search
Line Search
Diska Armeina
NIM. 20119005
Institut Teknologi Bandung
2020
I. PENDAHULUAN
Dalam mencari titik minimum dari suatu fungsi non-linear, terdapat beberapa metode yang dapat
digunakan antara lain metode Line Search, Trust Region dan Quasi-Newton. Pada laporan ini,
optimasi dilakukan untuk meminimumkan fungsi Griewank yang didefinisikan sebagai berikut,
𝑑 𝑑
𝑥𝑖2 𝑥𝑖
𝑓 (𝑥 ) = 1 + ∑ − ∏ cos ( ) (1)
4000 √𝑖
𝑖=1 𝑖=1
dengan 𝑑 = 2 dan akan dievaluasi dalam interval −5 < 𝑥1 , 𝑥2 < 5. Pencarian titik minimum
dilakukan dengan metode Line Search, dengan penentuan step length dilakukan dengan wolfe
condition dan backtracking sedangkan untuk penentuan arah dilakukan dengan metode steepest
descent dan newton. Selanjutnya, akan dibandingkan dan dianalisis dari semua metode yang
digunakan tersebut. Dalam pengerjaan laporan ini dibantu oleh perangkat lunak Matlab R2017a.
Dalam mencari titik minimum, titik iterasi pada metode line search hitung dengan terlebih dahulu
menentukan arah 𝑝𝑘 selanjutnya dicari seberapa jauh perpindahannya 𝛼𝑘 yang dinyatakan dalam
persamaan berikut.
𝑥𝑘+1 = 𝑥𝑘 + 𝛼𝑘 𝑝𝑘 (2)
Dalam algoritma line search, 𝑝𝑘 bersifat descent direction sehingga fungsi 𝑓 dapat direduksi
sepanjang garis ini. 𝑝𝑘 dinyatakan dalam bentuk berikut.
𝑝𝑘 = −𝐵𝑘−1 ∇𝑓𝑘 (3)
dengan 𝐵𝑘 matriks simetris dan definit positif[1]. Pada steepest descent, 𝐵𝑘 merupakan matriks
identitas I sedangkan pada newton, 𝐵𝑘 didefinisika sebagai matriks Hessian ∇2 𝑓(𝑥𝑘 ).
Selanjutnya, untuk penentuan step length, pada laporan ini dilakukan dengan backtracking dan
wolfe conditions.
𝜑(𝛼 ) = 𝑓(𝑥𝑘 + 𝛼𝑘 𝑝𝑘 ), 𝛼 > 0.
Pertama-tama, panjang langkah harus memberikan penurunan yang cukup terhadap fungsi 𝑓 yang
dinyatakan dalam bentuk berikut.
𝑓 (𝑥𝑘 + 𝛼𝑘 𝑝𝑘 ) ≤ 𝑓(𝑥𝑘 ) + 𝑐1 𝛼𝑘 ∇𝑓𝑘𝑇 𝑝𝑘 (4)
Untuk suatu 𝑐1 ∈ (0,1). Persamaan (4) ini disebut sebagai Armijo condition yang juga digunakan
dalam sebagai pendekatan metode backtracking.
Selanjutnya untuk wolfe condition, terdapat satu kondisi lagi yang mesti terpenuhi yaitu curvature
conditions yang dinyatakan sebagai berikut.
∇𝑓 (𝑥𝑘 + 𝛼𝑘 𝑝𝑘 )𝑇 𝑝𝑘 ≤ 𝑐2 ∇𝑓𝑘𝑇 𝑝𝑘 (5)
dengan 𝑐2 ∈ (𝑐1 , 1).
ALGORITMA 4: Zoom
Langkah 1. Input 𝑐1, 𝑐2, dan iterasi
𝒂𝒍𝒐 +𝒂𝒉𝒊
Langkah 2. Interpolasi dengan bisection: 𝜶𝒋 = , 𝒂𝒋 ∈ (𝒂𝒍𝒐 , 𝒂𝒉𝒊 )
𝟐
Fungsi griewank memiliki titik minimum global 𝑥𝑜𝑝𝑡 = (0, 0). Pada laporan ini, akan dicari nilai
minimum global fungsi Griewank menggunakan kombinasi metode pencarian arah 𝑝𝑘 dan panjang
langkah 𝛼𝑘 dengan lima titik awal sembarang yaitu (−3, 2.75), (−3.25, −3), (1, 0.4), (3.25, 2.75)
dan (2.9, −3.25), nilai parameter 𝛼0 = 0, 𝛼1 = 1, 𝛼𝑚𝑎𝑥 = 1, 𝜏 = 0.5, 𝑐1 = 10−4 , 𝑐2 = 0.9 dan
nilai toleransi sebesar 10−5 .
1. Steepest-Backtracking
Dengan metode mencari arah menggunakan steepest dan panjang langkah dengan menggunakan
backtracking, hasil iterasi untuk titik awal 𝑥0 = [1, 0.4] dinyatakan pada Tabel 1. Tabel tersebut
menunjukkan bahwa titik optimum diperoleh pada iterasi ke-15 dengan 𝑥𝑜𝑝𝑡 = [0, 1.8 × 10−5 ]
dengan galat 9 × 10−6 .
TABEL 1. Line Search: Steepest Descent-Backtrackings dengan 𝑥0 (1, 0.4)
Pada iterasi pertama, metode ini memiliki besar perpindahan titik yang cukup besar dibandingkan
dengan iterasi selanjutnya. Pada iterasi kedua, terjadi penurunan besar perpindahan titik sebesar
lebih dari ¼ dari besar perpindahan titik pertama pada iterasi kedua. Hal ini dikarenakan adanya
penurunan nilai 𝑝𝑘 (Tabel 1) dan hingga iterasi ke-15, nilai 𝑝𝑘 terus menurun mengakibatkan
perpindahan titik semakin mengecil hingga bergerak mendekati ke titik minimum global (0, 0).
Hal ini terlihat pada Gambar 3 dibawah ini. Dalam Gambar 3 juga terlihat bahwa, di setiap titik
iterasi, gradient bernilai positif dan titik bergerak mendekati titik minimum dari sisi kanan.
𝑥2 𝑥2 𝑥2
𝒙𝟏
𝒙𝟎 [𝟏, 𝟎. 𝟒]
𝒙𝟎
𝒙𝟐 𝒙𝟏
𝒙𝟐
𝒙𝟑
𝒙𝟒
𝑥1 𝑥1 𝑥1
Berdasarkan Tabel 2, metode newton-backtracking ini sangat cepat menuju titik optimum 𝑥𝑜𝑝𝑡 =
[2 × 10−6 , −3 × 10−6 ] yaitu dalam 3 iterasi dengan galat 3 × 10−3 . Namun, pada Gambar 4
terlihat bahwa titik 𝑥1 bergerak ke 𝑥2 melewati titik optimum. Hal ini dikarenakan kondisi Armijo
pada pendekatan backtracking ini, nilai 𝑐1 ∈ (0,1) memungkinkan terpenuhi semua nilai 𝛼 untuk
persamaan (4). Dengan demikian, langkah yang dihasilkan dapat begitu panjang hingga melewati
titik optimum.
𝑥2 𝑥2
𝒙𝟎 [𝟏, 𝟎. 𝟒]
𝒙𝟐
𝒙𝟑
𝒙𝟏
𝑥1
𝑥1
Dengan galat 6 × 10−6 , metode steepest-wolfe mencapai titik optimum pada 𝑥𝑜𝑝𝑡 = [0, 12 ×
10−6 ]. Walaupun besar langkah perpindahan titik pada iterasi pertama cukup jauh (Gambar 5,
namun untuk mencapai titik optimum, metode ini membutuhkan iterasi lebih banyak dibandingkan
steepest-backtracking dan newton-backtracking.
𝑥2 𝑥2
𝒙𝟎
𝒙𝟎 [𝟏, 𝟎. 𝟒]
𝒙𝟏
𝒙𝟐
𝒙𝟒 𝒙𝟑
𝑥1 𝑥1
Pada metode newton-wolfe ini, besar langkah perpindahan titik pada iterasi pertama sangat jauh
dibandingkan iterasi-iterasi selanjutnya. Hal ini terlihat jelas pada Gambar 6 yaitu perpindahan
langkah dari titik 𝑥0 ke 𝑥1 sangat besar kemudian ke titik 𝑥2 semakin mengecil kemudian ke titik
selanjutnya semakin merapat hingga mencapat titik optimum 𝑥𝑜𝑝𝑡 = [0, −3 × 10−6 ] dengan
galat 10−6 pada iterasi ke-6.
𝑥2 𝑥2 𝑥2
𝒙𝟎 [𝟏, 𝟎. 𝟒] 𝒙𝟎
𝒙𝟐
𝒙𝟑
𝒙𝟐
𝒙𝟏
𝑥1 𝑥1 𝑥1
Pada tabel 5, terlihat bahwa dua metode yang paling cepat menuju titik optimum adalah metode
newton-backtracking dan newton-wolfe. Metode newton-backtracking paling cepat menuju titik
optimum dikarenakan 𝑐1 ∈ (0,1) pada Armijo conditions mengakibatkan cukup memuat semua
nilai 𝛼 yang memenuhi persamaan (2) sehingga titik 𝑥𝑖 hingga dapat melewati titik optimum
(Gambar 4 dan Gambar 8). Sedangkan pada wolfe conditions, selain harus memenuhi syarat
Armijo conditions, nilai 𝛼 juga harus memenuhi curvature conditions pada persamaan (5).
curvature conditions ini memastikan bahwa gradient dari 𝜑(𝛼𝑘 ) lebih besar dari 𝑐2 𝜑′(0). Jika
gradient 𝜑′(𝛼𝑘 ) terlalu negative, artinya nilai 𝑓 dapat direduksi secara signifikan sepanjang arah
yang dipilih. Artinya tidak cukup banyak 𝑓 yang dapat direduksi pada penurunan selanjutnya.
Padahal dalam rentang tersebut memungkinkan titik optimum terlewat untuk diidentifikasi. Oleh
karena itu, metode wolfe-condition ini lebih teliti dalam menemukan titik optimum dikarenakan
gradiennya disesuaikan (tidak terlalu positif atau negative) agar panjang langkah cukup untuk
melakukan reduksi nilai 𝑓 hingga mencapai titik optimum.
Selanjutnya Pada Tabel 7 seluruh metode yang digunakan dikelompokkan berdasarkan titik
(𝑥1𝑘 , 𝑥2𝑘 ) yang memenuhi nilai tolerasi kurang dari 10−6 pada iterasi ke −𝑘. Dengan titik
minimum global Fungsi Griewank yaitu pada titik (0, 0), dari lima titik awal yang diambil pada
daerah yang berbeda-beda, hanya satu titik awal dari semua metode yang menuju ke titik minimum
global yaitu titik awal (1, 0.4) sedangkan keempat titik lainnya, pada hasil iterasi menunjukkan
bahwa titik tersebut menuju ke minimum lokal (Gambar 3 – Gambar 6). Untuk mencapai titik
optimum tersebut, pada Tabel 6, metode Newton-Bactracking memiliki nilai galat yang paling
kecil kemudian urutan keduanya adalah metode Newton-Wolfe.
Selanjutnya akan ditinjau gradiennya. Pada Gambar 7-10, dapat dilihat bahwa untuk nilai gradient
positif, titik akan bergerak menuju titik optimum melalui sisi kanan sedangkan apabila gradient
berniali negatif, titik akan bergerak menuju titik optimum melalui sisi sebelah kiri. Pemilihan titik
awal ini juga harus diperhatikan karena pada line search ini titik dikatakan sudah mencapai titik
optimum apabila nilai gradiennya sama dengan atau mendekati nol. Oleh karena itu, ketika sudah
mencapai kondisi tersebut, iterasi akan berhenti dan karena sudah mencapai titik optimum tetapi
titik tersebut belum merupakan tentu titik optimum global.
𝑥2 𝑥2
𝑥1
𝑥1
𝑥1
𝑥2 𝑥2
𝑥1 𝑥1
LAMPIRAN 1. Steepest-backtracking
clear all;
tic
%% Plot Awal
[x1new,x2new] = meshgrid(-5:0.5:5,-5:0.5:5);
f = ((x1new).^2/4000)+((x2new).^2/4000)-(cos(x1new).*cos(x2new)/2^0.5)+1;
%surf(x1,x2,f)
grr=contour(x1new,x2new,f,30);
colormap(flipud(summer(20)));
title('Kontur Fungsi Griewank')
%% Main Code
syms X1 X2
f=(((X1).^2)/4000+((X2).^2)/4000)-(cos(X1)*(cos(X2)/sqrt(2)))+1;
x1_awal=1;
x2_awal=0.4;
x1 =x1_awal
x2 =x2_awal
error=1;
iter=0;
iter_max=30;
alpha_max=1;
epsilon=10^-5;
disp(' Tabel Iterasi ')
disp('===========================================================')
disp(' i x1 x2 f Galat ')
disp('===========================================================')
%Bk=1;
Bk=eye(2);
X =[];
while error>=epsilon && iter<iter_max
iter=iter+1;
pk=Bk*line_gradf(f, X1, X2, x1, x2);
alpha=armijo(f, X1,X2, x1,x2,Bk);
x1_new=x1-alpha*pk(1);
x2_new=x2-alpha*pk(2);
x1=x1_new;
x2=x2_new;
X = [X ; [x1 x2]];
fprintf('%2d\t%6.8f\t %6.8f\t %6.8f\t
%6.8f\n',iter,x1,x2,line_fgriewank(x1,x2),error);
end
%% Plot titik
hold on
plot(X(:,1),X(:,2),'-k','LineWidth',1.5)
plot(X(:,1),X(:,2),'*r','LineWidth',1)
tiwal=[x1_awal x2_awal];
iter1=[X(1,1) X(1,2)];
%plot(iter1,tiwal,'-k','LineWidth',1.5)
plot(x1_awal,x2_awal,'*r','LineWidth',2)
toc
LAMPIRAN 2. Steepest-Wolfe
clear all;
tic
[x1new,x2new] = meshgrid(-5:0.5:5,-5:0.5:5);
f = ((x1new).^2/4000)+((x2new).^2/4000)-(cos(x1new).*cos(x2new/2^0.5))+1;
%surf(x1,x2,f)
grr=contour(x1new,x2new,f,30);
colormap(flipud(summer(20)));
title('Kontur Fungsi Griewank')
syms X1 X2
f=(((X1).^2)/4000+((X2).^2)/4000)-(cos(X1)*(cos(X2/sqrt(2))))+1;
x1_awal=1;
x2_awal=0.4;
x1=x1_awal
x2=x2_awal
error=1;
iter=0;
iter_max=30;
alpha_max=1;
epsilon=10^-5;
disp(' Tabel Iterasi ')
disp('=======================================================================
==================')
disp(' i x1 x2 alpha pk(1) pk(2) f
Galat ')
disp('=======================================================================
==================')
%Bk=1;
X=[];
while error>=epsilon
iter=iter+1;
Bk=eye(2);
pk=-Bk*line_gradf(f, X1, X2, x1, x2);
alpha=line_alphak(f, alpha_max, X1, X2, x1, x2, Bk);
x1_new=x1+alpha*pk(1);
x2_new=x2+alpha*pk(2);
error= norm(line_gradf(f, X1, X2, x1_new,x2_new));
x1=x1_new;
x2=x2_new;
X = [X ; [x1 x2]];
fprintf('%2d\t %6.6f\t %6.6f\t %6.6f\t %6.6f %6.6f\t %6.6f\t
%6.6f\n',iter,x1,x2,alpha,pk(1),pk(2),line_fgriewank(x1,x2),error);
end
hold on
plot(X(:,1),X(:,2),'-k','LineWidth',1.5)
plot(X(:,1),X(:,2),'*','LineWidth',1)
plot(X(:,1),X(:,2),'*r','LineWidth',1)
plot(x1_awal,x2_awal,'*r','LineWidth',2)
toc
LAMPIRAN 3. Newton-Bactracking
clear all;
tic
%% Plot Awal
[x1new,x2new] = meshgrid(-5:0.5:5,-6:0.5:5);
f = ((x1new).^2/4000)+((x2new).^2/4000)-(cos(x1new).*cos(x2new/2^0.5))+1;
%surf(x1,x2,f)
grr=contour(x1new,x2new,f,30);
colormap(flipud(summer(20)));
title('Kontur Fungsi Griewank')
%% Main code
syms X1 X2
f=(((X1).^2)/4000+((X2).^2)/4000)-(cos(X1)*(cos(X2/sqrt(2))))+1;
x1_awal=-3;
x2_awal=2.75;
x1=x1_awal
x2=x2_awal
error=1;
iter=0;
alpha_max=1;
epsilon=10^-5;
disp(' Tabel Iterasi ')
disp('=======================================================================
==================')
disp(' i x1 x2 alpha pk(1) pk(2)
f Galat ')
disp('=======================================================================
==================')
X =[];
while error>=epsilon
B=hessian(f,[X1,X2]);
Bk=inv(double(subs(B, {X1, X2}, {x1, x2})));
if det(Bk)>0
Bk=Bk;
else
disp('Matriks hessian tidak definit positif')
break;
end
%% Plot titik
hold on
plot(X(:,1),X(:,2),'-k','LineWidth',1.5)
plot(X(:,1),X(:,2),'*r','LineWidth',1)
tiwal=[x1_awal x2_awal];
iter1=[X(1,1) X(1,2)]
%plot(iter1,tiwal,'-k','LineWidth',1.5)
plot(x1_awal,x2_awal,'*r','LineWidth',2)
toc
LAMPIRAN 4. Newton- Wolfe
clc;
clear all;
tic
%% Plot Awal
[x1new,x2new] = meshgrid(-5:0.2:5,-5:0.2:5);
f = ((x1new).^2/4000)+((x2new).^2/4000)-(cos(x1new).*cos(x2new/2^0.5))+1;
%surf(x1new,x2new,f)
grr=contour(x1new,x2new,f,30);
colormap(flipud(summer(20)));
title('Grafik Fungsi Griewank')
%% Main code
syms X1 X2
f=(((X1).^2)/4000+((X2).^2)/4000)-(cos(X1)*(cos(X2/sqrt(2))))+1;
x1_awal=1;
x2_awal=0.4;
x1 =x1_awal
x2 =x2_awal
error=1;
iter=0;
iter_max=10;
alpha_max=1;
epsilon=10^-5;
X =[];
while error>=epsilon
%while iter<iter_max
B=hessian(f,[X1,X2]);
Bk=inv(double(subs(B, {X1, X2}, {x1, x2})));
if det(Bk)>0
Bk=Bk;
else
disp('Matriks hessian tidak definit positif')
break;
end
iter=iter+1;
pk=Bk*line_gradf(f, X1, X2, x1, x2);
alpha=line_alphak(f, alpha_max, X1, X2, x1, x2, Bk);
x1_new=x1-alpha*pk(1);
x2_new=x2-alpha*pk(2);
%% Plot titik
hold on
plot(X(:,1),X(:,2),'-k','LineWidth',1.5)
plot(X(:,1),X(:,2),'*r','LineWidth',0.1)
% tiwal=[x1_awal x2_awal];
% iter1=[X(1,1) X(1,2)]
%plot(iter1,tiwal,'-k','LineWidth',1.5)
plot(x1_awal,x2_awal,'*r','LineWidth',2)
toc
LAMPIRAN 5. Backtracking
function alphaA = armijo(f,X1, X2, x1,x2,Bk)
alpha = 1;
tau = 0.5;
c = 0.5;
i = 1;
pk=-Bk*line_gradf(f, X1, X2, x1, x2);
while (i > 0)
y1 = x1 + alpha*pk(1);
y2 = x2 + alpha*pk(2);
while cek
psi_alpha=line_fgriewank(x1+alpha(i)*pk(1), x2+alpha(i)*pk(2)); %evaluasi
fungsi obj: psi(alpha)
if psi_alpha>(line_fgriewank(x1,x2)+c1*alpha(i)*turunan_psi) ||
(psi_alpha>=line_fgriewank(x1+alpha(i-1)*pk(1), x2+alpha(i-1)*pk(2)) && i>2)
y=line_zoom(f, alpha(i-1),alpha(i), X1, X2, x1, x2, Bk);
cek=false;
end
psi_aksen=(line_gradf(f, X1, X2, x1+alpha(i)*pk(1),
x2+alpha(i)*pk(2)))'*pk; %turunan psi di titik alpha i
if abs(psi_aksen)<=-c2*turunan_psi
y=alpha(i);
cek=false;
end
if psi_aksen>=0
y=line_zoom(f, alpha(i), alpha(i-1), X1, X2, x1, x2, Bk);
cek=false;
end
alpha(i+1)=alpha(i)+0.5*(alpha_max-alpha(i));
i=i+1;
end
end
LAMPIRAN 7. Zoom
function alphaA = armijo(f,X1, X2, x1,x2,Bk)
alpha = 1;
tau = 0.5;
c = 10^-4;
i = 1;
pk=-Bk*line_gradf(f, X1, X2, x1, x2);
while (i > 0)
y1 = x1 + alpha*pk(1);
y2 = x2 + alpha*pk(2);
aa=line_fgriewank(y1,y2);
bb = line_fgriewank(x1,x2);
cc = c*alpha*(line_gradf(f, X1, X2, x1, x2))'*pk;
if aa <= bb+cc
i = 0;
alphaA = alpha;
else
alpha = alpha*tau;
end
end
end