Anda di halaman 1dari 21

LAPORAN METODE OPTIMASI LANJUT

MENCARI TITIK MINIMUM DARI FUNGSI GRIEWANK DENGAN


MENGGUNAKAN METODE 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).

Berikut ini algoritma line search dengan Matlab.


Algoritma 1: Line Search
Langkah 1. Input 𝑥1, 𝑥2, 𝛼 maksimum, iterasi awal, jumlah iterasi maksimum dan nilai toleransi
Langkah 2. While galat > nilai toleransi dan iterasi < iterasi maksimum
Langkah 3. Hitung 𝑝𝑘 = −𝐵𝑘−1 ∗ 𝑔𝑟𝑎𝑑𝑖𝑒𝑛𝑡(𝑓𝑘 ).
Langkah 4. Hitung 𝛼𝑘 ,
Untuk steepest, 𝐵𝑘 = 𝑒𝑦𝑒(2)
sedangkan newton, 𝐵𝑘 = ℎ𝑒𝑠𝑠(𝑓𝑘 )
Langkah 5. Hitung nilai 𝑥 yang baru
𝑥1𝑘+1 = 𝑥1𝑘 + 𝛼𝑘 𝑝𝑘 (1)
𝑥2𝑘+1 = 𝑥2𝑘 + 𝛼𝑘 𝑝𝑘 (2)
Langkah 6. Hitung galat 𝜀 = ‖∇𝑓𝑘 ‖
Langkah 7. Iterasi = iterasi +1

Berikut ini algoritma perhitungan 𝛼𝑘 .


Algoritma 2: Backtracking Approach
Langkah 1. Input 𝛼, 𝜏, dan 𝑐
Langkah 2. If 𝑓 (𝑥𝑘 + 𝛼𝑘 𝑝𝑘 ) ≤ 𝑓 (𝑥𝑘 ) + 𝑐1 𝛼𝑘 ∇𝑓𝑘𝑇 𝑝𝑘 maka berhenti. Jika belum, evaluasi 𝛼 = 𝛼𝜏
Algoritma 3: Wolfe condition
Langkah 1. Input 𝛼(1), 𝛼 (2), 𝑐1, 𝑐2, dan iterasi
Langkah 2. Evaluasi 𝜑(𝛼𝑖 )
Langkah 3. If 𝜑(𝛼𝑖 ) > 𝜑(0) + 𝑐1 𝛼𝑖 𝜑′ (0) | | [𝜑(𝛼𝑖 ) ≥ 𝜑(𝛼𝑖−1 ) && 𝑖 > 1]
𝛼∗ = 𝑧𝑜𝑜𝑚(𝛼𝑖−1 , 𝛼𝑖 ) dan berhenti
Langkah 4. Evaluasi 𝜑′ (𝛼𝑖 )
If |𝜑′(𝛼𝑖) | ≤ −𝑐2 𝜑′(0) maka 𝛼∗ = 𝑎𝑖
If |𝜑′(𝛼𝑖) | ≥ 0 maka 𝛼∗ = 𝑧𝑜𝑜𝑚(𝛼𝑖−1 , 𝛼𝑖 ) dan berhenti
Langkah 5. Pilih 𝜶𝒊+𝟏 ∈ (𝜶𝒊 , 𝜶𝒎𝒂𝒙 )
Langkah 6. 𝒊 = 𝒊 + 𝟏

ALGORITMA 4: Zoom
Langkah 1. Input 𝑐1, 𝑐2, dan iterasi
𝒂𝒍𝒐 +𝒂𝒉𝒊
Langkah 2. Interpolasi dengan bisection: 𝜶𝒋 = , 𝒂𝒋 ∈ (𝒂𝒍𝒐 , 𝒂𝒉𝒊 )
𝟐

Langkah 3. Evaluasi 𝜑(𝛼𝑗 )


Langkah 4. If 𝜑(𝛼𝑗 ) > 𝜑(0) + 𝑐1 𝛼𝑗 𝜑′ (0) | | 𝜑(𝛼𝑗 ) ≥ 𝜑(𝛼0 )
𝛼ℎ𝑖 = 𝛼𝑗
else
Langkah 5. Evaluasi 𝜑′ (𝛼𝑖 )
Langkah 6. If |𝜑′(𝛼𝑖 ) | ≤ −𝑐2 𝜑′(0)
Langkah 7. Atur 𝛼∗ = 𝑎𝑖 dan berhenti.
Langkah 8. if 𝜑(𝛼𝑗 )𝜑(𝛼ℎ𝑖 − 𝛼𝑙𝑜 ) ≥ 0
Langkah 9. 𝑎ℎ𝑖 = 𝑎𝑙𝑜
Langkah 5. Pilih 𝜶𝒍𝒐 = 𝜶𝒋
II. HASIL DAN PEMBAHASAN
Fungsi Griewank dua dimensi yang digunakan pada laporan ini adalah sebagai berikut,
1 𝑥2
𝑓 (𝑥 ) = 1 + (𝑥12 + 𝑥22 ) − cos(𝑥1 ) cos ( )
4000 √2
dengan −5 < 𝑥1 , 𝑥2 < 5.

