Anda di halaman 1dari 37

METODE GRADIEN KONJUGAT DALAM MENYELESAIKAN

MASALAH OPTIMASI MENGGUNAKAN


APLIKASI ANDROID

NABILA ADITIARINI

DEPARTEMEN MATEMATIKA
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
INSTITUT PERTANIAN BOGOR
BOGOR
2017
PERNYATAAN MENGENAI SKRIPSI DAN
SUMBER INFORMASI SERTA PELIMPAHAN HAK CIPTA
Dengan ini saya menyatakan bahwa skripsi berjudul Metode Gradien
Konjugat dalam Menyelesaikan Masalah Optimasi Menggunakan Aplikasi Android
adalah benar karya saya dengan arahan dari komisi pembimbing dan belum
diajukan dalam bentuk apa pun kepada perguruan tinggi mana pun. Sumber
informasi yang berasal atau dikutip dari karya yang diterbitkan maupun tidak
diterbitkan dari penulis lain telah disebutkan dalam teks dan dicantumkan dalam
Daftar Pustaka di bagian akhir skripsi ini.
Dengan ini saya melimpahkan hak cipta dari karya tulis saya kepada Institut
Pertanian Bogor.
Bogor, Januari 2017

Nabila Aditiarini
NIM G54110041
ABSTRAK
NABILA ADITIARINI. Metode Gradien Konjugat dalam Menyelesaikan Masalah
Optimasi Menggunakan Aplikasi Android. Dibimbing oleh BIB PARUHUM
SILALAHI dan FAHREN BUKHARI.

Pengoptimuman bertujuan mencari penyelesaian terbaik dari suatu masalah.


Terdapat beberapa metode untuk menyelesaikan masalah pengoptimuman dengan
kelebihan dan kekurangan yang berbeda untuk masing-masing metode. Salah satu
metode yang sering digunakan untuk menyelesaikan masalah pengoptimuman
takberkendala, khususnya untuk fungsi taklinear adalah metode gradien konjugat.
Karya ilmiah ini membandingkan waktu penyelesaian dan banyaknya iterasi untuk
metode gradien konjugat Fletcher-Reeves, Polak-Ribere-Polyak, Hestenes-Stiefel,
dan Dai-Yuan dalam menyelesaikan suatu permasalahan pengoptimuman tanpa
kendala untuk kasus fungsi kuadratik. Hasil numerik yang diperoleh menunjukkan
bahwa metode gradien konjugat Hestenes-Stiefel dapat menyelesaikan suatu
pengoptimuman dengan waktu yang lebih cepat dan menemukan titik optimum
dengan iterasi yang lebih sedikit dibandingkan dengan metode gradien konjugat
lainnya.

Kata kunci: Metode gradien konjugat, Pengoptimuman, Android

ABSTRACT

NABILA ADITIARINI. Conjugate Gradient Method in Solving Optimization


Problems Using Android Application. Supervised by BIB PARUHUM SILALAHI
and FAHREN BUKHARI.

Optimization is performed for searching the best solution of a problem.


There are several methods to solve optimization problems with different advantages
and disadvantages for each method. One method that is often used to solve
unconstrained optimization, especially for nonlinear function, is the conjugate
gradient method. In this manuscript, the execution times and the number of
iterations of the conjugate gradient method Fletcher-Reeves, Polak-Ribere-Polyak,
Hestenes-Stiefel, and Dai-Yuan were compared in solving an unconstrained
optimization for quadratic functions. Numerical results showed that the method
Hestenes-Stiefel conjugate gradient can solved an optimization with faster time and
find the optimum point with fewer iterations than the other conjugate gradient
methods.

Keywords: Conjugate gradient method, optimization, Android


METODE GRADIEN KONJUGAT DALAM MENYELESAIKAN
MASALAH OPTIMASI MENGGUNAKAN
APLIKASI ANDROID

NABILA ADITIARINI

Skripsi
sebagai salah satu syarat untuk memperoleh gelar
Sarjana Sains
pada
Departemen Matematika

DEPARTEMEN MATEMATIKA
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
INSTITUT PERTANIAN BOGOR
BOGOR
2017
PRAKATA

Puji dan syukur penulis panjatkan kepada Allah subhanahu wa ta’ala atas
segala nikmat, rahmat, pertolongan dan karunia-Nya sehingga karya ilmiah ini
berhasil diselesaikan. Judul karya ilmiah ini adalah Metode Gradien Konjugat
dalam Menyelesaikan Masalah Optimasi Menggunakan Aplikasi Android.
Terima kasih penulis ucapkan kepada keluarga tercinta Ayah Supriatna,
Ibunda alm.Tri Padmi Andayani, Kakak Yuliantia Maharrami, Adik Alifia Adibila
Nurhalisa, Cicih Komalasari, Alitia Nuranisa dan Alika Raialit atas segala doa,
dukungan, dan kasih sayangnya selama menulis karya ilmiah ini. Ungkapan terima
kasih juga saya ucapkan kepada Bapak Dr Ir Bib Paruhum Silalahi, MKom dan
Bapak Dr Ir Fahren Bukhari, MSc selaku dosen pembimbing yang telah banyak
memberikan saran, kesabaran, dan ilmu, serta Bapak Dr Toni Bakhtiar, MSc selaku
dosen penguji yang telah banyak memberi saran, serta kepada seluruh staf
Departemen Matematika. Tidak lupa saya mengucapkan terima kasih untuk para
sahabat Agum Aditama, Irma Fatmawati, Restu Auliya, Neneng Murnasih, Intan
Fitria Sari, teman-teman seperjuangan Matematika 48, adik-adik Matematika 49,
kakak-kakak Matematika 47, serta teman-teman di luar Departemen Matematika
baik di dalam maupun di luar IPB atas kritik, saran, dan doanya selama pembuatan
karya ilmiah ini.
Semoga karya ilmiah ini dapat bermanfaat.

Bogor, Januari 2017

Nabila Aditiarini
DAFTAR ISI

DAFTAR TABEL viii


DAFTAR GAMBAR viii
DAFTAR LAMPIRAN viii
PENDAHULUAN 1
Latar Belakang 1
Tujuan Penelitian 2
Ruang Lingkup Penelitian 2
TINJAUAN PUSTAKA 2
Fungsi 2
Kombinasi Linear dan Kebebasan Linear 2
Kondisi Keoptimuman 3
Metode Gradien Konjugat 4
Android 5
HASIL DAN PEMBAHASAN 6
Algoritme Metode Gradien Konjugat 8
Hasil Numerik Metode Gradien Konjugat 9
Contoh Perhitungan Metode Gradien Konjugat 12
SIMPULAN 15
DAFTAR PUSTAKA 15
RIWAYAT HIDUP 27
DAFTAR TABEL

1 Waktu eksekusi untuk fungsi dua variabel 9


2 Waktu eksekusi untuk fungsi tiga variabel 9
3 Waktu eksekusi untuk fungsi empat variabel 9
4 Waktu eksekusi untuk fungsi lima variabel 10
5 Rata-rata jumlah iterasi 10
6 Rata-rata waktu eksekusi 10

DAFTAR GAMBAR

1 Jumlah iterasi masing-masing modifikasi metode gradien konjugat 11


2 Waktu eksekusi masing-masing modifikasi metode gradien konjugat 11
3 Perhitungan metode gradien konjugat Fletcher-Reeves menggunakan
aplikasi android. 14

DAFTAR LAMPIRAN

1 Tampilan android (apk) 17


2 Metode gradien konjugat Fletcher-Reeves untuk fungsi dua variabel 18
3 Metode gradien konjugat Fletcher-Reeves untuk fungsi tiga variabel 20
4 Metode gradien konjugat Fletcher-Reeves untuk fungsi empat dan lima
variabel 22
1

PENDAHULUAN

Latar Belakang

Pengoptimuman merupakan pencarian nilai minimum atau maksimum dari


