Pendekatan Algoritma Pemrograman Dinamik Dalam Menyelesaikan Persoalan Knapsack 0/1

(1)

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

MEDAN

2010


(2)

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

MEDAN

2010


(3)

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


(4)

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

SRI RAHAYU 060823001


(5)

PENGHARGAAN

Puji dan syukur penulis panjatkan kepada Allah SWT, dengan limpahan dan karunia-Nya kertas kajian ini berhasil diselesaikan dalam waktu yang telah ditetapkan.

Ucapan terima kasih penulis sampaikan kepada Drs. Bambang Irawan, M.Sc dan Drs. Marwan Harahap, M.Eng selaku pembimbing pada penyelesaian skripsi ini yang telah memberikan panduan dan penuh kepercayaan kepada penulis untuk menyempurnakan kajian ini. Panduan ringkas, padat dan professional telah diberikan kepada penulis agar dapat menyelesaikan tugas ini. Ucapan terima kasih juga ditujukan kepada Ketua dan Sekretaris Departemen Matematika FMIPA USU Dr. Saib Suwilo, M.Sc dan Drs. Henry Rani Sitepu, M.Si, Dekan dan Pembantu Dekan Fakultas Matematika dan Ilmu Pengetahuan Alam Universitas Sumatera Utara, semua dosen pada Departemen Matematika FMIPA USU, pegawai di FMIPA USU, dan rekan-rekan kuliah. Akhirnya, tidak terlupakan kepada kedua orang tua dan semua ahli keluarga dan rekan terdekat penulis selama ini yang telah memberikan bantuan dan dorongan yang diperlukan. Semoga Allah SWT memberikan balasan yang layak.


(6)

ABSTRAK

Pemrograman Dinamik adalah metode pemecahan masalah dengan cara menguraikan solusi menjadi sekumpulan langkah atau tahapan sedemikian hingga solusi dari persoalan dapat dipandang dari serangkaian keputusan yang saling berkaitan. Dalam tulisan ini membahas tentang penggunaan algoritma Pemrograman Dinamik untuk mencari solusi optimal pada Masalah Knapsack 0/1. Masalah Knapsack 0/1 dapat didefinisikan dalam menentukan lintasan terpendek dari titik sumber ke tujuan yang memenuhi kendala biaya dan waktu pada suatu graph. Lintasan yang terpilih bernilai 1 dan yang tidak terpilih bernilai 0 kemudian diimplementasikan kedalam suatu program dengan menggunakan Visual Basic 6.0.


(7)

ABSTRACT

Dynamic Programming is a method of solving problems by way of describing a solution to a set of steps or stages such that the solution of the problem can be viewed from a series of interrelated decisions. In this paper discusses the use of Dynamic Programming algorithm to find optimal solutions to the Knapsack Problem 0 / 1. Knapsack Problems 0 / 1 is defined to determine the shortest path from point source to the destination that meets the cost and time constraints on a graph. Chosen path is value 1 and not selected path is 0 then implemented into a program with using Visual Basic 6.0.


(8)

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


(9)

Bab 4 Kesimpulan dan Saran 47

4.1 Kesimpulan 47

4.2 Saran 48

Daftar Pustaka Lampiran


(10)

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


(11)

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

Gambar 3.8. Form Hasil dari Hitung Cari Lintasan Terpendek 45 Gambar 3.9. Form Hasil Graph Lintasan Terpendek 46


(12)

ABSTRAK

Pemrograman Dinamik adalah metode pemecahan masalah dengan cara menguraikan solusi menjadi sekumpulan langkah atau tahapan sedemikian hingga solusi dari persoalan dapat dipandang dari serangkaian keputusan yang saling berkaitan. Dalam tulisan ini membahas tentang penggunaan algoritma Pemrograman Dinamik untuk mencari solusi optimal pada Masalah Knapsack 0/1. Masalah Knapsack 0/1 dapat didefinisikan dalam menentukan lintasan terpendek dari titik sumber ke tujuan yang memenuhi kendala biaya dan waktu pada suatu graph. Lintasan yang terpilih bernilai 1 dan yang tidak terpilih bernilai 0 kemudian diimplementasikan kedalam suatu program dengan menggunakan Visual Basic 6.0.