GAMBAR 1. Grafik Fungsi Griewank GAMBAR 2. Kontur Fungsi Griewank

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

GAMBAR 3. Panjang langkah dan arah metode Steepest-Bactracking di 𝑥0 (1, 0.4)


2. Newton-Backtracking
Metode line Search dengan pencarian arah menggunakan newton dan panjang langkah dengan
menggunakan backtracking diperoleh hasil iterasi untuk titik awal 𝑥0 (1, 0.4) sebagai berikut.

TABEL 2. Line Search: Newton-Backtracking dengan 𝑥0 (1, 0.4)

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

GAMBAR 4. Panjang langkah dan arah metode Newton-Bactracking di 𝑥0 (1, 0.4)


3. Steepest-Wolfe
Pada bagian 3 ini dilakukan pencarian titik minimum global dengan pencarian arah menggunakan
steepest dan panjang langkah dengan menggunakan wolfe diperoleh hasil iterasi untuk titik awal
𝑥0 (1, 0.4) sebagai berikut.

TABEL 3. Line Search: Steepest Descent-Wolfe dengan 𝑥0 (1, 0.4)

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

GAMBAR 5. Panjang langkah dan arah metode Newton-Bactracking di 𝑥0 (1, 0.4)


4. Newton-Wolfe
Dengan metode mencari arah menggunakan steepest dan panjang langkah dengan menggunakan
backtracking dengan 𝑥0 (1, 0.4) diperoleh titik optimum 𝑥𝑜𝑝𝑡 = [0, −3 × 10−5 ] dengan galat dari
10−1 yang dicapai pada iterasi ke-6. Hasil iterasi ditunjukkan pada Tabel 4.

TABEL 4. Line Search: Newton-Wolfe dengan 𝑥0 (1, 0.4)

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

GAMBAR 6. Panjang langkah dan arah metode Newton-Bactracking di 𝑥0 (1, 0.4)


Selanjutnya diambil 4 titik awal lain sebarang yaitu (-3, 2.75), (-3.25, -3), (3.25, 2.75) dan (2.9, -
3.25). Hasil komputasi titik-titik tersebut ditunjukkan pada Tabel 5 – Tabel 8 berdasarkan jumlah
iterasi, besarnya galat, dan titik akhir iterasi.
Tabel 5. Perbandingan Jumlah Iterasi
Titik Awal (𝒙𝟏𝟎 , 𝒙𝟐𝟎 )
Metode
(−3, 2.75) (−3.25, −3) (1, 0.4) (3.25, 2.75) (2.9, −3.25)
Steepest-Backtracking 17 17 15 17 17
Steepest-Wolfe 16 16 14 16 14
Newton-Backtracking 4 5 3 4 4
Newton-Wolfe 6 7 6 6 6

Tabel 6. Perbandingan Galat


Titik Awal (𝒙𝟏𝟎 , 𝒙𝟐𝟎 )
Metode (−3, 2.75) (−3.25, −3) (1, 0.4) (3.25, 2.75) (2.9, −3.25)
Steepest-Backtracking 0.000009 0.000007 0.000009 0.000009 0.000005
Steepest-Wolfe 0.000079 0.000065 0.000066 0.000078 0.000088
Newton-Backtracking 0.000000 0.000000 0.000003 0.000000 0.000000
Newton-Wolfe 0.000001 0.000001 0.000001 0.000002 0.000001

Tabel 7. Perbandingan Titik Akhir Iterasi ke-𝒌


Titik Awal (𝒙𝒌 )
Metode
(−3, 2.75) (−3.25, −3) (1, 0.4) (3.25, 2.75) (2.9, −3.25)
(-3.140023, (-3.140023, (-0.00000, (3.140023, (3.140023,
Steepest-Backtracking
4.438427) -4.438430) 0.000018) 4.438427) -4.438434)
(-3.140023 (-3.140023, (0.000000, (3.140023, (3.140023,
Steepest-Wolfe
4.438287) -4.438315) 0.000132) 4.438288) -4.438268)
(-3.140023, -3.140023, (-0.000002, (3.140023, (3.140023,
Newton-Backtracking
4.438444) -4.438444 -0.000003) 4.438444) -4.438444)
(-3.140024, (-3.140024, (0.000000, (3.140021, (3.140022,
Newton-Wolfe
4.438443) -4.438443) -0.000003) 4.438445) -4.438443)

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