suatu fungsi yang bernilai real. Pemasalahan pengoptimuman dari segi fungsinya
dapat dibedakan menjadi dua yaitu pengoptimuman linear dan pengoptimuman
taklinear. Sedangkan dari bentuknya dikelompokkan menjadi masalah
pengoptimuman tanpa kendala dan pengoptimuman dengan kendala.
Penyelesaian dalam pengoptimuman suatu fungsi dapat dilakukan dengan dua
pendekatan yaitu pendekatan analitik dan pendekatan numerik. Namun pada
penyelesaian pengoptimuman tanpa kendala fungsi taklinear multivariabel,
terdapat persoalan yang tak dapat diselesaikan dengan metode analitik, sehingga
digunakan metode numerik untuk menyelesaikannya. Pendekatan numerik dapat
diklasifikasikan menjadi metode dengan menggunakan gradien dan tanpa
menggunakan gradien. Beberapa contoh metode dengan menggunakan gradien
yaitu metode steepest descent, metode Newton, dan metode conjugate gradient
(gradien konjugat) (Klerk et al. 2005).
Metode gradien konjugat merupakan metode yang konvergen dalam
sejumlah langkah yang berhingga bila digunakan untuk fungsi kuadratik definit
positif. Keuntungan dari metode gradien konjugat adalah memori yang digunakan
rendah dan kecepatan kekonvergenannya tinggi (Snyman, 2005). Metode gradien
konjugat diusulkan oleh Hestenes dan Stiefel pada tahun 1952 yang dikenal dengan
metode HS untuk menyelesaian sistem persamaan linear. Selanjutnya Fletcher dan
Reeves (1964) memperluas metode gradien konjugat untuk memecahkan sistem
pesamaan taklinear untuk skala besar. Beberapa metode gradien konjugat yang
terkenal diantaranya metode HS (Hestenes-Stiefel 1952), metode FR (Fletcher dan
Reeves 1964), metode CD (Fletcher 1987), metode PRP (Polyak 1969), metode
LS (Liu dan Storey 1991) dan metode DY (Dai dan Yuan 1999). Perbedaan metode
gradien konjugat ini terdapat pada perbedaan pemilihan skalar 𝛽𝑘 .
Perkembangan teknologi terjadi secara pesat dan terus berevolusi, salah
satunya teknologi smartphone berbasis android. Penggunaan android dapat
mempermudah kita dalam melakukan suatu pekerjaan, misalnya kita dapat
mengoptimumkan suatu fungsi dan menghitung waktu yang dibutuhkan dalam
proses pengoptimuman. Suatu algoritme pengoptimuman dikatakan baik jika
tingkat kerumitannya kecil dan proses pengoptimumannya membutuhkan waktu
yang minimum (Wungguli 2015). Namun pada kenyataannya banyak
pengoptimuman yang berbentuk sederhana akan tetapi membutuhkan waktu yang
cukup lama dalam proses komputasinya. Pada karya ilmiah ini akan dibahas
metode gradien konjugat dalam menyelesaikan fungsi kuadratik dengan
pengolahan data dilakukan dengan menggunakan bantuan aplikasi android.
2

Tujuan Penelitian

Tujuan dari karya ilmiah ini yaitu:


1. Mengkaji metode gradien konjugat, dan
2. Melihat perbedaan waktu eksekusi dan jumlah iterasi yang dilakukan oleh
semua modifikasi vektor berarah metode gradien konjugat Fletcher-Reeves,
Polak-Ribere-Polyak, Hestenes-Stiefel, dan Dai-Yuan menggunakan aplikasi
android.

Ruang Lingkup Penelitian


Penelitian ini menyelesaikan suatu masalah optimasi menggunakan metode
gradien konjugat. Fungsi yang digunakan adalah fungsi kuadratik definit positif
sehingga akan dihasilkan suatu nilai minimum lokal.

TINJAUAN PUSTAKA

Fungsi

Definisi Fungsi
Fungsi 𝑓: 𝐀 → 𝐁 adalah aturan yang memadankan setiap 𝐱 ∈ 𝐀 secara tepat
satu elemen yang disebut 𝑓(𝐱) ∈ 𝐁, di mana 𝐀 dan 𝐁 adalah himpunan bilangan
real (Bartle dan Sherbert 1982).

Definisi Fungsi Kuadratik


Suatu fungsi 𝑓 dikatakan fungsi kuadratik dalam 𝐱 variabel 𝐱 ∈ ℝ𝑛 jika dapat
dituliskan sebagai
1
𝑓(𝐱) = 𝐱 𝑻 𝐀𝐱 + 𝐁 𝑻 𝐱 + 𝐂,
2
dengan 𝐂 ∈ ℝ𝒏 , 𝐁 vektor real berukuran 𝑛, dan 𝐀 matriks real berukuran 𝑛 × 𝑛
(Snyman 2005).

Kombinasi Linear dan Kebebasan Linear

Definisi Kombinasi Linear


Misalkan 𝐯1 , 𝐯2 , … , 𝐯𝑛 adalah vektor-vektor dalam suatu ruang vektor V.
Vektor 𝐖 dikatakan kombinasi linear dari 𝐯1 , 𝐯2 , … , 𝐯𝑛 jika dapat dinyatakan
sebagai 𝐖 = α1 𝐯1 + α2 𝐯2 + ⋯ + α𝑛 𝐯𝑛 dengan α1 , α2 , … , α𝑛 merupakan skalar
(Leon 1998).

Definisi Kebebasan Linear


Misalkan 𝐯1 , 𝐯2 , … , 𝐯𝑛 adalah vektor-vektor dalam suatu ruang vektor V
disebut bebas linear jika α1 𝐯1 + α2 𝐯2 + ⋯ + α𝑛 𝐯𝑛 = 0 mengakibatkan semua
skalar-skalar α1 , α2 , … , α𝑛 haruslah sama dengan nol (Leon 1998).
3

Kondisi Keoptimuman

Definisi Keoptimuman
Misalkan 𝑓(𝐱) adalah suatu fungsi dengan 𝐱 ∈ ℝ𝑛 , kemudian ambil 𝐱 ∗ ∈ ℝ𝑛 .
 Titik 𝐱 ∗ adalah minimum global dari 𝑓 pada D jika 𝑓(𝐱) ≥ 𝑓(𝐱 ∗ ) ∀𝐱 ∈ 𝐷 ⊆
ℝ𝑛 .
 Titik 𝐱 ∗ adalah minimum lokal jika terdapat 𝜀 > 0 sehingga 𝑓(𝐱) ≥
𝑓(𝐱 ∗ ) untuk setiap {𝐱| ∥ 𝐱 − 𝐱 ∗ ∥< 𝜀} dengan nilai ∥. ∥ menyatakan norm
Euclid (Snyman 2005).

Definisi Vektor Gradien


Misalkan 𝑓 adalah fungsi kuadratik, vektor gradien dari fungsi 𝑓 definisikan
sebagai (Snyman 2005)
𝜕𝑓
𝜕𝑥1
𝜕𝑓
∇𝑓(𝐱) = 𝜕𝑥2 .

𝜕𝑓
(𝜕𝑥𝑛 )

Definisi Matriks Hesse


Misalkan fungs 𝑓: ℝn → ℝ dan 𝑓 terturunkan dua kali. Matriks Hesse adalah
matriks turunan parsial kedua dari 𝑓 yang dapat dinyatakan dengan
𝜕 2 𝑓(𝐱)
H(𝐱) = { }
𝜕𝑥𝑖 𝜕𝑥𝑗
𝜕 2 𝑓(𝐱) 𝜕 2 𝑓(𝐱) 𝜕 2 𝑓(𝐱)

𝜕𝑥12 𝜕𝑥1 𝜕𝑥2 𝜕𝑥1 𝜕𝑥𝑛
𝜕 2 𝑓(𝐱) 𝜕 2 𝑓(𝐱) 𝜕 2 𝑓(𝐱)
= 𝜕𝑥2 𝜕𝑥1 ⋯
𝜕𝑥22 𝜕𝑥2 𝜕𝑥𝑛
⋮ ⋮ ⋱ ⋮
2 2 2
𝜕 𝑓(𝐱) 𝜕 𝑓(𝐱) 𝜕 𝑓(𝐱)

(𝜕𝑥𝑛 𝜕𝑥1 𝜕𝑥𝑛 𝜕𝑥2 𝜕𝑥𝑛2 )
di mana H(𝐱) adalah matriks simetrik 𝑛 × 𝑛 (Snyman 2005).

Syarat Perlu Keoptimuman


Teorema 1
Misalkan 𝑓: ℝn → ℝ dan 𝑓 adalah fungsi yang mempunyai turunan parsial
kedua di 𝐱 ∗ . Jika 𝐱 ∗ adalah minimum lokal, maka ∇𝑓(𝐱 ∗ ) = 0 (syarat orde pertama)
dan matriks Hesse H(𝐱 ∗ ) semidefinit positif (syarat orde kedua).
Titik 𝐱 ∗ sehingga ∇𝑓(𝐱 ∗ ) = 0 dinamakan titik kritis atau titik stasioner fungsi f
(Peressini et al. 1988).
4

Definisi Matriks Kedefinitan


