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 yang mempunyai lima titik dan enam sisi.
Universitas Sumatera Utara
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 saling incident dengan vi dan vj, sedangkan vi dan vj ini disebut dua buah titik yang saling
Universitas Sumatera Utara
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 disebut titik akhir ek. Arah sisi adalah dari vi ke vj.
Universitas Sumatera Utara
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.
Universitas Sumatera Utara
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.
Universitas Sumatera Utara
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.
v1 v1
v2 V3
v4
v5
v6
v7 v8
0 15 ∞ 15
∞
∞
5
∞
v2 15
0
3
∞
∞
∞
∞
∞
v3
∞
3
0
5
5
∞
∞
∞
A= v4 15
∞
5
0
∞
4
∞
∞
v5
∞
∞
5
∞
0 15
∞
∞
v6
∞
∞ ∞
v7
5
∞ ∞
∞
∞ 18
v8
∞
∞ ∞
∞
∞ 15 15
4 15
0 18 15 0 15 0
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.
Universitas Sumatera Utara
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 ei1 , ei2 ,......., ein sedemikian rupa sehingga titik terminal ei j berimpit dengan titik awal ei( j 1) untuk 1 j k 1 . Pada Gambar 2.2 terdapat: a. Pada titik v1 e1 v 2 e3 v3 e4 v3 e5 v 4 semua sisi berbeda ( e1 , e3 , e 4 , dan e5 ) masing-masing muncul sekali. Ada titik yang berulang ( v3 muncul 2 kali). Titik awal dan titik akhir tidak sama dengan titik awal = v1 dan titik akhir = v4 , Barisan ini merupakan lintasan dari v1
b.
v4 dengan panjang 4.
Pada titik v1 e1 v 2 e3 v3 e5 v 4 e5 v3 e6 v5 ada sisi yang muncul lebih dari sekali, yaitu e5 (muncul 2 kali) berarti barisan tersebut merupakan walk dari v1
v5 dengan panjang 5.
Universitas Sumatera Utara
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. 2 x1 2
1 2 3 x3
x2 x4 1 1
3
5 x8
x5 x7
3 5
4 1 x6
Gambar 2.5. Lintasan Terpendek (Shortest path) (garis tebal)
Universitas Sumatera Utara
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
c1 x1 c 2 x 2 ... c n x n …………………….......................(1)
dengan kendala a11 x1 a12 x 2 ... a1n x n b1 …………………………………………...(2) a 21 x1 a 22 x 2 ... a 2 n x n b2 . . a n 1 x1 a n 2 x 2 ... a nn x n bn x1 , x 2 ,..., xn 0 …….…………………………………………………...(3)
Universitas Sumatera Utara
Pada Pemrograman Linier ini, x1 , x 2 ,...., x n mewakili keputusan variabel yang tidak diketahui; c1 , c 2 ,...., c n 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:
n
Minimumkan
c
j
xj
ij
x j bi ,
j 1
dengan kendala n
a
i 1,2,...., n
j 1
x j 0,
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.
Universitas Sumatera Utara
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:
Universitas Sumatera Utara
m
m
c
Minimumkan
i 1
ij
xij
j 1
1 xij x ki 0 j 1 k 1 1 m
Kendala
m
xij 0
untuk
i 1
untuk untuk
i 1 1 m
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 x j dan,
1 xj 0
untuk
alat ke j
ikut
untuk
alat ke j
tidak ikut
Universitas Sumatera Utara
Berdasarkan keterangan tersebut, persoalan dapat dirumuskan sebagai berikut: f c 1 x1 c 2 x 2 ..... c n x n
Maksimumkan dengan kendala
a1 x1 a 2 x 2 .... a n x n b x1 x 2 ,.............x n 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: z pjxj
Maksimumkan
j 1
n
w x
dengan kendala
j
j
c,
j 1
x j = 0 atau 1, jN {1,......, n}
Untuk
1 xj 0
untuk
objek j memenuhi
Lainnya
Keterangan: p j = keuntungan dari item j, w j = bobot dari item j,
c = kapasitas dari Knapsack.
Universitas Sumatera Utara
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.
Universitas Sumatera Utara
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:
Gambar 2.6 Tahapan Fungsi Transisi
Universitas Sumatera Utara
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.
Universitas Sumatera Utara
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).
Universitas Sumatera Utara
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.
Universitas Sumatera Utara
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 s i 0 dan d i mai untuk i 1,2,....., n Langkah 1: a. Isi s a dengan 1 (karena titik a adalah titik asal lintasan terpendek, jadi sudah pasti terpilih). b. Isi d a dengan (tidak ada loop dari titik a ke a)
Universitas Sumatera Utara
Langkah 2, 3, … , n-1: a.
Cari j sedemikian sehingga s j 0 dan d j mind1 , d 2 ,....., d n
b.
Isi s j dengan 1
c.
Perbarui d i , untuk i 1,2,3,...., n dengan: d i (baru ) mind i (lama), d j m ji
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.
Universitas Sumatera Utara
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 tugastugas tertentu.
4.
Sarana akses data yang lebih cepat dan handal untuk membuat aplikasi database yang berkemampuan tinggi.
Universitas Sumatera Utara