(13)

ABSTRACT

Dynamic Programming is a method of solving problems by way of describing a solution to a set of steps or stages such that the solution of the problem can be viewed from a series of interrelated decisions. In this paper discusses the use of Dynamic Programming algorithm to find optimal solutions to the Knapsack Problem 0 / 1. Knapsack Problems 0 / 1 is defined to determine the shortest path from point source to the destination that meets the cost and time constraints on a graph. Chosen path is value 1 and not selected path is 0 then implemented into a program with using Visual Basic 6.0.


(14)

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 pengangkut lainnya. Keperluan rumah tangga yang akan dijual hanya berjumlah satu


(15)

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 jumlah nilai-nilai yang terdapat pada tiap garis dalam lintasan.


(16)

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 tahap-tahap selanjutnya. Inti dari Pemrograman Dinamik adalah membuang suatu bagian


(17)

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 referensi di antaranya:


(18)

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 bahwa persoalan Knapsack akan menunjukkan kemungkinan yang terbaik.


(19)

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 j

dengan kendala

n

j 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


(20)

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 Persoalan Knapsack yang diimplementasikan ke dalam kasus lintasan terpendek.


(21)

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


(22)

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


(23)

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


(24)

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 nilai sisi (w(e)) tersebut. Jumlah nilai semua sisi disebut Total Nilai.


(25)

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 tersebut menyatakan biaya pengadaan jaringan listrik.


(26)

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


(27)

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 eiej 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 i

i e e

e , ,...,

2

1 sedemikian rupa

sehingga titik terminal j i