Misalkan 𝐀 adalah suatu matriks berukuran 𝑛 × 𝑛. Matriks 𝐀 disebut definit
positif jika dan hanya jika 𝐱 T 𝐀𝐱 > 0, ∀𝐱 ∈ ℝn . Matriks 𝐀 disebut semidefinit
positif jika dan hanya jika 𝐱 T 𝐀𝐱 ≥ 0, ∀𝐱 ∈ ℝn , selainnya disebut bukan matriks
definit positif (Bazzara dan Sherali 1993).

Contoh:
16 4
𝐀=( ) ; 𝐱 = (𝑎 𝑏 )𝑇 ; ∀𝑎, 𝑏 ∈ ℝ
4 4
karena
16 4 𝑎
𝐱 𝐓 𝐀𝐱 = (𝑎 𝑏) ( ) ( ) = 16𝑎2 + 8𝑎𝑏 + 4𝑏 2
4 4 𝑏
= (4𝑎 + 𝑏)2 + 3𝑏 2 ≥ 0,
∀𝐱 ∈ ℝ𝑛 maka 𝐀 disebut semidefinit positif.

Syarat Cukup Keoptimuman


Teorema 2
Misalkan 𝑓: ℝn → ℝ dan 𝑓 adalah fungsi yang mempunyai turunan parsial
kedua di 𝐱 ∗ . Jika ∇𝑓(𝐱 ∗ ) = 0 dan matriks Hesse H(𝐱 ∗ ) definit positif, maka 𝐱 ∗
adalah minimum lokal dari 𝑓 (Peressini et al. 1988).

Contoh:
𝑓(𝑥1 , 𝑥2 ) = 2𝑥12 + 3𝑥22 − 12𝑥1 .
1. Mencari kandidat titik optimal
4𝑥 − 12
syarat, ∇𝑓(𝑥1 , 𝑥2 ) = ( 1 )=0
6𝑥2
4𝑥1 − 12 = 0 sehingga 4𝑥1 = 12
𝑥1 = 3
6𝑥2 = 0 sehingga 𝑥2 = 0,
diperoleh nilai 𝑥1 = 3 dan nilai 𝑥2 = 0.
3
Jadi 𝐱 ∗ = ( ) adalah titik kandidat optimum.
0
2. Cek titik kandidat yang memenuhi syarat optimum
4 0
H(𝐱) = ( )
0 6
4 0 3
𝐱 𝐓 H(𝐱)𝐱 = (3 0) ( ) ( ) = 36.
0 6 0
𝐓
Karena 𝐱 ∗ H(𝐱)𝐱 ∗ > 0 maka H(𝐱) adalah definit positif,
3
sehingga 𝐱 ∗ = ( ) adalah minimum lokal.
0

Metode Gradien Konjugat

Metode gradien konjugat adalah metode optimasi untuk fungsi taklinear


min 𝑓(𝐱),
x∈ℝⁿ
dengan 𝑓: ℝn → ℝ adalah fungsi kontinu terturunkan. Metode ini bersifat iteratif
dengan formula sebagai berikut:
𝐱 𝑘+1 = 𝐱 𝑘 + 𝛼𝑘 (𝐝𝑘 ),
5

dengan 𝐱 𝑘 𝜖 ℝ𝑛 , di mana 𝑘 menunjukan banyaknya iterasi untuk memperoleh