GAMBAR 7. Steepest-Backtracking GAMBAR 8. Newton-Backtracking

𝑥2 𝑥2

𝑥1 𝑥1

GAMBAR 9. Steepest-Wolfe GAMBAR 10. Newton-Wolfe


III. KESIMPULAN

Berdasarkan hasil dan pembahasan, dapat disimpulkan bahwa:


 Dengan nilai toleransi 10−5 , dengan metode line search ini diperoleh titik optimum global
fungsi Griewank yaitu 𝑥𝑜𝑝𝑡 = (0,0)
 Untuk mencari titik minimum dengan kombinasi metode pencarian arah dan langkah,
metode pencarian arah menggunakan Newton dan panjang langkah menggunakan Wolfe
adalah yang paling baik untuk mengoptimasi fungsi ini berdasarkan perbandingan jumlah
iterasi, galat dan titik akhir komputasi serta analisa penentuan arah dan panjang langkah
metode tersebut.
 Dengan gradient bernilai positif, titik akan mendekati titik optimum melalui sisi sebelah
kanan. Sebaliknya, apabila gradient bernilai negative, titik awal akan mendekati titik
optimum melalui sisi sebelah kiri.
 Pemilihan titik awal harus diperhatikan karena penurunan nilai gradient memungkinkan
titik terjebak dalam optimum lokal.
 Pemilihan titik awal ini juga harus diperhatikan terutama pada metode newton dikarenakan
terdapat syarat matriks 𝐵𝑘 harus simetris dan definit positif. Oleh karena itu, sebelum
masuk ke perhitungan iterasi titik, harus dilakukan pengujian terlebih dahulu.
IV. REFERENSI
[1] Nocedal, J., Wright, Stephen J., Numerical Optimization (1999)
V. LAMPIRAN

LAMPIRAN 1. Steepest-backtracking

clear all;
tic

disp(' Metode Line Search: Step Length Armijo, Direction Steepest')


disp('==========================================================')

%% 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);

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.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

disp(' Metode Line Search: Step Length Wolfe, Direction Steepest')


disp('==========================================================')

[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

disp(' Metode Line Search: Step Length Armijo, Direction Newton')


disp('==========================================================')

%% 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

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);

error= norm(line_gradf(f, X1, X2, x1_new,x2_new));


ap1=alpha*pk(1);
ap2=alpha*pk(2);
x1=x1_new;
x2=x2_new;
iter=iter+1;
X = [X ; [x1 x2]];

fprintf('%2d\t %6.6f\t %6.6f\t %6.6f\t %6.6f\t %6.6f\t %6.6f\t


%6.6f\n',iter,x1,x2,alpha,pk(1),pk(2),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 4. Newton- Wolfe
clc;
clear all;
tic

disp(' Metode Line Search: Step Length Wolfe, Direction Newton')


disp('==========================================================')

%% 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;

disp(' Tabel Iterasi ')


disp('=======================================================================
==================')
disp(' i x1 x2 alpha pk(1) pk(2)
f Galat ')
disp('=======================================================================
==================')

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);

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\t %6.6f\t %6.6f\t


%6.6f\n',iter,x1,x2,alpha,pk(1),pk(2),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',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);

if line_fgriewank(y1,y2) <= line_fgriewank(x1,x2)+c*alpha*(line_gradf(f,


X1, X2, x1, x2))'*pk
i = 0;
alphaA = alpha;
else
alpha = alpha*tau;
end
end
end
LAMPIRAN 6. Wolfe Conditions
function y=line_alphak(f, alpha_max, X1, X2, x1, x2, Bk) %line search
algorithm
alpha(1)=0;
alpha(2)=0.9;
pk=-Bk*line_gradf(f, X1, X2, x1, x2); %mencari turunan
cek=true;
c1=10^(-4);
c2=0.9;
i=2;
turunan_psi=(line_gradf(f, X1, X2, x1, x2))'*pk;

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

LAMPIRAN 8. Fungsi Griewank


function y=line_fgriewank(a, b)
f=(((a).^2)/4000+((b).^2)/4000)-(cos(a)*cos(b/sqrt(2)))+1;
y=f;
end

LAMPIRAN 9. Gradien Fungsi Griewank


function gradien=line_gradf(f, X1, X2, x1, x2)
df=gradient(f);
gradien=double(subs(df, {X1, X2}, {x1, x2}));
end

Anda mungkin juga menyukai