e berimpit dengan titik awal

) 1 (ji

e untuk 1 jk1. Pada Gambar 2.2 terdapat:

a. Pada titik v1e1v2e3v3e4v3e5v4 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 v1e1v2e3v3e5v4e5v3e6v5 ada sisi yang muncul lebih dari sekali, yaitu e (muncul 2 kali) berarti barisan tersebut merupakan 5


(28)

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


(29)

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 12 2 ... 

0 ,..., , 2

1 x xn


(30)

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, i1 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

, i1,2,....,n ,

0

j

x j1,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 tidak dapat diterima.


(31)

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 rumus berikut ini:


(32)

Minimumkan

  m j ij ij m i x c 1 1

Kendala

 

        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, j1,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,

     0 1 j x untuk untuk alat alat j ke j ke   ikut tidak ikut


(33)

Berdasarkan keterangan tersebut, persoalan dapat dirumuskan sebagai berikut: Maksimumkan fc1x1c2x2 ...cnxn

dengan kendala b x a x a x

a1 1  2 2 .... n nx1x2,...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, jN{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.


(34)

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 pada tahap berikutnya.


(35)

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.

Komponen pada setiap tahap dapat digambarkan sebagai berikut:


(36)

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 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 tahap berikutnya. Jumlah status pada setiap tahap bisa definitif atau infinitif.


(37)

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 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 dengan proses induksi mundur (backward induction process).


(38)

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 keputusan yang benar untuk tahap-tahap selanjutnya.


(39)

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 dimai untuk i1,2,...,n Langkah 1:

a. Isi s dengan 1 (karena titik a adalah titik asal lintasan terpendek, jadi sudah a pasti terpilih).


(40)

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 i1,2,3,....,n dengan: di(baru)min

di(lama),djmji

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 (Database) dan pembuatan server OLE automation.


(41)

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 yang berkemampuan tinggi.


(42)

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 panjang jumlah 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


(43)

     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

 

01 yang akan memenuhi kendala:

n

j j jx c

w 1 , 0  j

x atau 1 jN

1,...,n

di mana salah satu fungsi objektif yang dimaksimalkan adalah

n j j jx p z 1

Contoh 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 Lainnya


(44)

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

3 x3 x2 x4 1 1 x5 x7 3 2 1 4


(45)

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 i

i 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 1

i 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 = c12x12c32x32c13x13c43x43c14x14c25x25c35x35c45x45

dengan kendala:

 

       5 1 5 1 1 0 1 j k ki ij x x m i i i    1 1 0  ij

x atau 1

0

ij

x i.j1,2,...,m

Titik 1

x11x12x13x14x15

 

x11x21x31x41x51

1 Titik 2

x21x22x23x24x25

 

x12x22x32x42x52

0 Titik 3

x31x32x33x34x35

 

x13x23x33x43x53

0 Titik 4

x41x42x43x44x45

 

x14x24x34x44x54

0 Titik 5

x51x52x53x54x55

 

x15x25x35x45x55

1

untuk untuk untuk


(46)

dengan kendala:

Titik 1 x12x13x14 1 Titik 2 x25x12x32 0 Titik 3 x32 x35 x13 x43 0 Titik 4 x43x45x14 0 Titik 5 x25 x35 x45 1

Setelah disubstitusikan: Minimunkan

Z = c12x12c13x13c14x14c25x25c32x32c35x35c43x43c45x45

dengan kendala:

Titik 1 x12x13x14 1 Titik 2 x25 x12 x32 0 Titik 3 x32x35x13x43 0 Titik 4 x43x45x14 0 Titik 5 x25 x35 x45 1

Lalu masukkan biaya masing-masing

Minimumkan

Z = 2x12x2 3x3x4 4x5x6 3x7 5x8

dengan kendala:

Titik 1 x1x2 x3 1 Titik 2 x8x1x5 0 Titik 3 x5x7x2x4 0 Titik 4 x4 x6 x3 0 Titik 5 x8x7x6 1


(47)

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  xxxxxxx

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


(48)

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:


(49)

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 dimai untuk i1,2,...,n

Langkah 1:

a. isi s dengan 1 (Karena titik a adalah titik asal jalur terpendek, jadi sudah pasti a terpilih).


(50)

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 i1,2,3,....,n dengan d (baru) i

di lama djmji

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 diperkirakan diturunkan, dan pegas diperlonggar.


(51)

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)

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) z2(f) =

b(vi,vj).f(vi,vj)

(7,1) (5,5) (2,4) (3,6 ) (7,4) A B C D E F G H I J


(52)

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)

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


(53)

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:

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

D 3+6=9,2+6=8 7+8=15,4+3=7 9,7 B,C E 2+6=8,4+6=10 5+8=13,5+3=8 8,8 B,C F 7+6=13,1+6=7 3+8=11,6+3=9 11,7 C,B


(54)

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 = 17 atau z4 = (14,17)


(55)

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 Solusi Optimal (16,17)

Gambar 3.4 Ilustrasi Pencarian Lintasan Terpendek

Ditemukan lintasan terpendek yang meminimumkan biaya dan waktu adalah z = (16,17) dengan lintasan: A  B  D  I  J.


(56)

3.4 Flowchart Pemrograman Dinamik

tidak

ya

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

Selesai Mulai


(57)

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 graph dibutuhkan kembali.


(58)

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.


(59)

4. Form Hasil Graph Lintasan Terpendek


(60)

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, 3, dan seterusnya sampai tahap n. Urutan variabel keputusan adalah x1, x2, x3,…, xn.


(61)

4.2 Saran

Disarankan kepada para pembaca yang ingin menyelesaikan permasalahan lintasan terpendek pada Knapsack Problem dengan pendekatan Algoritma Pemrograman Dinamik:

1. Agar metode ini dikembangkan lebih luas lagi. Di sini penulis hanya menyelesaikan persoalan dalam cakupan kecil yang dapat dikerjakan secara manual.

2. Sebaiknya pembaca dapat menyelesaikan persoalan dalam ruang lingkup yang lebih besar, dan merekayasa suatu software dengan metode lain yang terdapat dalam Pemrograman Dinamik.