pendekatan solusi optimal dari fungsi kuadratik. Didefinisikan 𝛼𝑘 adalah panjang
langkah dan 𝐝𝑘 adalah vektor berarah. Panjang langkah (stepsize) 𝛼𝑘 dapat
diperoleh dengan pencarian:
𝛼𝑘 = argmin{𝑓(𝐱 𝑘 + 𝛼(𝐝𝑘 ))}.
Berdasarkan (Chen 2012) karena kemudahan dari iterasi dan kebutuhan
memori yang kecil, metode gradien konjugat adalah salah satu metode yang
terkenal untuk menyelesaikan masalah optimasi takberkendala, khususnya dalam
kasus dimana dimensi 𝑛 dari 𝑓(𝐱) besar ∀𝐱 ∈ ℝ𝑛 . Vektor berarah 𝐝𝑘 didefinisikan:
−𝐠 , 𝑘=1
𝐝𝑘 = { 𝑘 ,
−𝐠 𝑘 + 𝛽𝑘 𝐝𝑘−1 , 𝑘 ≥ 2
di mana 𝛽𝑘 adalah skalar dan
𝐠 𝑘 = 𝐠(𝐱 𝑘 ) = 𝛻𝑓(𝐱 𝑘 ).
Pada metode gradien konjugat terdapat pendefinisian skalar 𝛽𝑘 yang berbeda-
beda:
Jika diambil
𝐠 𝑇𝑘 (𝐠 𝑘 − 𝐠 𝑘−1 )
𝛽𝑘𝐻𝑆 = ,
(𝐠 𝑘 − 𝐠 𝑘−1 )𝑇 𝐝𝑘−1
maka disebut gradien konjugat Hestenes − Stiefel.
Jika diambil
𝐠 𝑇𝑘 (𝐠 𝑘 − 𝐠 𝑘−1 )
𝛽𝑘𝑃𝑅𝑃 = ,
𝐠 𝑇𝑘−1 𝐠 𝑘−1
maka disebut gradien konjugat Polak − Ribere − Polyak.
Jika diambil
𝐠 𝑇𝑘 𝐠 𝑘
𝛽𝑘𝐷𝑌 = ,
(𝐠 𝑘 − 𝐠 𝑘−1 )𝑇 𝐝𝑘−1
maka disebut gradien konjugat Dai − Yuan.
Jika diambil
𝐠 𝑇𝑘 𝐠 𝑘
𝛽𝑘𝐹𝑅 = 𝑇 ,
𝐠 𝑘−1 𝐠 𝑘−1
maka disebut gradien konjugat Fletcher − Reeves.
Metode gradien konjugat selalu menuju ke suatu nilai yang optimum.
Perbedaan skalar 𝛽𝑘 pada metode ini diakibatkan karena adanya pendefinisian
persamaan dan teorema baru.

Android

Android adalah sistem operasi berbasis Linux yang dirancang untuk


perangkat layar sentuh seperti smarthphone dan tablet. Android memiliki
sekumpulan tools yang dapat digunakan sehingga membantu para pengembang
dalam meningkatkan produktivitas pada saat membangun aplikasi yang dibuat.
Android awalnya dikembangkan oleh Android Inc., yang kemudian dibeli oleh
Google pada tahun 2005. Pada tanggal 5 November 2007, kelompok pemimpin
industri bersama-sama membentuk Open Handset Alliance (OHA) yang diciptakan
untuk mengembangkan standar terbuka bagi perangkat mobile. Ponsel Android
pertama dijual pada bulan Oktober 2008.
6

HASIL DAN PEMBAHASAN

Metode gradien konjugat adalah metode untuk menyelesaikan masalah


optimasi tak berkendala, baik untuk untuk memecahkan sistem persamaan linear
dan taklinear dengan skala besar. Algoritma yang digunakan untuk mencari nilai
optimum pada metode bersifat iteratif, yaitu dimulai dari suatu nilai awal 𝑥0
kemudian bergerak ke nilai 𝑥1 kemudian 𝑥2 dan selanjutnya sampai 𝑥𝑛 , dimana 𝑥𝑛
adalah nilai yang mendekati titik optimal. Secara teori metode ini tidak akan
berhenti atau akan terus melakukan iterasi sampai kriteria penghentian terpenuhi.
Pada penelitian ini difokuskan pada menyelesaikan masalah optimasi untuk
fungsi kuadratik definit positif. Model fungsi kuadratik dinyatakan sebagai berikut:
1
min 𝑓(𝐱) = 𝐱 T 𝐀𝐱 + 𝐁 T 𝐱 + 𝐂
2
dengan 𝐀 ∈ ℝn×n adalah matriks simetrik definit positif, 𝐁 ∈ ℝn dan 𝐂 ∈ ℝn .
Masalah ini sama dengan memecahkan sistem linear:
𝐀𝐱 = 𝐁
𝐀 𝐀𝐱 = 𝐀−𝟏 𝐁
−𝟏

𝐈𝐱 = 𝐀−𝟏 𝐁
𝐱 = 𝐀−𝟏 𝐁.
Karena A adalah matriks definit positif, masalah fungsi kuadratik tersebut memiliki
solusi yang unik yang diberikan oleh 𝐱 ∗ = 𝐀−𝟏 𝐁.
Salah satu sifat utama metode gradien konjugat adalah vektor-vektor berarah
yang saling konjugat. Berdasarkan (Snyman 2005) dua vektor 𝐝, 𝐯 ≠ 0 saling
konjugat relatif terhadap matriks simetrik definit positif A jika hasil kali skalar
antara 𝐝 dan Av adalah nol, yaitu
𝐝𝐓 𝐀𝐯 = (𝐝, 𝐀𝐯) = 𝟎.

Teorema 1
Misalkan 𝐝𝑖 , 𝑖 = 1, 2, … , 𝑛 adalah vektor-vektor yang saling konjugat
terhadap matriks simetrik definit positif A, maka sembarang vektor 𝐱 ∈ ℝ𝑛 dapat
dinyatakan sebagai kombinasi linear dari vektor-vektor 𝐝𝑖 :
𝑛

𝐱 = ∑ 𝜆𝑖 𝐝𝑖
𝑖=1
dengan
(𝐝𝑖 , 𝐀𝐱)
𝜆𝑖 =
(𝐝𝑖 , 𝐀𝐝𝑖 )

Bukti:
Misalkan ambil sembarang vektor 𝐱 ∈ ℝ𝑛 .
Menggunakan (Definisi Kebebasan Linear)
𝑛

𝐱 = ∑ 𝛼𝑖 𝐝𝑖
𝑖=1
kemudian kalikan matriks definit positif A dengan vektor x
7

𝑛 𝑛

𝐀 (∑ 𝛼𝑖 𝐝𝑖 ) = ∑ 𝛼𝑖 𝐀𝐝i .
𝑖=1 𝑖=1
Diketahui vektor-vektor 𝐝𝑖 saling konjugat terhadap matriks A maka
𝑛

(𝐝𝑘 , 𝐀 (∑ 𝛼𝑖 𝐝𝑖 )) = 𝛼𝑘 (𝐝𝑘 , 𝐀𝐝𝑘 ) = 0


𝑖=1
karena A matriks simetrik definit positif dan 𝐝𝑘 ≠ 0 maka (𝐝𝑘 , 𝐀𝐝𝑘 ) ≠ 0, jadi
𝛼𝑘 = 0 di mana 𝑘 = 1, 2, … , 𝑛. Karena 𝛼𝑘 = 0 berdasarkan (Definisi Kebebasan
Linear) maka 𝐝𝑖 adalah vektor-vektor yang bebas linear. Matriks simetrik definit
positif A, maka 𝐱 ∈ ℝ𝒏 memiliki solusi yang unik, misalkan diberikan nilai eigen
dari A adalah 𝜆𝑖 , 𝑖 = 1, 2, … , 𝑛, maka diperoleh
𝑛

𝐱 = ∑ 𝜆𝑖 𝐝𝑖 .
𝑖=1
Karena 𝐝𝑖 saling konjugat terhadap matriks simetrik definit positif A, maka
diperoleh
(𝐝𝒊 , 𝐀𝐱) = (𝜆𝑖 𝐝𝑖 , 𝐀𝐝𝑖 )
(𝐝𝒊 , 𝐀𝐱) = 𝜆𝑖 (𝐝𝑖 , 𝐀𝐝𝑖 )
(𝐝𝑖 , 𝐀𝐱)
𝜆𝑖 = .
(𝐝𝑖 , 𝐀𝐝𝑖 )

Terdapat beberapa cara dalam menentukan vektor yang saling konjugat, salah
satunya dengan menentukan semua vektor eigen dari suatu matriks. Tetapi
menggunakan vektor eigen kurang praktis, metode yang lebih mudah dalam
menentukan suatu vektor saling konjugat adalah dengan menggunakan formula
modifikasi vektor berarah metode gradien konjugat.
Pada Teorema 2, akan ditunjukkan vektor berarah konjugat untuk fungsi
kuadratik dengan A matriks definit positif.

Teorema 2
Misalkan titik 𝐱 𝑘+1 diperoleh setelah langkah ke 𝑘 + 1 ketika
1
meminimumkan fungsi kuadratik 𝑓(𝐱) = 2 𝐱 𝐓 𝐀𝐱 + 𝐁 𝐓 𝐱 + 𝐂. Jika vektor
𝐝1 , 𝐝2 , 𝐝3 , … , 𝐝𝑗 adalah vektor-vektor berarah yang saling conjugate terhadap A
matriks definit positif, maka 𝐝𝑗𝑇 ∇𝑓(𝐱 𝑘+1 ) = 0 untuk 𝑗 = 1, 2, 3, … , 𝑘.

Bukti:
Jika 𝑓 adalah fungsi kuadratik dan nilai 𝐱 𝑘+1 diperoleh setelah langkah ke 𝑘 + 1,
maka berdasarkan (Definisi Vektor Gradien) diperoleh
∇𝑓(𝐱 𝑘+1 ) = 𝐀𝐱 𝑘+1 + 𝐁
= 𝐀(𝐱 𝑘 + 𝛼𝑘 𝐝𝑘 ) + 𝐁
= 𝐀(𝐱 𝑘 ) + 𝐁 + (𝛼𝑘 𝐀𝐝𝑘 )
= ∇𝑓(𝐱 𝑘 ) + 𝛼𝑘 𝐀𝐝𝑘 .
Dari persamaan di atas, kalikan kedua ruas dengan 𝐝𝑗 akan diperoleh
8

𝐝𝑗𝑇 ∇𝑓(𝐱 𝑘+1 ) = 𝐝𝑗𝑇 (∇𝑓(𝐱 𝑘 ) + 𝛼𝑘 𝐀𝐝𝑘 )


= 𝐝𝑗𝑇 ∇𝑓(𝐱 𝑘 ) + 𝛼𝑘 𝐝𝑗𝑇 𝐀𝐝𝑘 .
Untuk menunjukkan 𝐝𝑗𝑇 ∇𝑓(𝐱 𝑘+1 ) = 0 diperlukan dua pemisahan yaitu saat 𝑗 < 𝑘
dan 𝑗 = 𝑘, dimana 𝑗 = 1,2, … , 𝑘.
(i) Saat 𝑗 < 𝑘
𝐝𝑗𝑇 ∇𝑓(𝐱 𝑘+1 ) = d𝑗𝑇 ∇𝑓(𝐱𝑗+1 ) + 𝛼𝑘 𝐝𝑗𝑇 𝐀𝐝𝑘
karena 𝛼𝑘 adalah panjang langkah sepanjang arah 𝐝𝐤 yang meminimumkan
nilai 𝑓 maka 𝐝𝑗𝑇 ∇𝑓(𝐱𝑗+1 ) = 0 dan karena vektor 𝐝𝟏 , 𝐝𝟐 , 𝐝𝟑 , … , 𝐝𝐤 adalah
vektor-vektor berarah yang saling konjugat terhadap matriks definit positif A
maka 𝐝𝑗𝑇 𝐀𝐝𝑘 = 0, ∀𝑗 ≠ 𝑘, sehingga diperoleh
𝐝𝑗𝑇 ∇𝑓(𝐱 𝑘+1 ) = 0 untuk 𝑗 = 1, 2, 3, … , 𝑘.

(ii) Saat 𝑗 = 𝑘
𝐝𝑗𝑇 ∇𝑓(𝐱 𝑘+1 ) = 0
karena sama dengan 𝐝𝑗𝑇 ∇𝑓(𝐱𝑗+1 ) saat 𝑗 < 𝑘.
Jadi terbukti 𝐝𝑗𝑇 ∇𝑓(𝐱 𝑘+1 ) = 0 untuk 𝑗 = 1, 2, 3, … , 𝑘.

Algoritme Metode Gradien Konjugat

Berikut ini diberikan algoritme metode gradien konjugat:


1. Masukan nilai awal 𝐱 0 ∈ ℝ𝑛 dan 0 < 𝜀 < 1, tentukan 𝑘 = 0 ;
2. Hitung 𝐝0 = −𝐠 0 = −∇𝑓(𝐱 0 ), jika 𝐠 0 = 0 maka berhenti ;
3. Hitung 𝛼𝑘+1 dari persamaan 𝐠 ′𝑘 (𝛼𝑘 ) = 0 dan 𝐠 𝑘 (𝛼𝑘 ) = 𝑓(𝐱 𝑘 + 𝛼𝑘 𝐝𝑘 ) ;
Tetapkan 𝐱 𝑘+1 = 𝐱 𝑘 + 𝛼𝑘 𝐝𝑘
dimana
−𝐠 𝑘 , 𝑘=1
𝐝𝑘 = {
−𝐠 𝑘 + 𝛽𝑘 𝐝𝑘−1 , 𝑘 ≥ 2,
dengan pendefinisian skalar 𝛽𝑘 yang berbeda-beda
𝐠 𝑇𝑘 𝐠 𝑘
𝛽𝑘𝐹𝑅 = 𝑇 (Gradien konjugat Fletcher-Reeves)
𝐠 𝑘−1 𝐠 𝑘−1
𝐠 𝑇𝑘 (𝐠 𝑘 − 𝐠 𝑘−1 )
𝛽𝑘𝐻𝑆 = (Gradien konjugat Hestenes-Stiefel)
(𝐠 𝑘 − 𝐠 𝑘−1 )𝑇 𝐝𝑘−1
𝐠 𝑇𝑘 (𝐠 𝑘 − 𝐠 𝑘−1 )
𝛽𝑘𝑃𝑅𝑃 = (Gradien konjugat Polak-Ribere-Polyak)
𝐠 𝑇𝑘−1 𝐠 𝑘−1
𝐠 𝑇𝑘 𝐠 𝑘
𝛽𝑘𝐷𝑌 = (Gradien konjugat Dai-Yuan)
(𝐠 𝑘 − 𝐠 𝑘−1 )𝑇 𝐝𝑘−1
9

4. Jika ‖𝐠(𝐱𝑘 )‖ ≤ 𝜀 maka berhenti;


5. 𝑘 = 𝑘 + 1 , kembali ke langkah 2.

Hasil Numerik Metode Gradien Konjugat

Fungsi yang digunakan adalah fungsi kuadrat sempurna. Jumlah variabel


yang digunakan adalah 2, 3, 4, dan 5. Vektor 𝐱 ∗ adalah random integer dengan batas
0
[-10, 10]. Dimulai dari titik awal 𝐱 0 = [ ] dan nilai toleransi = ɛ = 10-5.
0
Perbedaan waktu eksekusi untuk semua modifikasi vektor berarah metode
konjugat gradien Fletcher-Reeves, Polak-Ribere-Polyak, Hestenes-Stiefel, dan Dai-
Yuan dapat dilihat pada Tabel 1, Tabel 2, Tabel 3, dan Tabel 4. Perhitungan waktu
eksekusi (dalam milidetik) menggunakan android versi Lollipop 5.1.1 dan untuk
tiap kasus dilakukan lima kali pengulangan.

Tabel 1 Waktu eksekusi untuk fungsi dua variabel


Polak-Ribere-
Ulangan Fletcher-Reeves Hestenes-Stiefel Dai-Yuan
Polyak
1 0.195 0.207 0.182 0.196
2 0.198 0.201 0.176 0.180
3 0.210 0.206 0.171 0.189
4 0.194 0.218 0.189 0.179
5 0.174 0.193 0.196 0.234
Rata-rata 0.194 0.205 0.183 0.196

Tabel 2 Waktu eksekusi untuk fungsi tiga variabel


Polak-Ribere-
Ulangan Fletcher-Reeves Hestenes-Stiefel Dai-Yuan
Polyak
1 0.655 0.585 0.598 0.730
2 0.587 0.627 0.716 0.646
3 0.827 1.357 0.571 0.649
4 0.731 0.981 0.706 1.084
5 1.224 1.019 0.982 0.779
Rata-rata 0.805 0.914 0.715 0.778

Tabel 3 Waktu eksekusi untuk fungsi empat variabel


Polak-Ribere-
Ulangan Fletcher-Reeves Hestenes-Stiefel Dai-Yuan
Polyak
1 1.961 2.039 2.153 3.068
2 1.735 2.201 1.604 2.660
3 2.218 2.519 2.359 1.689
4 2.065 2.652 2.171 2.117
5 1.962 1.971 1.735 2.015
Rata-rata 1.988 2.276 2.004 2.309
10

Tabel 4 Waktu eksekusi untuk fungsi lima variabel


Polak-Ribere-
Ulangan Fletcher-Reeves Hestenes-Stiefel Dai-Yuan
Polyak
1 1.823 2.174 2.025 1.761
2 2.012 1.934 1.473 2.237
3 1.870 1.813 2.286 2.089
4 2.045 1.713 1.657 1.643
5 1.778 1.958 1.657 1.728
Rata-rata 1.906 1.918 1.819 1.892

Pada Tabel 1, 2, 3, dan 4 dapat dilihat bahwa keempat modifikasi metode


gradien konjugat mempunyai nilai waktu eksekusi yang berbeda-beda. Nilai waktu
eksekusi yang paling minimum untuk fungsi dua, tiga, dan lima variabel adalah
metode Hestenes-Stiefel, sedangkan untuk fungsi empat variabel adalah metode
Fletcher-Reeves. Karena adanya perbedaan waktu eksekusi tersebut, selanjutnya
dilakukan perhitungan nilai rata-rata untuk mempermudah dalam menganalisis
perbedaan waktu eksekusi dan jumlah iterasi semua modifikasi vektor berarah
metode gradien konjugat. Perbedan waktu eksekusi dan jumlah iterasi tersebut
dapat dilihat pada Tabel 5 dan Tabel 7.

Tabel 5 Rata-rata jumlah iterasi


Metode
Banyak
Variabel Fletcher- Polak-Ribere- Hestenes-
Dai-Yuan
Reeves Polyak Stiefel
2 2 2 2 2
3 11 11 11 11
4 24 28 19 23
5 25 24 19 23

Tabel 6 Rata-rata waktu eksekusi


Metode (milidetik)
Banyak
Variabel Fletcher- Polak-Ribere- Hestenes-
Dai-Yuan
Reeves Polyak Stiefel
2 0.194 0.205 0.183 0.196
3 0.805 0.914 0.715 0.778
4 1.988 2.276 2.004 2.309
5 1.906 1.918 1.819 1.892

Berikut merupakan grafik dari rata-rata jumlah iterasi dan waktu eksekusi
modifikasi vektor berarah metode gradien konjugat Fletcher-Reeves, Polak-Ribere-
Polyak, Hestenes-Stiefel, dan Dai-Yuan yang akan ditunjukkan pada Gambar 1 dan
Gambar 2.
11

30

25

BANYAK ITERASI
20

15

10

0
0 1 2 3 4 5 6
BANYAK VARIABEL

Fletcher-Reeves Polak-Ribere-Polyak Hestenes-Stiefel Dai-Yuan

Gambar 1 Jumlah iterasi masing-masing modifikasi metode


gradien konjugat.

2.5
WAKTU EKSEKUSI (MILIDETIK)

1.5

0.5

0
0 1 2 3 4 5 6
JUMLAH VARIABEL

Fletcher-Reeves Polak-Ribere-Polyak Hestenes-Stiefel Dai-Yuan

Gambar 2 Waktu eksekusi masing-masing modifikasi


metode gradien konjugat.

Pada Tabel 5 dan Gambar 1 dapat dilihat bahwa jumlah iterasi yang dilakukan
oleh keempat vektor berarah gradien konjugat memiliki nilai yang sama pada fungsi
dua dan fungsi tiga variabel. Hal ini disebabkan oleh jumlah variabel yang terlalu
sedikit. Berbeda dengan fungsi empat dan lima variabel, menunjukkan perbedaan
nilai yang cukup signifikan antarvektor berarah metode gradien konjugat. Begitu
pula dengan waktu iterasi yang diperlukan, pada Tabel 6 dan Gambar 2 terlihat
bahwa waktu eksekusi yang dibutuhkan untuk fungsi dua variabel dan tiga variabel
memiliki perbedaan waktu yang tidak terlalu jauh. Berbeda dengan fungsi empat
dan lima variabel yang memiliki perbedaan waktu yang cukup signifikan dari
keempat vektor berarah. Dari Gambar 1 dan Gambar 2, dapat dilihat bahwa vektor
berarah Hestenes-Stiefel memiliki nilai iterasi dan waktu eksekusi yang paling
minimum dibandingkan tiga vektor berarah lainnya.
12

Contoh Perhitungan Metode Gradien Konjugat

Pada contoh perhitungan ini fungsi yang digunakan adalah 𝑓(𝐱) = 2𝑥12 +
0
𝑥22 + 6𝑥1 + 8𝑥2 + 15, 𝐱 0 = [ ], dan 𝜀 = 0.01.
0
Contoh 1 Perhitungan metode gradien menggunakan metode analitik
 Mencari titik kandidat optimum,
4𝑥 + 6
∇𝑓(𝐱) = 0 ⇔ [ 1 ]=0
2𝑥2 + 8
sehingga
(𝑖) 4𝑥1 + 6 = 0 ⇔ 4𝑥1 = −6
6
⇔ 𝑥1 = −
4
⇔ 𝑥1 = −1.5
(𝑖𝑖) 2𝑥2 + 8 = 0 ⇔ 2𝑥2 = −8
8
⇔ 𝑥2 = −
2
⇔ 𝑥2 = −4
𝑥1 −1.5
Jadi 𝐱 ∗ = (𝑥 ) = ( ) merupakan titik kandidat optimum.
2 −4
 Cek titik kandidat yang memenuhi syarat optimum
4 0
H(𝐱 ∗ ) = ( ).
0 2
4 0
Misalkan H(𝐱 ∗ ) = A maka A = ( )
0 2
sehingga
4 0 −1.5
𝐱 ∗ 𝑻 𝐀𝐱 = (−1.5 −4) ( )( )
0 2 −4
= 41.
Karena 𝐱 ∗ 𝑻 𝐀𝐱 > 0 maka H(𝐱 ∗ ) adalah definit positif, sehingga
𝑥1 −1.5
𝐱 ∗ = (𝑥 ) = ( ) adalah minimum lokal dari fungsi 𝑓(𝐱).
2 −4

Contoh 2 Perhitungan metode gradien konjugat algoritma Fletcher-Reeves


0
Masukkan nilai 𝐱 𝟎 = [ ] dan 𝜀 = 0.01
0
Hitung
4𝑥 + 6
∇𝑓(𝐱) = [ 1 ]
2𝑥2 + 8
Iterasi 1:
k=0
6
∇𝑓(𝐱 𝟎 ) = [ ]
8
13

−6
𝐝0 = −∇𝑓(𝐱 𝟎 ) = [ ]
−8
𝐠 0 (𝛼) = 𝑓(𝐱 0 + 𝛼𝐝0 )
0 −6
= 𝑓 ([ ] + 𝛼 [ ])
0 −8
= 2(−6𝛼)2 + (−8𝛼)2 + 6(−6𝛼) + 8(−8𝛼) + 15
= 72𝛼 2 + 64𝛼 2 − 36𝛼 − 64𝛼 + 15 = 136𝛼 2 − 100𝛼 + 15
𝐠 ′0 (𝛼) = 0 ⇔ 272𝛼 − 100 = 0
100
⇔ 𝛼0 = 272 = 0.3676

𝐱1 = 𝐱 0 + 𝛼0 𝐝0
0 −6 −2.2056
= [ ] + 0.3676 [ ] = [ ]
0 −8 −2.9408
4(−2.2056) + 6 −2.8224
∇𝑓(𝐱1 ) = [ ]=[ ]
2(−2.9408) + 8 2.1184
‖∇𝑓(𝐱1 )‖ = √(−2.8224)2 + (2.1184)2 = 3.52896
‖∇𝑓(𝐱1 )‖ > ɛ, maka 𝑥1 belum memenuhi kriteria penghentian.

Iterasi 2:
k=1
−2.8224 𝑇 −2.8224
𝐠 𝑇𝑘
𝐠𝑘 [ ] [ ] 12.4536
𝛽𝑘𝐹𝑅 = = 2.1184 𝑇 2.1184 = = 0.124536
𝐠 𝑇𝑘−1
𝐠 𝑘−1 6 6 100
[ ] [ ]
8 8
−2.8224 −6 2.0752
𝐝1 = −∇𝑓(𝐱1 ) + 𝛽𝑘 𝐝0 = [ ] + 0.124536 [ ] = [ ]
2.1184 −8 −3.1147
−2.2056 2.0752
𝐠1 (𝛼) = 𝑓(𝐱1 + 𝛼𝐝𝟏 ) = 𝑓 ([ ]+𝛼[ ])
−2.9408 −3.1147
= 2(−2.2056 + 2.0752𝛼)2 + (−2.9408 − 3.1147𝛼)2
+6(−2.2056 + 2.0752𝛼) + 8(−2.9408 − 3.1147𝛼) + 15
= (8.6129 + 9.7014)𝛼 2 ± 18.3082 + 18.3194 + 12.451
−24.9176)𝛼 + (9.7393 + 8.6483 − 13.2336 − 23.5264 + 15)
= 18.3143𝛼 2 − 12.4552𝛼 − 3.3724
𝐠1′ (𝛼) = 0 ⟺ 36.6286𝛼 − 12.4522 = 0
12.4522
⟺ 𝛼1 = = 0.33996
36.6286
14

−2.2056 2.0752 −1.50012


𝐱 2 = 𝐱1 + 𝛼1 𝐝1 = [ ] + 0.33996 [ ]=[ ]
−2.9408 −3.1147 −3.9997
4𝑥 + 3 4(−1.50012) + 6 −0.00048
∇𝑓(𝐱 2 ) = [ 1 ]=[ ]=[ ]
2𝑥2 + 7 2(−3.9997) + 8 0.0006
‖∇𝑓(𝐱 2 )‖ = √(−0.00048)2 + (0.0006)2 = 0.0007684
‖∇𝑓(𝐱1 )‖ < ɛ, maka x memenuhi kriteria penghentian.
Jadi diperoleh hasil:
Jumlah Iterasi = 2
Nilai 𝑥1∗ = −1.50012
𝑥2∗ = −3.9997

Contoh 3 Perhitungan metode gradien konjugat Fletcher-Reeves menggunakan


aplikasi android
Diperoleh hasil:
Jumlah Iterasi = 2
Nilai 𝑥1∗ = −1.5
𝑥2∗ = −4.0

Gambar 3 Perhitungan metode gradien konjugat Fletcher-Reeves


menggunakan aplikasi android.
15

SIMPULAN

Metode gradien konjugat adalah salah satu teknik optimasi yang bersifat
iteratif yang dapat digunakan dalam menyelesaikan masalah optimasi tanpa kendala
skala besar. Salah satu sifat utama metode gradien konjugat adalah vektor-vektor
berarah yang saling konjugat. Hasil numerik menggunakan aplikasi android pada
penelitian ini menunjukkan bahwa modifikasi metode gradien konjugat Hestenes-
Stiefel dapat menemukan solusi dengan rata-rata waktu eksekusi yang lebih cepat
dan rata-rata jumlah iterasi yang lebih minimum dibandingkan dengan vektor
berarah lainnya. Pada masalah dua dan tiga variabel, perbedaan jumlah iterasi dan
waktu eksekusi tidak begitu terlihat perbedaannya. Sedangkan, pada masalah empat
dan lima variabel, perbedaan jumlah iterasi dan waktu eksekusi memiliki berbeda
nilai yang cukup jauh antar vektor berarah metode gradien konjugat.

DAFTAR PUSTAKA

Bartle RG, Sherbert DR. 1982. Introduction to Real Analysis. Second Edition. New
York (US): John Wiley and Sons.
Bazzara MS, Sherali HD, Shetty CM. 1993. Nonlinear Programing: Theory and
Applications. Singapore(SG): John Willey and Sons, Inc.
Chen YY. 2012. Global Convergence of a New Konjugat gradien with Wolfe Type
Line Search .Journal of Information and Computing Science 7(1): 67-71.
Dai YH, Yuan Y. 1999. A Nonlinear Conjugate Gradient Method with a Strong
Global Convergence Property. SIAM Journal on Optimization. 10(1):177-
82.doi:10.1137/S1052623497318992.
Fletcher R. 1987. Practical Methods of Optimization, Unconstrained
Optimization. New York: Wiley.
Fletcher R, Reeves C. 1964. Function Minimization by Conjugate Gradients. The
Computer Journal. 7(2):149-154.doi:10.1093/comjnl/7.2.149.
Hestenes MR, Stiefel EL. 1952. Methods of Conjugate Gradients for Solving
Linear Systems. Journal of Research of the National Bureau of Standards.
49(6): 409-432.
Klerk E, Roos C, Terlaky T. 2005. Optimization. Netherland: Delft University of
Technology.
Leon SJ. 1998. Linear Algebra with Applications. 5th ed. New Jersey (USA):
Prentice Hall.
Liu YL, Storey CS. 1991. Efficient Generalized Conjugate Gradient Algorithms,
Part 1: Theory. Journal of Optimization Theory and Applications.
69(1):129-137.doi:10.1007/BF00940464.
Peressini AL, Sullivan FE, Uhl JJ Jr. 1988. The Mathematics of Nonlinear
Programming. Spinger-Verlag, New York.
Polyak BT. 1969. The Conjugate Gradient Method in Extreme Problems. USSR
Computational Mathematics and Mathematical Physics. 9:94-
112.doi:10.1016/0041-5553(69)90035-4.
16

Snyman JA. 2005. Practical Mathematical Optimization: An Introduction to Basic


Optimization Theory and classical and New Gradient-Based Algorithms.
New York: Spinger.
Winston WL. 2004. Operations Research Applications and Algorithms. Ed ke-4.
New York (US): Duxbury.
Wungguli Djihad. 2015. Metode Steepest Descent dengan Ukuran Langkah Baru
untuk Pengoptimuman Nirkendala [tesis]. Bogor (ID): Institut Pertanian
Bogor.
17

Lampiran 1 Tampilan android (apk)


18

Lampiran 2 Metode gradien konjugat Fletcher-Reeves untuk fungsi dua


variabel

public void HitungFR2(View V) {

long startTime = System.nanoTime();

double x1 = Double.parseDouble(input6.getText().toString());
double x2 = Double.parseDouble(input7.getText().toString());
double tol = Double.parseDouble(input8.getText().toString());
double inputA = Double.parseDouble(input1.getText().toString());
double inputB = Double.parseDouble(input2.getText().toString());
double inputC = Double.parseDouble(input3.getText().toString());
double inputD = Double.parseDouble(input4.getText().toString());
double inputE = Double.parseDouble(input5.getText().toString());

LGM1 = d(x1);
dx3 = LGM1 * LGM1;
LGM2 = e(x2);
ex3 = LGM2 * LGM2;
z1 = Math.abs(Math.sqrt(dx3 + ex3));

dx1 = -LGM1;
ex2 = -LGM2;
a = (inputA * dx1 * dx1 + inputB * ex2 * ex2);
b = ((2 * dx1 * x1 * inputA) + (inputB * 2 * ex2 * x2) + (inputC * dx1) +
(inputD * ex2));
c = x1 * x1 * inputA + inputB * x2 * x2 + inputC * x1 + inputD * x2 + inputE;

lambda = -b / (2 * a);

y1 = x1 + lambda * (dx1);
y2 = x2 + lambda * (ex2);
x1 = y1;
x2 = y2;
LGM11 = d(x1);
dx3 = LGM11 * LGM11;
LGM22 = e(x2);
ex3 = LGM22 * LGM22;
z2 = Math.abs(Math.sqrt(dx3 + ex3));
k = k + 1;
i = tol;

while (z2 > i){

betta=(((LGM11*LGM11)+(LGM22*LGM22)))/((LGM1*LGM1)
+LGM2*LGM2);
19

dx1=-(LGM11)+(betta*-LGM1);
ex2=-(LGM22)+(betta*-LGM2);
//(LGM2*LGM2);
a = (inputA * dx1 * dx1 + inputB * ex2 * ex2);
b = ((2 * dx1 * x1 * inputA) + (inputB * 2 * ex2 * x2) + (inputC * dx1) +
(inputD * ex2));
c = x1 * x1 * inputA + inputB * x2 * x2 + inputC * x1 + inputD * x2 +
inputE;

if (a==0 && b==0) {


x1=x1;
x2=x2;
LGM1=LGM11;
LGM2=LGM22;
LGM11 = d(x1);
dx3 = LGM11 * LGM11;
LGM22 = e(x2);
ex3 = LGM22 * LGM22;
z1=z2;
z2 = Math.abs(Math.sqrt(dx3 + ex3));
k=k;
}
else {
lambda = -b / (2 * a);

y1 = x1 + lambda * (dx1);
y2 = x2 + lambda * (ex2);
x1 = y1;
x2 = y2;
LGM1=LGM11;
LGM2=LGM22;
LGM11 = d(x1);
dx3 = LGM11 * LGM11;
LGM22 = e(x2);
ex3 = LGM22 * LGM22;
z1=z2;
z2 = Math.abs(Math.sqrt(dx3 + ex3));
k = k + 1;
}
}

long endTime = System.nanoTime();


long totalTime = (endTime - startTime);
String totalTime2 = String.format("%.5f", totalTime / 1000000.0);

String hasilString1 = String.valueOf(k);


String hasilString2 = String.valueOf(x1);
String hasilString3 = String.valueOf(x2);
20

String hasilString4 = String.valueOf(totalTime2);

hasilk.setText(hasilString1);
hasilx1.setText(hasilString2);
hasilx2.setText(hasilString3);
hasilwaktu.setText(hasilString4);

Lampiran 3 Metode gradien konjugat Fletcher-Reeves untuk fungsi tiga


variabel

public void HitungFR3(View V) {

long startTime = System.nanoTime();

double x1 = Double.parseDouble(input8.getText().toString());
double x2 = Double.parseDouble(input9.getText().toString());
double x3 = Double.parseDouble(input10.getText().toString());
double inputA = Double.parseDouble(input1.getText().toString());
double inputB = Double.parseDouble(input2.getText().toString());
double inputD = Double.parseDouble(input3.getText().toString());
double inputE = Double.parseDouble(input4.getText().toString());
double inputF = Double.parseDouble(input5.getText().toString());
double inputG = Double.parseDouble(input6.getText().toString());
double inputH = Double.parseDouble(input7.getText().toString());
double tol = Double.parseDouble(input11.getText().toString());

LGM1 = d(x1);
dx3 = LGM1 * LGM1;
LGM2 = e(x2);
ex3 = LGM2 * LGM2;
LGM3 = g(x3);
gx3 = LGM3 * LGM3;
z1 = Math.abs(Math.sqrt(dx3 + ex3 + gx3));
i = tol;
dx1 = -LGM1;
ex2 = -LGM2;
gx3 = -LGM3;
b = -(((-inputE * dx1) - (inputF * ex2) - (inputG * gx3) - (2 * inputA * dx1 *
x1) - (2 * inputB * ex2 * x2) - (2 * inputD * gx3 * x3)));
a = ((inputA * dx1 * dx1) + (inputB * ex2 * ex2) + (inputD * gx3 * gx3));
c = (inputH + (inputE * x1) + (inputA * x1 * x1) + (inputF * x2) + (inputB *
x2 * x2) + (inputG * x3) + (inputD * x3 * x3));

lambda = -b / (2 * a);

y1 = x1 + lambda * (dx1);
21

y2 = x2 + lambda * (ex2);
y3 = x3 + lambda * (gx3);
x1 = y1;
x2 = y2;
x3 = y3;
LGM11 = d(x1);
dx3 = LGM11 * LGM11;
LGM22 = e(x2);
ex3 = LGM22 * LGM22;
LGM33 = g(x3);
gx3 = LGM33 * LGM33;
z2 = Math.abs(Math.sqrt(dx3 + ex3 + gx3));//nih normnya cek
k = k + 1;

while (z2 >i){

betta=(((LGM11*LGM11)+(LGM22*LGM22)+(LGM33*LGM33)
))/((LGM3*LGM3)+(LGM1*LGM1)+LGM2*LGM2);
dx1=-(LGM11)+(betta*-LGM1);
ex2=-(LGM22)+(betta*-LGM2);
gx3=-(LGM33)+(betta*-LGM3);
b = -(((-inputE * dx1) - (inputF * ex2) - (inputG * gx3) - (2 * inputA * dx1
* x1) - (2 * inputB * ex2 * x2) - (2 * inputD * gx3 * x3)));
a = ((inputA * dx1 * dx1) + (inputB * ex2 * ex2) + (inputD * gx3 * gx3));
c = (inputH + (inputE * x1) + (inputA * x1 * x1) + (inputF * x2) + (inputB
* x2 * x2) + (inputG * x3) + (inputD * x3 * x3));
if (a==0 && b==0) {
x1=x1;
x2=x2;
x3=x3;
LGM1=LGM11;
LGM2=LGM22;
LGM3=LGM33;
LGM11 = d(x1);
dx3 = LGM11 * LGM11;
LGM22 = e(x2);
ex3 = LGM22 * LGM22;
LGM33 = g(x3);
gx3 = LGM33 * LGM33;

z1=z2;
z2 = Math.abs(Math.sqrt(dx3 + ex3));
k=k;
}
else {
lambda = -b / (2 * a);

y1 = x1 + lambda * (dx1);
22

y2 = x2 + lambda * (ex2);
y3 = x3 + lambda * (gx3);
x1 = y1;
x2 = y2;
x3 = y3;
LGM1 = LGM11;
LGM2 = LGM22;
LGM3 = LGM33;
LGM11 = d(x1);
dx3 = LGM11 * LGM11;
LGM22 = e(x2);
ex3 = LGM22 * LGM22;
LGM33 = g(x3);
gx3 = LGM33 * LGM33;
z2 = Math.abs(Math.sqrt(dx3 + ex3 + gx3));//nih normnya cek
k = k + 1;
}
}

long endTime = System.nanoTime();


long totalTime = (endTime - startTime);
String totalTime2 = String.format("%.5f", totalTime / 1000000.0);

String hasilString1 = String.valueOf(k);


String hasilString2 = String.valueOf(x1);
String hasilString3 = String.valueOf(x2);
String hasilString4 = String.valueOf(x3);
String hasilString5 = String.valueOf(totalTime2);

hasilk.setText(hasilString1);
hasilx1.setText(hasilString2);
hasilx2.setText(hasilString3);
hasilx3.setText(hasilString4);
hasilwaktu.setText(hasilString5);
}

Lampiran 4 Metode gradien konjugat Fletcher-Reeves untuk fungsi empat dan


lima variabel

public void HitungFR5(View V) {

long startTime = System.nanoTime();

double x1 = Double.parseDouble(input12.getText().toString());
double x2 = Double.parseDouble(input13.getText().toString());
double x3 = Double.parseDouble(input14.getText().toString());
double x4 = Double.parseDouble(input15.getText().toString());
double x5 = Double.parseDouble(input16.getText().toString());
23

double inputA = Double.parseDouble(input1.getText().toString());


double inputB = Double.parseDouble(input2.getText().toString());
double inputU = Double.parseDouble(input3.getText().toString());
double inputD = Double.parseDouble(input4.getText().toString());
double inputE = Double.parseDouble(input5.getText().toString());
double inputF = Double.parseDouble(input6.getText().toString());
double inputG = Double.parseDouble(input7.getText().toString());
double inputH = Double.parseDouble(input8.getText().toString());
double inputP = Double.parseDouble(input9.getText().toString());
double inputO = Double.parseDouble(input10.getText().toString());
double inputR = Double.parseDouble(input11.getText().toString());
double tol = Double.parseDouble(input17.getText().toString());

LGM1 = d(x1);
dx3 = LGM1 * LGM1;
LGM2 = e(x2);
ex3 = LGM2 * LGM2;
LGM3 = g(x3);
gx3 = LGM3 * LGM3;
LGM4 = h(x4);
hx4 = LGM4*LGM4;
LGM5 = j(x5);
jx5 = LGM5*LGM5;
z1 = Math.abs(Math.sqrt(dx3 + ex3 + gx3 + hx4 + jx5));
i = tol;

dx1 = -LGM1;
ex2 = -LGM2;
gx3 = -LGM3;
hx4 = -LGM4;
jx5 = -LGM5;
b =
(inputF*dx1+inputG*ex2+inputH*gx3+inputP*hx4+inputO*jx5+2
*inputA*dx1*x1+2*inputB*ex2*x2+2*inputU*gx3*x3+2*inputD
*hx4*x4+2*inputE*jx5*x5);
a = ((inputA * dx1 * dx1) + (inputB * ex2 * ex2) + (inputU * gx3 *
gx3)+(inputD*hx4*hx4)+(inputE*jx5*jx5));
c = (inputR + (inputF * x1) + (inputA * x1 * x1) + (inputG * x2) + (inputB *
x2 * x2) + (inputH * x3) + (inputU * x3 *
x3)+(inputP*x4)+(inputD*x4*x4)+(inputO*x5)+(inputE*x5*x5));

lambda = -b / (2 * a);

y1 = x1 + lambda * (dx1);
y2 = x2 + lambda * (ex2);
y3 = x3 + lambda * (gx3);
y4 = x4 + lambda * (hx4);
24

y5 = x5 + lambda * (jx5);
x1 = y1;
x2 = y2;
x3 = y3;
x4 = y4;
x5 = y5;
LGM11 = d(x1);
dx3 = LGM11 * LGM11;
LGM22 = e(x2);
ex3 = LGM22 * LGM22;
LGM33 = g(x3);
gx3 = LGM33 * LGM33;
LGM44 = h(x4);
hx4 = LGM44*LGM44;
LGM55 = j(x5);
jx5 = LGM55*LGM55;
z2 = Math.abs(Math.sqrt(dx3 + ex3 + gx3 + hx4 + jx5));//nih normnya cek
k = k + 1;
while (z2 >i){

betta=(((LGM44*LGM44)+(LGM55*LGM55)+(LGM11*LGM11)
+(LGM22*LGM22)+(LGM33*LGM33)))/(((LGM3*LGM3)+(LG
M1*LGM1)+LGM2*LGM2)+(LGM4*LGM4)+(LGM5*LGM5));
dx1=-(LGM11)+(betta*-LGM1);
ex2=-(LGM22)+(betta*-LGM2);
gx3=-(LGM33)+(betta*-LGM3);
hx4=-(LGM44)+(betta*-LGM4);
jx5=-(LGM55)+(betta*-LGM5);

b =
(inputF*dx1+inputG*ex2+inputH*gx3+inputP*hx4+inputO*jx5+2
*inputA*dx1*x1+2*inputB*ex2*x2+2*inputU*gx3*x3+2*inputD
*hx4*x4+2*inputE*jx5*x5);
a = ((inputA * dx1 * dx1) + (inputB * ex2 * ex2) + (inputU * gx3 *
gx3)+(inputD*hx4*hx4)+(inputE*jx5*jx5));
c = (inputR + (inputF * x1) + (inputA * x1 * x1) + (inputG * x2) + (inputB
* x2 * x2) + (inputH * x3) + (inputU * x3 *
x3)+(inputP*x4)+(inputD*x4*x4)+(inputO*x5)+(inputE*x5*x5));

if (a==0 && b==0) {


x1=x1;
x2=x2;
x3=x3;
x4=x4;
x5=x5;
LGM1=LGM11;
LGM2=LGM22;
LGM3=LGM33;
25

LGM4=LGM44;
LGM5=LGM55;
LGM11 = d(x1);
dx3 = LGM11 * LGM11;
LGM22 = e(x2);
ex3 = LGM22 * LGM22;
LGM33 = g(x3);
gx3 = LGM33 * LGM33;
LGM44 = h(x4);
hx4 = LGM44*LGM44;
LGM55 = j(x5);
jx5 = LGM55*LGM55;
z1=z2;
z2 = Math.abs(Math.sqrt(dx3 + ex3));
k=k;
}
else {

lambda = -b / (2 * a);

y1 = x1 + lambda * (dx1);
y2 = x2 + lambda * (ex2);
y3 = x3 + lambda * (gx3);
y4 = x4 + lambda * (hx4);
y5 = x5 + lambda * (jx5);
x1 = y1;
x2 = y2;
x3 = y3;
x4 = y4;
x5 = y5;

LGM1=LGM11;
LGM2=LGM22;
LGM3=LGM33;
LGM4=LGM44;
LGM5=LGM55;

LGM11 = d(x1);
dx3 = LGM11 * LGM11;
LGM22 = e(x2);
ex3 = LGM22 * LGM22;
LGM33 = g(x3);
gx3 = LGM33 * LGM33;
LGM44 = h(x4);
hx4 = LGM44*LGM44;
LGM55 = j(x5);
jx5 = LGM55*LGM55;
26

z2 = Math.abs(Math.sqrt(dx3 + ex3 + gx3 + hx4 + jx5));//nih normnya


cek
k = k + 1;
}
}

long endTime = System.nanoTime();


long totalTime = (endTime - startTime);
String totalTime2 = String.format("%.5f", totalTime / 1000000.0);

String hasilString1 = String.valueOf(k);


String hasilString2 = String.valueOf(x1);
String hasilString3 = String.valueOf(x2);
String hasilString4 = String.valueOf(x3);
String hasilString5 = String.valueOf(x4);
String hasilString6 = String.valueOf(x5);
String hasilString7 = String.valueOf(totalTime2);

hasilk.setText(hasilString1);
hasilx1.setText(hasilString2);
hasilx2.setText(hasilString3);
hasilx3.setText(hasilString4);
hasilx4.setText(hasilString5);
hasilx5.setText(hasilString6);
hasilwaktu.setText(hasilString7);
}
27

RIWAYAT HIDUP

Penulis dilahirkan di Karawang pada tanggal 10 September 1993 sebagai


anak kedua dari lima bersaudara, dari pasangan Supriatna dan Tri Padmi. Tahun
2011 penulis lulus dari SMAN 5 Karawang dan pada tahun yang sama penulis lulus
seleksi masuk Institut Pertanian Bogor (IPB) melalui jalur Seleksi Nasional Masuk
Perguruan Tinggi Negeri (SNMPTN) IPB dan diterima di Departemen Matematika,
Fakultas Matematika dan Ilmu Pengetahuan Alam.
Selama masa perkuliahan, penulis aktif pada lembaga kemahasiswaan, yaitu
staf Departemen Pengembangan Sumber Daya Mahasiswa Gumatika IPB periode
2012/2013 dan periode 2013/2014. Penulis juga aktif dalam beberapa kegiatan
kepanitiaan, antara lain MPD Matematika IPB, IPB Mathematics Challenge,
Matematika Ria, Training and Talkshow Gumatika, dan Math Camp. Selain itu,
penulis juga pernah aktif sebagai anggota Organisasi Mahasiswa Daerah (OMDA)
Karawang dan anggota Gentra Kaheman IPB.

Anda mungkin juga menyukai