• Tidak ada hasil yang ditemukan

Pendekatan Algoritma Pemrograman Dinamik Dalam Menyelesaikan Persoalan Knapsack 0/1

N/A
N/A
Protected

Academic year: 2016

Membagikan "Pendekatan Algoritma Pemrograman Dinamik Dalam Menyelesaikan Persoalan Knapsack 0/1"

Copied!
62
0
0

Teks penuh

(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

(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

(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

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

(6)

ABSTRAK

(7)

ABSTRACT

(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

(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

(12)

ABSTRAK

(13)

ABSTRACT

(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

(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

(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

(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

(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

(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

(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

(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

(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

(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

(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,

(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 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, 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

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

[image:35.612.168.480.483.595.2]

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

[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

(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

[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

(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

(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

(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

(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

(44)
[image:44.612.236.397.89.248.2]

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

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

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

[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

(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

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

[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)
(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)

[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

(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:

[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]
(54)
[image:54.612.129.523.140.278.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

(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

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

(56)

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

(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

(58)
[image:58.612.139.408.97.249.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.

[image:58.612.140.464.451.670.2]
(59)
[image:59.612.125.421.145.320.2]

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,

(61)

4.2 Saran

Disarankan kepada para pembaca yang ingin menyelesaikan permasalahan lintasan

terpendek pada Knapsack Problem dengan pendekatan Algoritma Pemrogra

Gambar

Gambar  2.1. Graph  5 titik dan 6 sisi
Gambar 2.3. Digraph G
Tabel 2.1  Biaya Pemasangan Jaringan Listrik
Gambar 2.4.  Graph Berlabel Jaringan Listrik 8 Kota
+7

Referensi

Dokumen terkait

pada penelitian ini digunakan Algoritma Bellman-Ford, untuk menentukan lintasan terpendek untuk 31 titik batas jalan yang terdapat di 15 nama jalan yang ada di Salah satu

yang sama, dari 5 kali pengujian untuk setiap data set, metode decoder memiliki rata-rata standar deviasi sebesar 12,7875, sedangkan metode penalty memiliki rata-rata standar