(62)

DAFTAR PUSTAKA

Bazaraa. M. S, Jarvis J.J. 1977, “Linear Programming And Network Flows” John Wiley & Sons

Csirik, J.J.B.G. Frenk. M. Labbe. S. Zhang. 2001. “Heuristic for the 0-1 Min-Knapsack

Problem”. Rotterdam Econometrisch Institute, Eramus Universiteit Rotterdam.

Evans. J. R, dan Minieka. E. 1992. “Optimization Algorithms for Nerwork and Graph” Marcel Dekker, Inc.

Marc, Lars Lipson dan Lipschutz Seymour. 2002 “Matematika Diskrit 2”, Terjemahan Tim Editor Penerbit Salemba Teknika.

Martello. S. and Toth P. 1990. “Knapsack Problem”, John Wiley & Sons Ltd.

Munir M. T. Rinaldi. 2005. “Diktat Kuliah IF2251 Strategi Algoritmik”, Bandung, Institut Teknologi Bandung.

Nicos, Christopfides, Aristide Minoozzi, Paolo Toth, Claudio Sandi. 1978. “Combinatorial Optimization”, New York, John Wiley & Sons Ltd.

Rao. S.S. “Optimization”, Second Edition. Wiley Eastern Limited New Delhi.

Siang, Jong Jek. “Matematika Diskrit dan Aplikasinya pada Ilmu Komputer” Penerbit ANDI Yogyakarta.

Zemel, Eitan. 1984. “An O(n) Algorithm For The Linear Multiple Choice Knapsack


(1)

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


(2)

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.


(3)

4. Form Hasil Graph Lintasan Terpendek


(4)

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, 3, dan seterusnya sampai tahap n. Urutan variabel keputusan adalah x1, x2, x3,…, xn.


(5)

4.2 Saran

Disarankan kepada para pembaca yang ingin menyelesaikan permasalahan lintasan terpendek pada Knapsack Problem dengan pendekatan Algoritma Pemrograman Dinamik:

1. Agar metode ini dikembangkan lebih luas lagi. Di sini penulis hanya menyelesaikan persoalan dalam cakupan kecil yang dapat dikerjakan secara manual.

2. Sebaiknya pembaca dapat menyelesaikan persoalan dalam ruang lingkup yang lebih besar, dan merekayasa suatu software dengan metode lain yang terdapat dalam Pemrograman Dinamik.


(6)

DAFTAR PUSTAKA

Bazaraa. M. S, Jarvis J.J. 1977, “Linear Programming And Network Flows” John Wiley & Sons

Csirik, J.J.B.G. Frenk. M. Labbe. S. Zhang. 2001. “Heuristic for the 0-1 Min-Knapsack Problem”. Rotterdam Econometrisch Institute, Eramus Universiteit Rotterdam.

Evans. J. R, dan Minieka. E. 1992. “Optimization Algorithms for Nerwork and Graph” Marcel Dekker, Inc.

Marc, Lars Lipson dan Lipschutz Seymour. 2002 “Matematika Diskrit 2”, Terjemahan Tim Editor Penerbit Salemba Teknika.

Martello. S. and Toth P. 1990. “Knapsack Problem”, John Wiley & Sons Ltd.

Munir M. T. Rinaldi. 2005. “Diktat Kuliah IF2251 Strategi Algoritmik”, Bandung, Institut Teknologi Bandung.

Nicos, Christopfides, Aristide Minoozzi, Paolo Toth, Claudio Sandi. 1978. “Combinatorial Optimization”, New York, John Wiley & Sons Ltd.

Rao. S.S. “Optimization”, Second Edition. Wiley Eastern Limited New Delhi.

Siang, Jong Jek. “Matematika Diskrit dan Aplikasinya pada Ilmu Komputer” Penerbit ANDI Yogyakarta.

Zemel, Eitan. 1984. “An O(n) Algorithm For The Linear Multiple Choice Knapsack Problem And Related Problems”. USA: Northwestern University.