PENDEKATAN ALGORITMA PEMROGRAMAN DINAMIK
DALAM MENYELESAIKAN PERSOALAN KNAPSACK 0/1
SKRIPSI
SRI RAHAYU
060823001
PROGRAM STUDI SARJANA MATEMATIKA
DEPARTEMEN MATEMATIKA
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
UNIVERSITAS SUMATERA UTARA
PENDEKATAN ALGORITMA PEMROGRAMAN DINAMIK
DALAM MENYELESAIKAN PERSOALAN KNAPSACK 0/1
SKRIPSI
Diajukan untuk melengkapi tugas dan memenuhi syarat mencapai gelar Sarjana Sains
SRI RAHAYU
060823001
PROGRAM STUDI SARJANA MATEMATIKA
DEPARTEMEN MATEMATIKA
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
UNIVERSITAS SUMATERA UTARA
PERSETUJUAN
Judul : PENDEKATAN ALGORITMA PEMROGRAMAN
DINAMIK DALAM MENYELESAIKAN PERSOALAN KNAPSACK 0/1
Kategori : SKRIPSI
Nama : SRI RAHAYU
Nomor Induk Mahasiswa : 060823001
Program Studi : SARJANA (S1) MATEMATIKA
Departemen : MATEMATIKA
Fakultas : MATEMATIKA DAN ILMU PENGETAHUAN
ALAM (MIPA) UNIVERSITAS SUMATERA UTARA
Diluluskan di
Medan, Juli 2010
Komisi Pembimbing :
Pembimbing 2 Pembimbing 1
Drs. Marwan Harahap, M.Eng Drs. Bambang Irawan, M.Sc NIP. 19461225 197403 1 001,- NIP. 19470421 197603 1 001,-
Diketahui / Disetujui Oleh:
Departemen Matematika FMIPA USU Ketua,
Dr. Saib Suwilo, M.Sc
PERNYATAAN
PENDEKATAN ALGORITMA PEMROGRAMAN DINAMIK DALAM MENYELESAIKAN PERSOALAN KNAPSACK 0/1
SKRIPSI
Saya mengakui bahwa skripsi ini adalah hasil kerja saya sendiri, kecuali beberapa kutipan dan ringkasan yang masing-masing disebutkan sumbernya.
Medan, Juli 2010
PENGHARGAAN
Puji dan syukur penulis panjatkan kepada Allah SWT, dengan limpahan dan karunia-Nya kertas kajian ini berhasil diselesaikan dalam waktu yang telah ditetapkan.
ABSTRAK
ABSTRACT
DAFTAR ISI
Halaman
Persetujuan ii
Pernyataan iii
Penghargaan iv
Abstrak v
Abstract vi
Daftar Isi vii
Daftar Tabel viii
Daftar Gambar ix
Bab 1 Pendahuluan 1
1.1 Latar Belakang 1
1.2 Perumusan Masalah 4
1.3 Batasan Masalah 4
1.4 Tinjauan Pustaka 4
1.5 Tujuan Penelitian 6
1.6 Kontribusi Penelitian 6
1.7 Metode Penelitian 7
Bab 2 Landasan Teori 8
2.1 Konsep Dasar Graph 8
2.2 Graph Berlabel 11
2.3 Lintasan Minimum 14
2.4 Lintasan Terpendek 15
2.5 Pemrograman Linier (Linear Programming) 16
2.6 Pemrograman Bilangan Bulat (Integer Programming) 17
2.7 Knapsack 19
2.8 Pemrograman Dinamik (Dynamic Programming) 21 2.8.1 Konsep Dasar Dalam Pemrograman Dinamik 21 2.8.2 Analisa Algoritma Pemrograman Dinamik 25 2.8.3 Dua Pendekatan Algoritma Pemrograman Dinamik 26
2.8.4 Algoritma Pemrograman Dinamik 26
2.9 Visual Basic 6.0 27
Bab 3 Pembahasan 29
3.1 Lintasan Terpendek 29
3.2 Analisis Knapsack 29
3.3 Analisis Pemrograman Dinamik 36
3.4 Flowchart Pemrograman Dinamik 43
Bab 4 Kesimpulan dan Saran 47
4.1 Kesimpulan 47
4.2 Saran 48
DAFTAR TABEL
Halaman
Tabel 2.1 Biaya Pemasangan Jaringan Listrik 12
Tabel 3.1 Enumerasi Lengkap 34
Tabel 3.2 Penentuan Nilai Minimum untuk Tahap-1 pada x1 40
Tabel 3.3 Penentuan Nilai Minimum untuk Tahap-2 pada x2 40
Tabel 3.4 Penentuan Nilai Minimum untuk Tahap-2 pada x3 41
DAFTAR GAMBAR
Halaman
Gambar 2.1. Graph 5 titik dan 6 sisi 9
Gambar 2.2. Graph dengan 6 titik dan 10 sisi 9
Gambar 2.3. Digraph G 11
Gambar 3.4. Graph Berlabel Jaringan Listrik 8 Kota 13 Gambar 2.5. Lintasan Terpendek / Shortest Path (garis tebal) 15
Gambar 2.6. Tahapan fungsi transisi 22
Gambar 2.7. Tahapan baku 23
Gambar 2.8. Return dan Transition Function 24
Gambar 3.1. Representasi graph dalam penyaluran air bersih 31 Gambar 3.2. Lintasan Terpendek dengan nilai biaya dan waktu 38 Gambar 3.3 Lintasan Terpendek dengan Nilai Biaya dan Waktu 39 Gambar.3.4 Ilustrasi Lintasan Pencarian Lintasan Terpendek 42 Gambar 3.5. Flowchart Algoritma Dynamic Programming 43
Gambar 3.6. Form Menu Utama 44
Gambar 3.7. Form Entri Data Graph 45
ABSTRAK
ABSTRACT
BAB 1
PENDAHULUAN
1.1 Latar Belakang
Masalah dalam menentukan lintasan terpendek di antara titik tertentu dalam suatu graph
telah banyak menarik perhatian. Persoalan dirumuskan sebagai kasus khusus dan
algoritma efisien yang tersedia untuk menghitung lintasan terpendek dan biaya minimum.
Lintasan terpendek yang diperoleh akan meminimumkan fungsi linear yang khusus
(fungsi) dari lintasan seperti biaya dan jarak (waktu). Persoalan ini akan menjadi salah
satu kegunaan dari lintasan dengan waktu diminimumkan terhadap biaya yang
dianggarkan.
Beberapa masalah dalam menentukan lintasan terpendek dalam suatu graph antara
lain: masalah transportasi, jaringan komunikasi, serta masalah pengiriman barang tidak
bisa lepas dari permasalahan jarak (waktu) dan tentunya juga masalah biaya.
Permasalahan dituntut untuk meminimisasi jarak (waktu) ke tujuan yaitu dengan memilih
lintasan tersingkat dengan biaya yang telah dianggarkan sehingga dapat dicapai hasil
yang optimal. Sebagai contoh masalah transportasi, pilihan lintasan perjalanan dari Kota
A (sumber) ke Kota J (tujuan), untuk sampai ke Kota J ada beberapa lintasan berbeda
yang dapat dilalui dan juga biaya perjalanan yang berbeda, permasalahan yang terjadi
adalah lintasan terpendek mana yang harus dipilih yang sesuai dengan biaya yang
dianggarkan untuk perjalanan tersebut agar hasil yang optimal diperoleh.
Permasalahan ini dapat dicontohkan seperti penjualan beberapa jenis peralatan
rumah tangga oleh pedagang keliling dengan menggunakan gerobak ataupun alat
untuk tiap jenisnya dan tiap jenis barang memiliki berat dan keuntungan. Tidak semua
jenis keperluan rumah tangga yang akan dijual oleh pedagang keliling tersebut dapat
dimasukkan ke dalam alat pengangkut. Tentu saja dikarenakan alat pengangkutnya
memiliki kapasitas maksimum sehingga si pedagang tidak bisa memasukkan seluruh
dagangannya. Pedagang tersebut harus memilih barang-barang mana saja yang harus
diangkut dengan pertimbangan berat dari barang yang dibawanya tidak melebihi kapasitas
maksimum gerobak dan memaksimalkan keuntungan dari barang-barang yang di bawa.
Terdapat beberapa variasi Persoalan Knapsack:
1. Fractional Knapsack Problem
Barang boleh dibawa sebagian saja (unit dalam pecahan).
2. 0-1 Knapsack Problem
Setiap barang hanya tersedia satu unit, diambil atau tinggalkan.
3. Bounded Knapsack Problem
Setiap barang tersedia sebanyak N unit (jumlah barang terbatas).
4. Unbounded Knapsack Problem
Setiap barang tersedia lebih dari satu unit, jumlahnya tidak terbatas.
Pada prinsipnya persoalan Knapsack ini adalah persoalan optimisasi sehingga
Algoritma harus mencari sebuah solusi paling optimal sebagai jawabannya.
Masalah khusus dari persoalan graph ini adalah mendapatkan suatu lintasan
dengan jarak minimum yang memenuhi terhadap (subject to) kendala anggaran
(budgetary). Kemungkinan masalah lainnya adalah minimimasi biaya yang harus
memenuhi kendala jarak (waktu). Andaikan diberikan sebuah graph G dengan titik -
N = 1,2,…,i dan garis F = 1,2,…,j serta a(x,y) dan b(x,y) adalah jarak (waktu) dan biaya.
yang dihubungkan dengan tiap garis (i,j) dalam graph G. Masalahnya adalah menentukan
lintasan terpendek dari titik 1 (sumber) ke titik n (tujuan) dalam graph G yang memenuhi
terhadap kendala biaya yang dianggarkan. Jarak (waktu) dan biaya dari lintasan adalah
Menentukan lintasan terpendek yang memenuhi kendala biaya yang dianggarkan pada
suatu graph adalah merupakan salah satu tipe persoalan Integer Knapsack, yaitu memilih
bobot minimum yang akan dimasukkan ke dalam Knapsack yang mempunyai bobot
maksimum tertentu. Persoalan ini disebut Integer Knapsack karena tiap objek hanya memiliki
dua status yaitu terpilih atau tidak. Untuk persoalanan Knapsack pada suatu graph, bobot
minimum yang dipilih adalah merupakan lintasan terpendek yang harus dilewati dari titik
sumber ke titik tujuan. Sedangkan biaya adalah sebagai kendala yang harus dipenuhi dalam
menentukan lintasan terpendek.
Permasalahan Combinatorial Optimization dikenal sebagai NP Hard Problem.
Persoalan Knapsack tidak dapat diselesaikan dalam waktu singkat hanya dapat
diselesaikan dengan waktu yang lama disebabkan karena banyak data yang digunakan
sebagai data input. Semakin besar data yang digunakan, semakin lama waktu yang
dibutuhkan suatu Algoritma untuk menyelesaikannya.
Banyak Algoritma yang dapat digunakan untuk menyelesaikan persoalan
Knapsack ini, misalnya Algoritma Brute Force, Branch and Bound, Greedy, Genetika dan
lain-lain. Dalam tulisan ini, penulis membahas mengenai persoalan Knapsack dengan
menggunakan Algoritma Pemrograman Dinamik.
Pemrograman Dinamik merupakan sebuah metode pemecahan masalah dengan
cara menguraikan solusi menjadi sekumpulan langkah (step) atau tahapan (stage)
sedemikian sehingga solusi dari persoalan dapat dipandang dari serangkaian keputusan
yang saling berkaitan. Penemu dan orang yang bertanggung jawab atas kepopuleran
Pemrograman Dinamik adalah Richard Bellman (1957).
Pada Pemrograman Dinamik, rangkaian keputusan optimal yang dibuat dengan
menggunakan prinsip optimalitas. Prinsip optimalitas: jika solusi total optimal, maka
bagian solusi sampai tahap ke-k juga optimal. Dengan prinsip optimalitas ini dijamin
bahwa pengambilan keputusan pada suatu tahap adalah keputusan yang benar untuk
kecil dari sebuah persoalan dalam setiap langkahnya, kemudian menyelesaikan persoalan
yang lebih kecil tersebut dan menggunakan solusi hasil penyelesaian ini untuk
ditambahkan kembali ke bagian persoalan dalam langkah berikutnya.
Pemrograman Dinamik mencoba untuk memberikan solusi yang memiliki
konsekuensi yang ditimbulkan dari pengambilan keputusan pada suatu tahap.
Pemrograman Dinamik mampu mengurangi pengenumerasian keputusan yang tidak
mengarah ke solusi. Penerapan pendekatan Pemrograman Dinamik telah banyak
diperlihatkan mampu utnuk menyelesaikan aneka masalah seperti: alokasi, muatan
(Knapsack), capital budgeting, pengawasan persediaan, dan lain-lain.
1.2 Perumusan Masalah
Masalah yang dibahas adalah bagaimana menentukan lintasan terpendek yang merupakan
persoalan Knapsack dari titik sumber ke titik tujuan pada suatu graph dengan pendekatan
Algoritma Pemrograman Dinamik.
1.3 Batasan Masalah
Dalam tulisan ini, masalah akan dibatasi dalam menyelesaikan Persoalan Knapsack pada
lintasan terpendek dengan mencari solusi optimal dari lintasan terpendek dengan cara
meminimumkan biaya dan waktu melalui pendekatan Algoritma Pemrograman Dinamik
Maju.
1.4Tinjauan Pustaka
Untuk maksud dan tujuan penelitian ini, penulis memanfaatkan buku–buku sebagai
Stuart E. Dreyfus dan Averii M. Law (1997) dalam bukunya “The Art And Theory
Of Dynamic Programming”, memuat bahwa ada beberapa pendekatan yang digunakan
dalam Algoritma Pemrograman Dinamik, salah satunya yaitu Pemrograman Dinamik
Maju (forward atau up-down). Misalkan: x1, x2, ..., xn menyatakan varibel keputusan yang
harus dibuat masing-masing untuk tahap 1, 2, ..., n. Pemrograman Dinamik Maju adalah
program dinamis yang bergerak mulai dari tahap 1, terus maju ke tahap 2, 3 dan
seterusnya sampai tahap n. Urutan variabel keputusan adalah x1, x2, …, xn. Tugas akhir ini
menggunakan Pemrograman Dinamik Maju.
Pemrograman Dinamik memiliki karakteristik sebagai berikut:
1. Persoalan dapat dibagi menjadi beberapa tahap (stage), yang pada setiap tahap
hanya diambil satu keputusan yang optimal.
2. Masing-masing tahap terdiri dari sejumlah status (state) yang berhubungan
dengan tahap tersebut.
3. Hasil keputusan yang diambil pada tahap ditransformasikan dari status yang
bersangkutan ke status berikutnya pada tahap berikutnya.
4. Jumlah pada suatu tahap bergantung pada jarak tahap-tahap sebelumnya dan
meningkat secara teratur dengan bertambahnya jumlah tahapan.
5. Keputusan terbaik pada suatu tahap bersifat independen terhadap keputusan
yang dilakukan tahap sebelumnya.
6. Adanya hubungan rekursif yang mengidentifikasikan keputusan terbaik untuk
setiap status pada tahap k memberikan keputusan terbaik utnuk tahap
sebelumnya.
7. Prinsip optimalitas berlaku pada persoalan ini.
Martello. S. and Toth. P. (1990) dalam bukunya “Knapsack Problem, Algorithms
and Computer Implementations“, memuat tentang Algoritma Program 0-1 merupakan
salah satu tipe persoalan Knapsack dalam keadaan tertentu dapat terjadi, masing-masing
keadaan mempunyai sebuah nilai yang dihubungkan dengan besarannya. Secara nyata
0-1 atau biner, Persoalan Knapsack yaitu masukan dari n item dan suatu Knapsack,
dengan persamaan sebagai berikut:
Pilih subset dari item sebagai:
maksimumkan z =
1 jdengan kendala
nj 1
c,
xj = 0 atau 1, j N {1,….,n}
untuk
0 1
j
x
Keterangan:
pj = keuntungan dari item j,
wj = bobot dari item j,
c = kapasitas dari Knapsack
1.5Tujuan Penelitian
Tujuan dalam penelitian ini adalah untuk memperlihatkan dan menerangkan suatu konsep
algoritma untuk penyelesaian dalam menentukan lintasan terpendek sebagai contoh
persoalan Knapsack.
1.6Kontribusi Penelitian
Dengan adanya penelitian menggunakan Algoritma Pemrograman Dinamik diharapkan
dapat dikembangkan dan bermanfaat sebagai salah satu cara untuk memecahkan
untuk objek j memenuhi
Lainnya
pj xj
persoalan Knapsack agar menghasilkan solusi optimal dalam menyelesaikan lintasan
terpendek.
1.7Metode Penelitian.
Metode penelitian yang digunakan dalam tulisan ini adalah sebagai berikut:
1. Menguraikan teori dasar graph dan terminologi-terminologi graph yang menunjang
terhadap pembahasan.
2. Menguraikan tentang konsep lintasan terpendek dan Persoalan Knapsack
3. Menguraikan tentang Algoritma Pemrograman Dinamik.
4. Menerapkan pendekatan Algoritma Pemrograman Dinamik ke dalam sebuah contoh
BAB 2
LANDASAN TEORI
2.1. Konsep Dasar Graph
Sebelum sampai pada definisi masalah lintasan terpendek, terlebih dahulu pada bagian ini
akan diuraikan mengenai konsep-konsep dasar dari model graph dan representasinya
dalam memodelkan masalah lintasan terpendek.
Definisi 2.1. Graph didefinisikan sebagai pasangan himpunan (V, E), dengan V adalah himpunan titik (vertex) dan E adalah himpunan sisi (edge) (Chacra et al, 1979, hal:5).
Secara umum graph dapat digambarkan dengan suatu diagram dengan titik
ditunjukkan sebagai titik yang dinotasikan dengan vi, i = 1, 2, …, n dan sisi digambarkan
dengan sebuah garis lurus atau garis lengkung yang menghubungkan dua buah titik (vi,vj)
dan dinotasikan dengan ek. Sebagai ilustrasi dapat dilihat Gambar 2.1 yaitu suatu graph
Gambar 2.1. Graph 5 titik dan 6 sisi
Definisi 2.2. Loop adalah sisi yang berawal dan berakhir pada titik yang sama, sedangkan sisi paralel (edge paralel) adalah dua sisi atau lebih berbeda yang menghubungkan dua
buah titik vi dan vj yang sama.
Gambar 2.2. Graph dengan 6 titik dan 10 sisi
Pada Gambar 2.2 dapat dilihat bahwa e4 adalah sebuah loop dan e1 serta e2 adalah
dua buah sisi yang paralel.
Definisi 2.3. Graph sederhana adalah graph yang tidak memuat loop dan sisi-sisi paralel. Misalkan V = (v1, v2, v3, v4, v5) dan E=(e1, e2, e3, e4, e5, e6), maka G=(V,E) adalah graph
sederhana yang dapat dilihat pada Gambar 2.1.
Definisi 2.4. Suatu edge ek dalam suatu graph G dengan titik-titik ujung vi dan vj disebut
adjacent. Jika kedua edge tersebut incident pada suatu titik persekutuan, maka dua buah
edge ek dan em disebut saling adjacent.
Pada Gambar 2.2 dapat dilihat bahwa e8, e7, e9 adalah tiga buah sisi yang incident
dengan v6, sedangkan e5 dan e7 adalah adjacent.
Definisi 2.5. Degree dari sbuah titik vi dalam graph G adalah jumlah sisi yang incident
dengan vi. Dengan loop dihitung dua kali. Degree dari sebuah titik vi biasanya dinotasikan
dengan d(vi).
Pada Gambar 2.2 dapat dilihat bahwa d(v1) = 2, d(v2) = 4, d(v3) = 5, d(v4) = 2,
d(v5) =2, d(v5) = 3, dan d(v6) = 3.
Definisi 2.6. Suatu walk dalam sebuah graph G(V,E) adalah suatu barisan berhingga dari titik dan sisi secara bergantian yang dimulai dan diakhiri dengan titik sehingga setiap sisi
incident dengan titik sebelum dan sesudahnya, di mana sebuah sisi hanya dilalui satu kali.
Di dalam suatu walk pada sebuah graph dapat terjadi bahwa satu titik dilalui lebih dari
satu kali.
Definisi 2.7. Suatu Graph Berarah G terdiri dari himpunan titik V(G): {v1, v2, …},
himpunan sisi E(G): {e1, e2, …}, dan suatu fungsi yang menghubungkan setiap sisi
dalam E(G) ke suatu pasangan berurutan titik (vi,vj).
Jika ek = (vi,vj) adalah suatu sisi dalam G, maka vi disebut titik awal ek dan vj
Berikut ini Gambar 2.3.
Gambar 2.3. Digraph G
2.2. Graph Berlabel
Hubungan antar titik dalam graph perlu diperjelas. Hubungan tidak cukup hanya
menunjukkan titik mana yang berhubungan langsung, tetapi juga seberapa kuat hubungan
itu. Titik graph menyatakan kota-kota yang ada di daerah tersebut. Sisi-sisi dalam graph
menyatakan jalan yang menghubungkan kota-kota tersebut.
Informasi tentang peta daerah perlu diperjelas dengan mencantumkan jarak antara
2 kota yang berhubungan. Informasi tentang jarak dibutuhkan karena dalam graph, letak
titik dan panjang sisinya tidak menyatakan jarak 2 kota yang sebenarnya. Jadi setiap garis
dalam graph berhubungan dengan suatu label yang menyatakan bobot garis tersebut.
Definisi 2.8. Graph Berlabel (labelled graph) adalah suatu graph tanpa sisi paralel di mana setiap sisinya berhubungan dengan suatu bilangan riil tak negatif yang menyatakan
Matriks yang bersesuaian dengan graph berlabel G adalah adjacency. Jika
matriks A = (aij) dengan aij = nilai sisi yang menghubungkan titik vi ke titik vj maka aij = , dan aij = 0 jika i = j.
Contoh:
Dalam suatu propinsi, ada 8 kota (v1, v2, ..., v8) yang akan dihubungkan dengan jaringan
listrik. Biaya pemasangan jaringan listrik yang mungkin dibuat antar 2 kota sebagai
berikut:
Tabel 2.1 Biaya Pemasangan Jaringan Listrik
Sisi Kota yang dihubungkan Biaya per satuan
e4 v2 - v3 3 e7 v4 - v6 4 e2 v1 - v7 5 e8 v3 - v4 5 e9 v3 - v5 5 e1 v1 - v2 15 e3 v1 - v4 15 e10 v6 - v8 15 e5 v7 - v8 15 e11 v5 - v6 15 e6 v6 - v7 18
a. Graph berlabel untuk menyatakan jaringan listrik di 8 kota dapat digambarkan pada
Gambar 2.3. Angka dalam kurung menyatakan nilai sisi yang bersangkutan. Nilai
Gambar 2.4. Graph Berlabel Jaringan Listrik 8 Kota
b. Adjacency Matriks untuk menyatakan graph berlabel pada Gambar 2.3. adalah
matriks A = (aij) dengan aij = biaya titik vi dengan vj. Untuk sisi yang
menghubungkan titik vi dengan vj.
Keterangan:
= tidak ada sisi yang menghubungkan titik vi dengan vj
0 = Untuk i sama dengan j
Misalkan G adalah sebuah graph berarah. Sebuah sisi berarah e = (vi,vj)
dikatakan mulai pada titik awal vi dan berakhir di titik akhir vj, vi dan vj dikatakan
adjacent.
v1 v2 V3 v4 v5 v6 v7 v8
v1 0 15 ∞ 15 ∞ ∞ 5 ∞
v2 15 0 3 ∞ ∞ ∞ ∞ ∞
v3 ∞ 3 0 5 5 ∞ ∞ ∞
A= v4 15 ∞ 5 0 ∞ 4 ∞ ∞
v5 ∞ ∞ 5 ∞ 0 15 ∞ ∞
v6 ∞ ∞ ∞ 4 15 0 18 15
v7 5 ∞ ∞ ∞ ∞ 18 0 15
2.3. Lintasan Minimum
Salah satu aplikasi graph berarah berlabel yang sering dipakai adalah mencari lintasan
terpendek diantara 2 titik. Apabila masalahnya adalah mencari lintasan terpendek tetap
dapat digunakan dengan cara mengganti nilai sisi.
Definisi 2.9. Misalkan G adalah suatu graph, untuk v dan w adalah titik dalam G. suatu Walk dari v ke w adalah barisan titik dan sisi secara berselang-seling, diawali dari titik v
dan diakhiri pada titik w. Walk dengan panjang n dari v ke w ditulis : v0 e1 v1 e2 v2 … vn-2
en vn dengn v0 = v: vn = w; vi-1 dan vi adalah titik-titik ujung sisi ei.
Lintasan dengan panjang n dari v ke w adalah walk dari v ke w yang semua
sisinya berbeda. Lintasan dari v ke w dituliskan sebagai v = v0 e1 v1 e2 v2 … vn-1 en vn = w
dengan eiej untuk i j.
Penulisan berikutnya akan dipergunakan notasi: vi vj, A = {v1 v2, v2 v3, ... }
Definisi 2.10. Lintasan tertutup adalah suatu barisan sisi
n i ii e e
e , ,...,
2
1 sedemikian rupa
sehingga titik terminal j i
e berimpit dengan titik awal
) 1 (j i
e untuk 1 jk1.
Pada Gambar 2.2 terdapat:
a. Pada titik v1 e1 v2 e3 v3 e4 v3 e5 v4 semua sisi berbeda (
, , , 3 4
1 e e
e dan e ) masing-masing muncul sekali. Ada titik yang berulang (5 v muncul 3
2 kali). Titik awal dan titik akhir tidak sama dengan titik awal = v1 dan titik akhir =
4
v , Barisan ini merupakan lintasan dari v1 v4 dengan panjang 4.
b. Pada titik v1 e1 v2 e3 v3 e5 v4 e5 v3 e6 v5 ada sisi yang
muncul lebih dari sekali, yaitu e (muncul 2 kali) berarti barisan tersebut merupakan 5
2.4. Lintasan Terpendek (Shortest Path)
Setiap lintasan dalam digraph mempunyai nilai yang dihubungkan dengan nilai path
tersebut, yang nilainya adalah jumlah dari nilai sisi lintasan tersebut. Dari ukuran dasar
ini dapat dirumuskan masalah seperti mencari lintasan terpendek antara dua titik dan
meminimumkan biaya.
Banyak bidang penerapan mensyaratkan untuk menentukan lintasan terpendek
berarah dari asal ke tujuan di dalam suatu distribusi aliran berarah. Algoritma yang
diberikan dapat dimodifikasi dengan mudah untuk menghadapi lintasan berarah pada
setiap iterasinya.
Suatu versi yang lebih umum dari masalah lintasan terpendek adalah menentukan
lintasan terpendek dari sembarang titik menuju ke setiap titik lainnya. Pilihan lainnya
adalah membuang kendala tak negatif bagi ”jarak”. Suatu kendala lain dapat juga
diberlakukan dalam suatu masalah lintasan terpendek.
Definisi 2.11. Lintasan terpendek antara dua titik dari s ke t dalam jaringan adalah lintasan graph berarah sederhana dari s ke t dengan syarat tidak ada lintasan lain yang
memiliki nilai terendah.
Contoh.
Gambar 2.5. Lintasan Terpendek (Shortest path) (garis tebal) 2
3
5 2 x1
5 x8
1 x6
3 x3
x2
x4
1 1
x5
x7
3 2 1
Pada Gambar 2.5 dapat dilihat bahwa v berada pada titik 1, 2, 3, 4, 5 dan x1, x2, x3,
x4, x5, x6, x7, x8 merupakan e (sisi). Sisi merepresentasikan saluran dengan kapasitas
tertentu (contohnya :air) dapat dialirkan melalui saluran. Sedangkan titik
merepresentasikan persimpangan saluran. air mengalir melalui titik pada titik yang
dilalui, lintasan terpendek dari titik pada Gambar 2.5 adalah P = {1 4,4 5}
dengan kapasitas 4.
2.5 Pemrograman Linier (Linear Programming)
Pemrograman Linier adalah suatu bentuk dari pemrograman matematika. Ini adalah suatu
kasus khusus dari Pemrograman Linier untuk semua (atau beberapa) variabel dibatasi
sebagai bilangan cacah tak negatif. Untuk semua variabel dibatasi sebagai bilangan cacah,
persoalannya disebut persoalan program bilangan cacah murni, dan kalau beberapa
variabel tertentu dibatasi sebagai bilangan cacah campuran. Suatu bentuk khusus dari
program bilangan cacah ialah suatu kasus di mana variabel dibatasi harus berharga nol
atau satu. Kalau variabel dibatasi seperti ini, maka persoalannya disebut persoalan
Pemrograman (0/1).
Perumusan Pemrograman Linier dapat membantu prosedur penyelesaian lebih
efisien. Berikut ini adalah bentuk umum Pemrograman Linier:
Minimumkan c1x1c2x2 ...cnxn ………...(1)
dengan kendala 1 1 2 12 1
11x a x ... a x b
a n n ………...(2)
2 2
2 22 1
21x a x ... a x b
a n n
. . n n nn n
n x a x a x b
a 1 1 2 2 ...
0 ,..., , 2
1 x xn
Pada Pemrograman Linier ini, x1,x2,....,xn mewakili keputusan variabel yang
tidak diketahui; c1,c2,....,cn adalah biaya koefisien; b1,b2,....,bn adalah nilai di samping
kanan; dan aij, i1 sampai m dan j 1 sampai n , dinamakan koefisien teknologi.
Pernyataan (1) dinamakan fungsi objektif; (2) dinamakan kendala; dan (3) adalah
kendala tidak negatif. Beberapa penyelesaian memenuhi semua kendala, dinamakan
feasible solution.
Pada perumusan ini, kendala ditulis dalam bentuk persamaan. Umumnya, kendala
Pemrograman Linier mempunyai relasi atau tetapi selalu dapat diubah dalam
persamaan dengan penjumlahan slack variabel. Fungsi objektif (1) juga dapat
diekpresikan sebagai maksimum sebagai pengganti minimum.
Penulisan matematika tersebut, dapat dirumuskan menjadi:
Minimumkan
n
j j jx c 1
dengan kendala
n j
i j ijx b a
1
, i1,2,....,n
, 0
j
x j1,2,....,n
2.6 Pemrograman Bilangan Bulat (Integer Programming)
Salah satu asumsi teknik Pemrograman Linier adalah divisibility atau fractionality.
Dengan kata lain, setiap variabel model dapat terjadi pada semua nilai non negatif, suatu
nilai solusi yang kontinu. Dalam situasi keputusan tertentu, asumsi ini tidak realistik dan
Definisi 2.12. Pemrograman Bilangan Bulat adalah suatu Pemrograman Linier dengan tambahan persyaratan bahwa semua atau beberapa variabel bernilai bulat tidak negatif,
tetapi tidak perlu bahwa parameter model juga bernilai bulat.
Ada banyak kasus dalam masalah Pemrograman Bilangan Bulat yang membatasi
variabel model bernilai nol atau satu. Dalam kasus demikian, persoalan lintasan hanya
memiliki dua pilihan yaitu masuk atau keluar dari jaringan. Untuk variabel ini bernilai
satu, persoalan masuk, untuk variabel bernilai nol, persoalan keluar.
Dalam masalah Pemrograman Bilangan Bulat, untuk setiap persoalan yang
mengharapkan semua variabel basis bernilai integer (bulat positif atau nol), dinamakan
pure(all) integer programming. Untuk setiap persoalan yang hanya mengharapkan
variabel-variabel tertentu bernilai integer, dinamakan mixed integer programming. Untuk
setiap persoalan yang hanya mengharapkan nilai nol atau satu untuk variabelnya,
dinamakan zero one integer programming.
Walaupun persoalan umum Pemrograman Linier 0/1 dapat diselesaikan dengan
Cutting Plane Algorithm atau Branch-and-Bound. Balas mengembangkan suatu algoritma
enumerative yang efisien dan menarik untuk meyelesaikan persoalan ini. Sangat singkat
sebagai dasar Integer NonLinear Programming. Fungsi digunakan untuk menyamaratakan kesalahan metode untuk menyelesaikan persoalan All Integer
Programming dan Mixed-Integer NonLinear Programming.
Penyelesaian Pemrograman Bilangan Bulat seperti Pemrograman Linier, dengan
Minimumkan
m j ij ij m i x c 1 1Kendala
m j m k ki ij x x 1 1 1 0 1 untuk untuk untuk m i i 1 1 1 0 ij
x i, j1,2,...,m
2.7 Knapsack
Algoritma Pemrograman 0/1 merupakan salah satu tipe persoalan Knapsack dengan
keadaan tertentu terjadi, masing-masing keadaan mempunyai sebuah nilai yang
dihubungkan dengan besarannya. Secara nyata bahwa solusi optimal dari persoalan
Knapsack akan menunjukkan kemungkinan yang terbaik.
Pada masalah ini akan terdorong untuk menyelesaikan suatu persoalan dalam
menentukan lintasan terpendek pada suatu graph dengan kendala biaya dan waktu atau
jarak sehingga menghasilkan solusi yang optimal. Pendekatan sederhana dapat
dimasukkan ke dalam program komputer untuk memeriksa semua harga 0/1 yang
mungkin, dipilih yang terbaik yang memenuhi kendala.
Contoh. Persoalan Knapsack
Seorang pendaki gunung ingin membawa semua peralatan yang ia perlukan dalam
satu kantong (sack) saja, Misalkan ada sejumlah n peralatan yang diperlukan, tetapi berat
seluruhnya tidak boleh melebihi b kg. Misalkan jenis peralatan ialah xj dan,
Berdasarkan keterangan tersebut, persoalan dapat dirumuskan sebagai berikut:
Maksimumkan f c1x1 c2x2 ...cnxn
dengan kendala b x a x a x
a1 1 2 2 .... n n
x1x2,...xn 0 atau 1
Persoalan ini merupakan persoalan Knapsack sebagai persoalan (0/1).
Definisi 2.13. 0/1 atau biner, persoalan Knapsack yaitu masukkan dari n item dan suatu Knapsack,
Pilih subset dari item sebagai:
Maksimumkan
1 j j jx p z
dengan kendala
n
j j jx c w 1
,
j
x = 0 atau 1, jN{1,...,n}
Untuk 0 1 j x Lainnya
untuk objek j
Keterangan:
j
p = keuntungan dari item j,
j
w = bobot dari item j,
c = kapasitas dari Knapsack.
2.8 Pemrograman Dinamik (Dynamic Programming)
Pemrograman Dinamik adalah teknik manajemen sain yang diaplikasikan kepada
persoalan yang melibatkan keputusan berurutan yang saling berkaitan. Program ini
dikembangkan oleh Richard Bellman dan G. B Dantzig pada tahun 1940–1950. Sebagai
sebuah konsep, Pemrograman Dinamik lebih luwes dibanding program optimasi lainnya.
Aplikasi Pemrograman Dinamik lebih luwes dibanding program–program optimasi
lainnya. Aplikasi Pemrograman Dinamik sudah terbukti baik pada pengelolaan
persediaan, jaringan, penjadwalan kerja utnuk karyawan, pengendalian produksi,
perencanaan penjualan dan bidang lainnya.
Pemrograman Dinamik adalah metode pemecahan masalah dengan cara
menguraikan solusi menjadi sekumpulan langkah (step) atau tahapan (stage) sedemikian
sehingga solusi dari persoalan dapat dipandang dari serangkaian keputusan yang saling
berkaitan.
Pada penyelesaian persoalan dengan metode Pemrograman Dinamik ini terdapat
sejumlah berhingga pilihan yang mungkin, solusi pada setiap tahap dibangun dari hasil
solusi tahap sebelumnya, penulis menggunakan optimasi dan kendala untuk membatasi
sejumlah pilihan yang harus dipertimbangkan pada suatu tahap.
2.8.1 Konsep Dasar Dalam Pemrograman Dinamik
a. Dekomposisi
Persoalan Pemrograman Dinamik dapat dipecah menjadi sub persoalan atau tahapan
yang lebih kecil dan berurutan. Setiap tahap juga sebagai titik keputusan. Setiap
keputusan yang dibuat pada suatu tahap akan mempengaruhi keputusan-keputusan
b. Status
Status adalah kondisi awal (Sn) dan kondisi akhir (Sn-1) pada setiap tahap tersebut
keputusan dibuat (Dn). Status akhir pada setiap tahap tergantung kepada status awal
dan keputusan yang dibuat pada tahap yang bersangkutan. Status akhir pada suatu
tahap merupakan input bagi tahap berikutnya.
c. Variabel Keputusan dan Hasil
Keputusan yang dibuat pada setiap tahap (Dn) merupakan keputusan yang
berorientasi kepada return yang diakibatkannya (Rn/n), tingkat maksimal atau minimal.
d. Fungsi Transisi
Fungsi transisi menjelaskan secara pasti tahap-tahap yang saling berhubungan. Fungsi
ini berbentuk fungsi hubungan antar status pada setiap tahap yang berurutan. Fungsi
transisi secara umum berbentuk: Sn-1 = Sn – Dn, di mana Sn-1 = status pada tahap
n-1 atau status akhir pada tahap-n. Sn adalah status awal pada tahap-n.
[image:35.612.168.480.483.595.2]Komponen pada setiap tahap dapat digambarkan sebagai berikut:
e. Optimasi Tahap
Optimasi tahap dalam Pemrograman Dinamik adalah menemukan keputusan optimal
pada setiap tahap dari berbagai kemungkinan nilai status inputnya.
Fungsi umum dari keputusan optimal adalah:
Fn(Sn, Dn) = return pada tahap-n dari nilai status input Sn, dan keputusan Dn.
Fn*(Sn) = return optimal pada tahap-n dari nilai input status Sn.
f. Fungsi Rekursif
Fungsi rekursif biasanya digunakan berbagai program komputer, untuk setiap nilai
sebuah variabel pada fungsi itu merupakan nilai kumulatif dari nilai variael tersebut
pada tahap sebelumnya. Pada Pemrograman Dinamik, fungsi umum dituliskan
sebagai: fn(Sn, Dn) = Rn + fn-1*(S-1, Dn-1)
Prosedur optimasi diawali dari tahap awal menuju tahap akhir (forward).
Karakteristik program dinamis adalah:
a. Persoalan dapat dipisahkan menjadi beberapa tahap (stages), untuk setiap tahap
[image:36.612.174.492.460.583.2]membutuhkan keputusan kebijakan yang baku dan saling berhubungan.
Gambar 2.7 Tahapan Baku
b. Setiap tahap memiliki sejumlah status (state). Secara umum, sekumpulan status ini
merupakan berbagai kemungkinan yang timbul dari sistem persoalannya. Status
ini memberikan informasi yang dibutuhkan setiap keputusan dan dampaknya pada
c. Setiap keputusan kebijakan yang dibuat pada suatu tahap, status pada tahap
tersebut ditransformasi ke dalam status yang berkaitan pada tahap berikutnya.
Hubungan antar status pada tahap yang berurutan bisa bersifat deterministik atau
probabilistik.
Pada persoalan dengan n-tahap, ada 2 (dua) input, yaitu: (1) state pada tahap-n
(Sn) dan variabel keputusan (Xn). Sedangkan outputnya adalah: (1) return atau
akibat dari setiap Xn yang dipilih, fn(s,Xn) dan (2) status baru yang menjadi input
pada tahap berikutnya (Sn-1). Hubungan antara Xn dan fn(s,Xn) ditemukan oleh
return function. Sedang hubungan antar status pada tahap tertentu ditentukan oleh
[image:37.612.157.478.335.476.2]transition function
Gambar 2.8. Return dan Transition Function
d. Solusi pada Pemrograman Dinamik berprinsip kepada optimalitas yang
dikembangkan oleh Bellman.
e. Keputusan pada tahap berikutnya bersifat independen terhadap keputusan
sebelumnya. Untuk menyelesaikan persoalan Pemrograman Dinamik, dimulai dari
solusi awal pada suatu tahap dan secara berurutan menuju tahap berikutnya
f. Solusi optimal yang dihasilkan pada setiap tahap berprinsip kepada hubungan
dalam bentuk fungsi rekursif (recursion relationship). Secara umum bentuk fungsi
rekursif adalah:
Fn*(Sn) = max/min {fn(Sn, Xn)}
Untuk setiap fn*(Sn) = hasil optimal dari keputusan pada tahap-n.
2.8.2 Analisa Algoritma Pemrograman Dinamik
Pemrograman Dinamik adalah metode pemecahan masalah dengan cara menguraikan
solusi menjadi sekumpulan langkah (step) atau tahapan (stage) sedemikian sehingga
solusi dari persoalan dapat dipandang dari serangkaian keputusan yang saling berkaitan.
Pada penyelesaian persoalan dengan Pemrograman Dinamik terdapat sejumlah
berhingga pilihan yang mungkin. Solusi pada setiap tahap dibangun dari hasil solusi tahap
sebelumnya, penulis menggunakan persyaratan optimasi dan kendala untuk membatasi
sejumlah pilihan yang harus dipertimbangkan pada suatu tahap.
Pada Pemrograman Dinamik, rangkaian keputusan yang optimal dibuat dengan
menggunakan Prinsip Optimalitas. Prinsip Optimalitas: jika solusi total optimal, maka
bagian solusi sampai tahap ke-k juga optimal. Prinsip optimalitas berarti bahwa jika
penulis bekerja dari tahap k ke tahap k + 1, penulis dapat menggunakan hasil optimal dari
tahap k tanpa harus kembali ke tahap awal, ongkos pada tahap k+1 = (ongkos yang
dihasilakan pada tahap k) + (ongkos dari tahap k ke tahap k +1). Dengan prinsip
optimalitas ini dijamin bahwa pengembalian keputusan pada suatu tahap adalah
2.8.3 Dua Pendekatan Algoritma Pemrograman Dinamik
Dua pendekatan yang digunakan dalam Pemrograman Dinamik yaitu: maju (forward atau
up-down) dan mundur (backward atau bottom up). Misalkan x1, x2, x3, …, xn menyatakan
variabel keputusan yang harus dibuat masing-masing untuk tahap 1, 2, …, n, yaitu:
1. Pemrograman Dinamik maju. Pemrograman Dinamik bergerak mulai dari tahap 1,
terus maju ke tahap 2, 3, dan seterusnya sampai tahap n, urutan variabel keputusan
adalah x1, x2, x3, …, xn. Penulis disini menggunakan Program Dinamik Maju.
2. Pemrograman Dinamik mundur. Pemrograman Dinamik bergerak mulai dari tahap n,
terus mundur ke tahap n-1, n-2, dan seterusnya sampai tahap 1, urutan variabel
keputusan adalah xn, xn-1, xn-2, …, x1.
Langkah-langkah Pengembangan Algoritma Pemrograman Dinamik:
1. Karakteristik struktur solusi optimal.
2. Definisikan secara rekursif nilai solusi optimal.
3. Hitung nilai solusi optimal secara maju atau mundur.
4. Konstruksi solusi optimal.
2.8.4 Algoritma Pemrograman Dinamik
Algoritma Pemrograman Dinamik adalah sebagai berikut:
Langkah 0 (inisialisasi):
Inisialisasi si 0 dan di mai untuk i1,2,...,n
Langkah 1:
a. Isi s dengan 1 (karena titik a adalah titik asal lintasan terpendek, jadi sudah a
pasti terpilih).
Langkah 2, 3, … , n-1:
a. Cari j sedemikian sehingga sj 0 dan dj min
d1,d2,...,dn
b. Isi sj dengan 1
c. Perbarui d , untuk i i1,2,3,....,n dengan: di(baru)min
di(lama),dj mji
2.9 Visual Basic 6.0
Visual Basic adalah bahasa pemrograman yang digunakan untuk membuat aplikasi
Windows yang berbasis grafis (GUI-Graphical User Interface). Visual Basic merupakan
even–driven programming (pemrograman terkendali kejadian), artinya program
menunggu sampai adanya respon dari pemakai berupa even atau kejadian tertentu
(tombol diklik, menu pilih, dan lain-lain). Ketika even terdeteksi, kode yang
berhubungan dengan event (prosedur event) akan dijalankan.
Berikut ini adalah poin-poin terpenting dalam sejarah perkembangan Visual Basic
sebagai berikut:
a. Visual Basic pertama kali diperkenalkan tahun 1991 yaitu program Visual Basic
untuk DOS dan untuk Windows.
b. Visual Basic 3.0 dirilis tahun 1993.
c. Visual Basic 4.0 dirilis pada akhir 1995 (tambahan dukungan untuk aplikasi 32 bit.
d. Visual Basic 5.0 dirilis pada tahun 1997.
e. Visual Basic terbaru adalah Versi 6.0 yang dirilis pada akhir tahun 1998.
Pada umumnya Microsoft selaku pembuat Visual Basic membuat 3 (tiga) edisi
Visual Basic, yaitu:
a. Standard Edition merupakan produk pasar.
b. Profesional Edition yang berisi tambahan Microsoft Jet Data Acces Esngine
c. Enterprise Edition adalah edisi Client-Server.
Visual Basic selain disebut sebagai sebuah bahasa pemrograman, juga sering
disebut sebagai sarana untuk menghasilkan program-program aplikasi berbasis Windows.
Beberapa manfaat dari Visual Basic adalah:
1. Mudah dalam membuat program aplikasi berbasis Windows.
2. Memiliki compiler handal yang dapat menguji program (debugging) serta dapat
menghasilkan program akhir berakhiran EXE yang bersifat executable atau dapat
langsung dijalankan.
3. Memiliki beberapa tambahan instruksi atau perintah Wizard. Wizard adalah sarana
yang mempermudah di dalam pembuatan aplikasi dengan mengotomatisasi
tugas-tugas tertentu.
4. Sarana akses data yang lebih cepat dan handal untuk membuat aplikasi database
BAB 3
PEMBAHASAN
3.1 Lintasan Terpendek
Andaikan diberikan sebuah graph G dalam tiap sisi
e ,i ej dihubungkan dengan titik
v ,i vj mewakili panjang dari sisi. Dalam beberapa hal, panjang sebenarnya mewakili biaya atau beberapa nilai lainnya. Panjang dari lintasan adalah menentukan panjangjumlah dari masing-masing sisi yang terdiri dari lintasan. Untuk 2 titik s dan t dalam G,
ada beberapa lintasan dari s dan t. Masalah lintasan terpendek meliputi pencarian lintasan
dari s ke t yang mempunyai lintasan terpendek dan biaya termurah.
Pada persoalan ini akan terdorong untuk menyelesaikan suatu persoalan untuk
menentukan lintasan terpendek dan biaya termurah dalam suatu daerah yang terdiri atas
beberapa kota dengan mengimplementasikannya ke dalam persoalan Knapsack yang
merupakan salah satu persoalan Pemrograman 0/1.
3.2 Analisis Knapsack
Persoalan Knapsack ini dapat dirumuskan secara matematika dengan memberi nilai pada
objek dari 1 sampai n dan memperkenalkan suatu vektor dari variabel biner
j n
0 1 j x
Untuk pj merupakan ukuran dari kelayakan yang diberikan oleh objek j,wj
adalah besarannya dan c adalah besaran dari Knapsack, masalahnya akan terpilih, di
antara semua vektor biner x
01 yang akan memenuhi kendala:
n j j jx c
w 1 , 0 j
x atau 1 jN
1,...,n
di mana salah satu fungsi objektif yang dimaksimalkan adalah
n j j jx p z 1Contoh Persoalan lintasan terpendek diimplementasikan ke dalam Knapsack
Suatu aliran adalah sebuah perjalanan objek dari suatu tempat ke tempat lain
dalam suatu jaringan kerja, seperti penyaluran air bersih pada saluran pipa. Banyak
masalah penting yang perlu diperhatikan pada aliran dalam jaringan kerja, seperti
menimimumkan jumlah materi yang akan disalurkan dari suatu pipa ke pipa lain, dan
menentukan biaya penyaluran yang paling minimum untuk mengirimkan sejumlah objek
dari sumber persediaan ke tujuan, atau mencari jalan terpendek pada pengiriman objek
dalam suatu sistem. Berikut ini adalah representasi graph pada penyaluran air bersih: untuk objek j memenuhi
Gambar 3.1 Representasi graph dalam penyaluran air bersih
Salah satu pendekatan yang dapat digunakan untuk menyelesaikan persoalan ini adalah:
Cara Enumerasi
Persoalan ini adalah persoalan program integer, yang dapat dimasukkan ke dalam
persoalan Knapsack.
Minimumkan
m j ij ij m i x c 1 1
dengan kendala
m j m k ki ij x x 1 1 1 0 1 m i i i 1 1
atau m
0
ij
x atau 1
0
ij
x i, j 1,2,....,m
cij = Besaran dari Knapsack cij
Karena persoalan Knapsack untuk mencari persoalan 0 dan 1, dan kendala di atas xij 0
atau 1, persoalan ini dinamakan persoalan Knapsack. untuk untuk untuk 2 3 5 2 x1
5 x8
1 x6
yaitu:
Minimumkan Z =
5 1 5 1 j ij ij i x c =
5 1 5 5 4 4 3 3 2 2 1 1 i i i i i i i i i ii x c x c x c x c x c =
5 1 5 1 5 1 5 1 5 5 4 4 5 1 3 3 2 2 1 1i i i i
i i i i i i i i i i
i x c x c x c x c x
c = 55 55 45 45 35 35 25 25 15 15 54 54 44 44 34 34 24 24 14 14 53 53 43 43 33 33 23 23 13 13 52 52 42 42 32 32 22 22 12 12 51 51 41 41 31 31 21 21 11 11 x c x c x c x c x c x c x c x c x c x c x c x c x c x c x c x c x c x c x c x c x c x c x c x c x c
Dari hasil substitusi di atas, diperoleh:
Minimumkan
Z = c12x12 c32x32 c13x13 c43x43 c14x14 c25x25 c35x35 c45x45
dengan kendala:
5 1 5 1 1 0 1 j k ki ij x x m i i i 1 1 0 ijx atau 1
0
ij
x i.j1,2,...,m
Titik 1
x11 x12 x13 x14 x15
x11x21x31 x41 x51
1Titik 2
x21x22 x23 x24 x25
x12 x22 x32 x42 x52
0Titik 3
x31x32 x33 x34 x35
x13 x23 x33 x43 x53
0Titik 4
x41x42 x43 x44 x45
x14 x24 x34 x44 x54
0Titik 5
x51 x52 x53 x54 x55
x15 x25 x35 x45 x55
1 untukdengan kendala:
Titik 1 x12 x13x14 1
Titik 2 x25 x12 x32 0
Titik 3 x32 x35 x13 x43 0
Titik 4 x43 x45 x14 0
Titik 5 x25 x35 x45 1
Setelah disubstitusikan:
Minimunkan
Z = c12x12 c13x13 c14x14 c25x25 c32x32 c35x35 c43x43 c45x45
dengan kendala:
Titik 1 x12 x13 x14 1
Titik 2 x25 x12 x32 0
Titik 3 x32 x35 x13 x43 0
Titik 4 x43 x45 x14 0
Titik 5 x25 x35 x45 1
Lalu masukkan biaya masing-masing
Minimumkan
Z = 2x12x2 3x3 x4 4x5 x6 3x7 5x8
dengan kendala:
Titik 1 x1x2 x3 1
Titik 2 x8 x1 x5 0
Titik 3 x5 x7 x2 x4 0
Titik 4 x4 x6 x3 0
0 , , , , , ,
, 2 3 4 5 6 7 8
1 x x x x x x x
x atau 1
Model ini dapat diselesaikan dengan metode Branch and Bound dengan cara
menambahkan delapan kendala berikut untuk menggantikan kendala
0 , , , , , ,
, 2 3 4 5 6 7 8
1 x x x x x x x
x atau 1. Ke delapan kendala ini adalah:
1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 2 3 4 5 6 7 8
1 x x x x x x x
x
Cara lain untuk menyelesaikan masalah ini secara sederhana adalah dengan
complete enumeration. Dengan cara ini solusi yang tak memenuhi diabaikan dan solusi
yang memenuhi dievaluasi untuk dipilih yang terbaik.
Contoh kasus tersebut terdapat 8 variabel, sehingga ada 256 kemungkinan yang layak.
[image:47.612.104.511.367.706.2]Evaluasi semua kemungkinan ini adalah:
Tabel. 3.1. Enumerasi Lengkap
Kemungkinan ke x1 x2 x3 x4 x5 x6 x7 x8 Kelayakan Nilai Z
1 0 0 0 0 0 0 0 0 - 0
2 0 0 0 0 0 0 0 1 - 5
3 0 0 0 0 0 0 1 0 - 3
4 0 0 1 0 0 1 0 0 Ya 4
5 0 0 0 0 1 0 0 0 - 4
6 0 0 0 1 0 0 0 0 - 1
7 0 1 0 0 0 0 1 0 Ya 5
8 0 1 0 0 0 0 0 0 - 2
9 1 0 0 0 0 0 0 0 - 2
11 0 1 1 0 0 0 0 0 - 5
12 0 0 1 1 0 0 0 0 - 4
13 0 0 0 1 1 0 0 0 - 5
14 0 0 1 1 0 0 1 0 Ya 7
15 0 0 0 0 0 1 1 0 - 4
16 0 1 0 0 1 0 0 1 Ya 11
17 1 0 1 0 0 0 0 0 - 5
18 0 1 0 1 0 0 0 0 - 3
19 0 0 1 0 1 0 0 0 - 7
20 0 0 1 1 1 0 0 1 Ya 13
-
-
-
256 1 1 1 1 1 1 1 1 - 21
Di antara 256 kemungkinan solusi hanya ada 6 kemungkinan yang memenuhi, yang lain
melanggar salah satu atau beberapa kendala. Di antara solusi yang layak, kemungkinan ke
4 (empat) adalah lintasan terpendek.
Sehingga diperoleh lintasan terpendek:
x3 x6 = 4
x2 x7 = 5
x1 x8 = 7
x3 x4 x7 = 7
x2 x5 x8 = 11
x3 x4 x5 x8 = 13
Biaya termurah dari lintasan terpendek ini adalah:
di mana harga seluruhnya dari lintasan terpendek ini adalah:
Z = 2x1 + 2x2 + 3x3 + 5x8 + 4x5 + 3x2 + x4 + x6
= 2 + 2 + 3 + 5 + 4 + 3 + 1 + 1
= 21
3.3 Analisis Pemrograman Dinamik
Pemrograman Dinamik merupakan metode pemecahan masalah dengan cara menguraikan
solusi menjadi sekumpulan langkah (step) atau tahapan (stage) sedemikian sehingga
solusi dari persoalan dapat dipandang dari serangkaian keputusan yang saling berkaitan.
Pada Pemrograman Dinamik, rangkaian keputusan yang optimal dibuat dengan
menggunakan Prinsip Optimalisasi. Prinsip Optimalisasi: jika solusi optimal, maka
bagian solusi pada tahap ke-k juga optimal. Prinsip Optimalisasi berarti bahwa jika
bekerja dari tahap k ke tahap k+1, maka dapat menggunakan hasil optimal dari tahap k
tanpa harus kembali ke tahap awal. Ongkos pada tahap k+1 = (ongkos yang dihasilkan
pada tahap k) + (ongkos dari tahap k ke tahap k+1). Dengan prinsip optimalisasi ini
dijamin bahwa pengambilan keputusan yang benar untuk tahap-tahap selanjutnya.
Algoritma Pemrograman Dinamik adalah sebagai berikut:
Langkah 0 (inisialisasi):
Inisialisasi si 0 dan di mai untuk i1,2,...,n
Langkah 1:
a. isi s dengan 1 (Karena titik a adalah titik asal jalur terpendek, jadi sudah pasti a
terpilih).
Langkah 2, 3, …, n-1:
a. Cari j sedemikian sehingga sj 0 dan dj min
d1,d2,...,dn
b. Isi sj dengan 1
c. Perbaharui d untuk i i1,2,3,....,n dengan d (baru) i
di lama dj mji
min ,
Algoritma Pemrograman Dinamik bekerja dengan cara menyimpan setiap titik v,
dengan d[v] menyatakan lintasan terpendek yang telah ditemukan antara s dan v. Pada
awalnya, nilai ini adalah 0 untuk sumber titik s (d[s]=0), dan ketidakterbatasan untuk
semua titik lain, yang menyatakan fakta bahwa v tidak mengetahui lintasan manapun
yang mengacu ke arah titik itu (d[v]= untuk tiap-tiap v di dalam V, kecuali s). Ketika
algoritma berhenti, d[v] akan menyatakan nilai lintasan yang paling pendek dari s sampai
v atau bernilai tak berhingga, sehingga lintasan tersebut tidak ada.
Operasi dasar dari algoritma Pemrograman Dinamik adalah relasi sisi pada suatu
sisi dari e ke v, jika diketahui lintasan yang paling pendek dari s ke e (d[e]) maka dapat
diperluas menjadi lintasan dari s ke v dengan menambahkan sisi (e,v) pada bagian akhir.
Lintasan akan mempunyai panjang d[e]+w(e, v). Jika nilai ini adalah kurang dari d[v]
yang sekarang, maka dapat mengganti nilai d[v] yang sekarang dengan nilai yang baru
itu. Relaksasi sisi diterapkan sampai semua nilai-nilai d[v] mengembalikan nilai lintasan
yang paling pendek dari s ke v. Algoritma ini diorganisir sedemikian sehingga
masing-masing sisi (e,v) direlaksasi hanya sekali, ketika d[e] telah mencapai nilai akhirnya.
Ide relaksasi ini datang dari suatu analogi antara perkiraan lintasan yang paling
pendek dan panjang suatu pegas seperti bentuk sekrup yang bukan dirancang untuk
tekanan. Pada awalnya, nilai lintasan yang paling pendek adalah suatu optimisasi yang
dianalogikan dengan pegas. Ketika lintasan lebih pendek ditemukan, nilai yang telah
Algoritma memelihara dua himpunan titik S dan Q, himpunan S berisi semua titik
yang telah diketahui bahwa nilai d[v] adalah sudah merupakan nilai terpendek dan
himpunan Q berisi semua titik lainnya. Pada awalnya himpunan kosong, dan pada setiap
langkah satu titik dipindahkan dari Q ke S. Titik ini dipilih sebagai titik dengan nilai d[u]
paling rendah. Ketika suatu titik e dipindahkan ke S, algoritma ini merelaksasi setiap sisi
(e,v).
Contoh: Misalkan lintasan dari kota A ke kota J yang dapat dilihat pada Gambar 3.2.
Angka pertama pada busur (vi,vj) diberikan a(vi,vj) [biaya], dan angka ke dua b(vi,vj)
[waktu], gambar sebagai berikut:
(6,5)
(3,2) (9,2) 4 (3,6)
(6,6) (7,5) (2,7)
(3,1) (5,5)
(8,3) (5,6)
(9,3) (2.3)
(4,7)
[image:51.612.115.533.312.451.2]
Gambar 3.2. Lintasan Terpendek Terpendek dengan Nilai Biaya dan Waktu
Angka pada setiap garis penghubung merupakan biaya dan waktu. Dari Gambar di
atas sehingga persoalan ini dapat dibagi menjadi 4 (empat) tahap (nomor tahap dimulai
dari kota tujuan berurutan ke kota asal).
Tujuan pencarian solusi optimal adalah dengan meminimalkan biaya dengan waktu
tempuh terpendek. Andaikan z1(f) = fungsi biaya dan z2(f) = fungsi waktu yang ditempuh.
Formulasi tujuan:
Min z1(f) =
a(vi,vj).f(vi,vj)Berikut langkah pencarian lintasan terpendek dengan minimalkan biaya dan waktu:
Langkah 1:
Persoalan dipecah menjadi sub-persoalan atau tahapan yang lebih kecil.
Misalkan x1, x2, x3, x4 adalah titik yang dikunjungi pada tahap-i (i = 1, 2, 3, 4)
(6,5)
(3,2) (9,2) 4 (3,6)
(6,6) (7,5)
(3,1) (5,5)
(8,3) (5,6)
(9,3) (2.3)
(4,7)
[image:52.612.109.527.222.419.2]Tahap-1 Tahap-2 Tahap-3 Tahap-4
Gambar 3.3 Lintasan Terpendek dengan Nilai Biaya dan Waktu
Langkah 2:
Tentukan Si = Awal dan xi = Tujuan, i = 1, 2, 3, 4
1. Isi Si dengan nilai Stage (karena titik i adalah titik asal lintasan terpendek sudah pasti
terpilih).
2. Isi xi dengan n (tidak ada loop dari titik i ke i).
Langkah 3: Perbaharui xi:
xi(baru) = min {xi(lama)}
(7,1) (5,5) (2,4)
(3,6 )
(7,4)
A
B
C
D
E
F
G
H
I
Langkah 4:
Tentukan solusi optimal yang dihasilkan pada setiap tahap dalam bentuk fungsi rekursif,
yaitu:
fi*(Si) = min {fi(Si, xi}
di mana fi*(Si) = hasil optimal dari keputusan pada tahap-i.
Sehingga didapat hasil seperti tahap-tahap sebagai berikut:
[image:53.612.189.468.349.447.2]Tahap-1 :
Tabel 3.2. Penentuan Nilai Minimum untuk Tahap-1 pada x1
x1
f1(S1,x2) = C(S1,x1)
f1 * (S1) x1 *
S1
A
B 6,6 6,6 B
C 8,3 8,3 C
Tahap-2 :
Tabel 3.3. Penentuan Nilai Minimum untuk Tahap-2 pada x2
x2
f2(S2,x2) = c(S2,x2) + f1*(s1)
f2 * (S2) x2 *
S2
B C
[image:53.612.173.477.509.642.2]Tahap-3 :
Tabel 3.4. Penentuan Nilai Minimum untuk Tahap-3 pada x3
x3
f3(S3,x3) = C(S3,x3) + f2*(S2)
f3 * (S3) x3 *
S3
D E F
G 6+9=15,5+7=12 7+8=15,5+8=13 4+11=15,3+7=10 15,10
D or
F,F
H 2+9=11,7+7=14 5+8=13,6+8=14 3+11=14,1+7=8 11,8 D,F I 5+9=14,6+7=13 3+8=11,1+8=9 4+11=15,7+7=14 14,9 D,E
Tahap-4 :
Tabel 3.5. Penentuan Nilai Minimum untuk Tahap-4 pada x4
x4
f4(S4,x4) = C(S4,x4) + f3*(S3)
f4 * (S4) X4 *
S4
G H I
J 3+15=18,6+10=16 5+11=16,5+8=13 2+14=16,3+9=12 16,12 H or I,I
Pembacaan tabel-tabel ini untuk menentukan tingkat optimal adalah dari tahap-1
tahap-2 tahap-3 tahap-4.
Lintasan terpendek yang minimumkan biaya adalah:
A B D H J, dengan total biaya = 5+2+3+6 = 16, dengan total waktu =
5+7+2+6 = 20, atau z1 = (16,20)
A B D I J, dengan total biaya = 2+5+3+6 = 16, dengan total waktu =
3+6+2+6 = 17 atau z3 = (16,17)
Lintasan terpendek yang meminimumkan waktu adalah:
A B F I J, dengan total waktu = 3+ 1+6+6 = 16, dengan total biaya =
2+4+7+6 = 19, atau z2 = (16,19)
A C F I J, dengan total waktu = 3+1+4+6 =14, dengan total biaya = 2+4+3+8
Dalam masalah yang pertama, biaya yang diperoleh minimum, namun waktu yang
dibutuhkan tidak layak dan dalam masalah kedua, kendala tambahan adalah berlebihan
dalam hal biaya.
Untuk menentukan alternatif lintasan terpendek lain dengan tujuan
meminimumkan kedua kendala. Secara grafik dapat diilustrasikan penentuan solusi
optimal dari masalah ini adalah seperti terdapat pada gambar di bawah ini.
z2
20 z1 = (16,20)
19
18
17 z2 = (16,17)
16 z3 = (16,19)
15
z4 = (14,17) z1
15 16 17 18 19
[image:55.612.170.513.258.573.2]Solusi Optimal (16,17)
Gambar 3.4 Ilustrasi Pencarian Lintasan Terpendek
Ditemukan lintasan terpendek yang meminimumkan biaya dan waktu adalah z = (16,17)
3.4 Flowchart Pemrograman Dinamik
tidak
ya
[image:56.612.199.451.123.678.2]
Gambar 3.5. Flowchart Algoritma Pemrograman Dinamik
Gambar dari titik i ke j
Input nilai
Hitung fi (Si, xi) = Ci
Hitung nilai awal rekursif untuk Si=1,2,….,n
fi (Si, xi) = Ci + fi
Tentukan nilai minimum
Tampilkan Hasil
3.5 Rancangan Antar Muka Program
Implementasi dari Pemrograman Dinamik untuk penyelesaian knapsack dalam kasus
lintasan terpendek yang diaplikasikan dalam bahasa pemograman Visual Basic 6.0.
Aplikasi dari Pemrograman Dinamik hanya dibatasi pada pencarian jalur terpendek dari
data graph yang diinput oleh user. Tampilannya terdiri dari beberapa form yang memiliki
fungsi masing-masing yang tampil sesuai urutan yang telah diprogram.
1. Halaman U tama
Gambar 3.6. Form Menu Utama
2. Form Graph
Form Graph merupakan form yang digunakan untuk menggambar graph. Data graph
diinput oleh user dengan menentukan titik dan sisi. Data graph juga dapat dibuka dan
disimpan dalam bentuk file dengan ekstension *.tzr, sehingga mempermudah ketika data
Gambar 3.7. Form Entri Data Graph
3. Form Hasil dari Hitung Lintasan Terpendek
Form hasil merupakan form untuk melakukan proses komputasi mencari jalur optimal
minimum.
[image:58.612.140.464.451.670.2]4. Form Hasil Graph Lintasan Terpendek
BAB 4
KESIMPULAN DAN SARAN
4.1 Kesimpulan
Dalam hasil analisis yang dilakukan diperoleh kesimpulan sebagai berikut:
1. Persoalan Knapsack yang diimplementasikan ke dalam lintasan terpendek adalah
salah satu bentuk aplikasi dari penggunaan teori graph. Pemrograman Dinamik
berciri memecah persoalan menjadi yang lebih kecil (sub problem atau stage),
keputusan dibuat secara berurutan dan keputusan yang diambil pada suatu tahap
mempengaruhi keputusan tahap berikutnya.
2. Dalam menyelesaikan persoalan Knapsack dengan algoritma Pemrograman
Dinamik, dapat menggunakan salah satu pendekatan yaitu:
Pemrograman Dinamik Maju: bergerak mulai dari tahap 1, terus maju ke tahap 2,
4.2 Saran
Disarankan kepada para pembaca yang ingin menyelesaikan permasalahan lintasan
terpendek pada Knapsack Problem dengan pendekatan Algoritma Pemrogra