LAPORAN TUGAS STRATEGI ALGORITMA DYNAMIC PROGRAMMING “Diajukan untuk memenuhi salah satu tugas pada Mata Kuliah Analisis Algoritma”
Disusun oleh : Wildan Kurniadi Indra Divani Adi Nugraha
10113267 10113239
Dosen : Angga Setiyadi, S. Kom
TEKNIK INFORMATIKA FAKULTAS TEKNIK DAN ILMU KOMPUTER UNIVERSITAS KOMPUTER INDONESIA 2014/2015
DAFTAR ISI BAB 1 PENDAHULUAN .................................................................................................................. 3 1.1.
LATAR BELAKANG MASALAH .............................................................................. 3
1.2.
MAKSUD DAN TUJUAN........................................................................................ 3
1.3.
BATASAN MASALAH ............................................................................................ 4
BAB 2 DYNAMIC PROGRAMMING ................................................................................................. 5 2.1.
Definisi Dynamic Programming .......................................................................... 5
2.2.
Kelebihan dan kekurangan Strategi Dynamic Programming .............................. 6
2.3.
MultiStage Graph Problem (permaslahan mencari lintasan terpendek)............ 7
c.
Studi Kasus Dynamic Programming ........................................................................ 9 2.4.1.
Knapsack Problem (Pendekatan Dynamic Programming) .......................... 9
2.4.2.
Coin Change Problem .................................................................................. 9
2.4.3.
Traveling Salesman Problem ..................................................................... 12
2
BAB 1 PENDAHULUAN 1.1. LATAR BELAKANG MASALAH Salah satu hal yang menarik di dunia pemrogramman adalah tentang bagaimana menemukan jalan keluar (solusi) dari setiap masalah dengan tahap/rute yang paling sedikit/terpendek. Dari dahulu hingga sekarang telah dikembangkan berbagai algoritma untuk memecahkan permasalahan ini. Hingga saat ini telah banyak yang menemukan solusi untuk pencarian rute terpendek ini. Salah satunya yang terkenal adalah algoritma dynamic programming (algoritma Bellman – Ford). Penentuan route terpendek dari satu titik ke titik yang lain adalah masalah yang sering ditemui dalam kehidupan sehari-hari. Berbagai kalangan menemui permasalahan serupa dengan variasi yang berbeda, contohnya sebuah maskapai penerbangan yang memerintahkan seorang pilot untuk mencari jalur terpendek sehingga bisa menggunakan bahan bakar lebih efisien, dan juga seorang desainer jaringan komputer yang harus mendesain skema perutean pada jaringan yang dia tangani agar memaksimalkan performa jaringan dan meminimalkan beban yang harus ditangani oleh jaringan tersebut. Seiring dengan waktu yang berjalan dan juga perkembangan ilmu pengetahuan dan teknologi permasalahan pencarian route terpendek ini telah terpecahkan dengan berbagai algoritma salah satunya dengan algoritma Dynamic Programming. Pemrograman Dinamis (dynamic programming) 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 Algoritma Dynamic Programming rangkaian keputusan yang optimal dibuat dengan menggunakan prinsip optimalitas. Prinsip optimalitas yaitu jika solusi total optimal, maka bagian solusi sampai tahap ke-k juga optimal. Prinsip optimalitas berarti bahwa jika kita bekerja dari tahap k ke tahap k + 1, kita 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).
1.2. MAKSUD DAN TUJUAN Permasalahan dalam makalah ini adalah bagaimana peranan Algoritma Dynamic Programming dalam menyelesaikan masalah masalah yang terdapat dalam masalah pemrogramman untuk mendapatkan sebuah Algoritma yang efektif dan efisien, sehingga programmer lebih terarah dalam membuat sebuah program dengan baik.
3
Dengan strategi yang baik dalam membuat sebuah program tentunya akan membuat waktu pemrosesan labih efisien dan efektif, selain itu juga memudahkan dalam penganalisaan masalah ketika terdapat sebuah kesalahan dalam program.
1.3.BATASAN MASALAH Pada kesempatan ini kami hanya akan membahas beberapa metode yang bisa digunakan dalam pembuatan sebuah program. Selain itu juga kami akan sertakan beberapa studi kasus dalam bentuk program dan algoritma sehingga lebih memudahkan dalam memahami apa yang dimaksud Dynamic Programming itu sendiri. Diantara banyak studi kasus yang bisa dibuat kami hanya akan membuat beberapa diantaranya : Knapsack Problem Coin Change Problem Travelling Salesman Problem
4
BAB 2 DYNAMIC PROGRAMMING 2.1. Definisi Dynamic Programming Dynamic programming adalah salah suatu algoritma yang digunakan untuk menemukan nilai optimal dari suatu permasalahan. Dalam dynamic programming, pemecahan suatu masalah dibagi menjadi beberapa langkah (step) atau tahapan (stage) sedemikian hingga solusi dari sebuah persoalan dapat dipandang sebagai serangkaian keputusan yang saling berkaitan. Dynamic Programming merupakan salah satu teknik perancangan algoritma yang dikembangkan untuk menyelesaikan permasalahan yang sangat kompleks dengan memecah permasalahan tersebut menjadi banyak subpermasalahan. Perbedaan utama Dynamic Programming dengan Divide and Conquer adalah pada Dynamic Programming kita menggunakan kembali hasil kalkulasi sub-masalah yang telah dilakukan sebelumnya. Dari penjelasan di atas dapat kita rangkum keterangan sebagai berikut: 1. DP menyelesaikan masalah dengan memecah masalah menjadi subpermasalahan. 2. Setiap solusi dari sub-permasalahan yang telah didapatkan disimpan untuk digunakan kembali jika terdapat sub-permasalahan yang sama. Teknik ini dikenal dengan nama memoization. 3. DP tidak harus menggunakan rekursif. Pemecahan sub-permasalahan juga dapat dilakukan dengan iterasi maupun kalkulasi sederhana. Secara sederhana, teknik Dynamic Programming dapat dikatakan adalah sebuah teknik brute force yang pintar. Kita memecah-mecah masalah menjadi sub-masalah, dan menyelesaikan seluruh sub-masalah tersebut. Perbedaan utama dari Dynamic Programming dengan Divide & Conquer adalah Dynamic Programming melakukan penyimpanan hasil penyelesaian sub-masalah sehingga kita tidak perlu menyelesaikan sub-masalah yang sama berulang kali.
Karakteristik Persoalan yang dimiliki oleh Program Dinamis: Persoalan dapat dibagi menjadi beberapa tahap (stage), yang pada setiap tahap hanya dapat diambil satu keputusan. Masing-masing tahap terdiri dari sejumlah status (state) yang berhubungan dengan tahap tersebut. Secara umum, status merupakan bermacam kemungkinan masukan yang ada pada tahap tersebut. Jumlahnya bisa berhingga atau tak berhingga. Hasil dari keputusan yang diambil pada setiap tahap ditransformasikan dari status yang bersangkutan ke status berikutnya pada tahap berikutnya. Ongkos (cost) pada suatu tahap meningkat secara teratur (steadily) dengan bertambahnya jumlah tahapan. Ongkos pada suatu tahap bergantung pada ongkos tahap-tahap yang sudah berjalan dan ongkos pada tahap tersebut. 5
Keputusan terbaik pada suatu tahap bersifat independen terhadap keputusan yang dilakukan pada tahap sebelumnya. Adanya hubungan rekursif yang mengidentifikasikan keputusan terbaik untuk setiap status pada tahap k memberikan keputusan terbaik untuk setiap status pada tahap k + 1. Prinsip optimalitas berlaku pada persoalan tersebut.
2.2. Kelebihan dan kekurangan Strategi Dynamic Programming
Kelebihan: mengoptimalkan penyelesaian suatu masalah tertentu yang diuraikan menjadi sub-sub masalah yang lebih kecil yang terkait satu sama lain dengan tetap memperhatikan kondisi dan batasan permasalahan tersebut. Proses pemecahan suatu masalah yang kompleks menjadi sub-sub masalah yang lebih kecil membuat sumber permasalahan dalam rangkaian proses masalah tersebut menjadi lebih jelas untuk diketahui. Pendekatan dynamic programming dapat diaplikasikan untuk berbagai macam masalah pemrograman matematik, karena dynamic programming cenderung lebih fleksibel daripada teknik optimasi lain. Prosedur perhitungan dynamic programming juga memperkenankan bentuk analisis sensitivitas terdapat pada setiap variabel status (state) maupun pada variabel yang ada di masing-masing tahap keputusan (stage). Dynamic programming dapat menyesuaikan sistematika perhitungannya menurut ukuran masalah yang tidak selalu tetap dengan tetap melakukan perhitungan satu per satu secara lengkap dan menyeluruh.
Kelemahan: Penggunaan dynamic programming jika tidak dilakukan secara tepat, akan mengakibatkan ketidakefisienan biaya maupun waktu. Karena dalam menggunakan dynamic programming diperlukan banyak percobaan dan pengulangan proses Dynamic programming tidak memiliki suatu bentuk formulasi matematik yang baku untuk digunakan secara konsekuen, sehingga perhitungan untuk menghasilkan keputusan optimal yang dilakukan terbatas pada kondisi tertentu. Hambatan terbesar pada dynamic programming adalah masalah dimensionalitas, yaitu masalah dimana pennigkatan variabel keadaan yang digunakan dalam perhitunngan pemrograman dinamis akan menambah beban memori komputer serta menambah lama waktu perhitungan.
6
2.3. MultiStage Graph Problem (permaslahan mencari lintasan terpendek) 2.3.1.
Definisi Lintasan Terpendek
Lintasan terperndek adalah lintasan minimum yang diperlukan untuk mencapai suatu tempat dari tempat tertentu. Lintasan minimum yang dimaksud dapat dicari dengan menggunakan graf. Graf yang digunakan adalah graf yang berbobot, yaitu graf yang setiap sisinya diberikan suatu nilai atau bobot. Dalam kasus ini, bobot yang dimaksud berupa jarak dan waktu kemacetan terjadi. Pencarian lintasan terpendek sangat berguna untuk menentukan jalan tersingkat untuk menuju suatu tempat. Sehingga, kita dapat sampai tepat waktu menuju tempat tujuan. Hasil analisis berdasarkan bobot-bobot yang berbeda, menunjukkan bahwa semakin banyak bobot yang diberikan, maka semakin akurat pula data yang dihasilkan. Sehingga menghasilkan waktu yang efisien. Untuk dapat memudahkan dalam menjelaskan Permasalahan Mencari Lintasan Terpendek dapat kita lihat pada contoh kasus dibawah ini
2.3.2.
Contoh Kasus
Joe tinggal di new York dan akan pergi ke LA. Dia berencana menginap di rumah temannya dalam perjalanan tersebut. Joe punya teman di Columbus, Nashville, Louisville, Kansas, Omaha, Dallas, San Antonio, dan Denver. Joe tahu setelah satu hari perjalanan dia akan mencapai Columbus, Nashville atau Louisville. Setelah perjalanan 2 hari akan mencapai Kansas, Omaha, atau Dallas. Setelah 3 hari perjalanan akan mencapai Denver atau San Antonio. Setelah 4 hari akan mencapai LA. Untuk meminimalkan jarak, kemana Joe harus menginap setiap malam dalam perjalanannya ?
Stage 2: Colombus
cost=550
7
Nashville Louisville
cost=900 cost=770
Stage 3: Kansas = {New York, Columbus} Kansas = {New York, Nashville} Kansas = {New York, Louisville} Omaha = {New York, Columbus} Omaha = {New York,Nashville} Omaha = {New York,Louisville} Dallas = {New York, Columbus} Dallas = {New York,Nashville} Dallas = {New York,Louisville}
cost =1230 cost =1480 cost =1280 cost =1340 cost =1660 cost =1470 cost = 1550 cost =1560 cost =1600
Stage 4: Denver = {New York, Columbus, Kansas} Denver = {New York, Columbus, Omaha} Denver = {New York, Columbus, Dallas} Denver = {New York, Nashville, Kansas} Denver = {New York, Nashville, Omaha} Denver = {New York, Nashville, Dallas} Denver = {New York, Louisville, Kansas} Denver = {New York, Louisville, Omaha} Denver = {New York, Louisville, Dallas} SA = {New York, Columbus, Kansas} SA = {New York, Columbus, Omaha} SA = {New York, Columbus, Dallas} SA = {New York, Nashville, Kansas} SA = {New York, Nashville, Omaha} SA = {New York, Nashville, Dallas} SA = {New York, Louisville, Kansas} SA = {New York, Louisville, Omaha} SA = {New York, Louisville, Dallas}
cost Denver=1840 cost Denver=1880 cost Denver=2390 cost Denver=2090 cost Denver=2200 cost Denver=2350 cost Denver=1890 cost Denver=2010 cost Denver=2140 cost SA=2020 cost SA=2280 cost SA=1870 cost SA=2270 cost SA=2600 cost SA=1830 cost SA=2070 cost SA=2410 cost SA=1870
Stage 5: LA = {New York, Columbus, Kansas, Denver} LA = {New York, Columbus, Omaha, Denver} LA = {New York, Columbus, Dallas, Denver} LA = {New York, Nashville, Kansas, Denver} LA = {New York, Nashville, Omaha, Denver} LA = {New York, Nashville, Dallas, Denver} LA = {New York, Louisville, Kansas, Denver} LA = {New York, Louisville, Omaha, Denver} LA = {New York, Louisville, Dallas, Denver} LA = {New York, Columbus, Kansas, SA} LA = {New York, Columbus, Omaha, SA} LA = {New York, Columbus, Dallas, SA}
cost LA=2870 cost LA=2910 cost LA=3420 cost LA=3120 cost LA=3230 cost LA=3380 cost LA=2920 cost LA=3040 cost LA=3170 cost LA=3370 cost LA=3630 cost LA=3220
8
LA = {New York, Nashville, Kansas, SA} LA = {New York, Nashville, Omaha, SA} LA = {New York, Nashville, Dallas, SA} LA = {New York, Louisville, Kansas, SA} LA = {New York, Louisville, Omaha, SA} LA = {New York, Louisville, Dallas, SA}
cost LA=3620 cost LA=3950 cost LA=3180 cost LA=3420 cost LA=3760 cost LA=3220
Jadi jarak optimal yang diperoleh adalah 2870
2.4. Studi Kasus Dynamic Programming 2.4.1. Knapsack Problem (Pendekatan Dynamic Programming) Penjelasan singkat tentang knapsack problem: Knapsack dapat diartikan sebagai karung, kantung, atau buntilan. Karung digunakan untuk memuat sesuatu. Dan tentunya tidak semua objek dapat ditampung di dalam karung. Karung tersebut hanya dapat menyimpan beberapa objek dengan total ukurannya (weight) lebih kecil atau sama dengan ukuran kapasitas karung. Setiap objek itupun tidak harus kita masukkan seluruhnya. Tetapi bisa juga sebagian saja. knapsack 0/1, yaitu suatu objek diambil seluruh bagiannya atau tidak sama sekali. Setiap objek mempunyai nilai keuntungan atau yang disebut dengan profit. Tujuan ingin mendapatkan profit yang maksimal. Untuk mendapatkan profit maksimal Belum tentu menggunakan banyak objek yang masuk akan menguntungkan. Bisa saja hal yang sebaliknya yang terjadi. Cara terbaik agar menguntungkan : bukan hanya dari hasilnya optimal tetapi juga banyaknya langkah yang dibutuhkan
2.4.2.
Coin Change Problem
contoh dari studi kasus secara sederhana pada coin change problem adalah sebagai berikut: Contoh Penjelasan: Pecahan uang logam Indonesia 25 50 100 200 500 1000
9
Kembalian senilai 750 bisa didapat dari: 1 keping 500, 1 keping 200, 1 keping 50 1 keping 500, 2 keping 100, 1 keping 50 7 keping 100, 1 keping 50 5 keping 100, 5 keping 50 Dan masih banyak lagi kombinasi lainnya
Misalkan di sebuah negara hanya ada uang logam C1, C2, dan C3 Maka terdapat 3 variasi coin change problem: 1. Apakah kembalian X bisa dibentuk dari pecahan-pecahan tersebut? 2. Ada berapa koin minimal untuk membentuk X? 3. Ada berapa kombinasi cara untuk membentuk nilai X? Contoh Kasus 1: Di sebuah negara hanya terdapat uang logam bernilai 3,5 dan 12. 1. Apakah kembalian 23 bisa dibentuk dari pecahan-pecahan tersebut? 2. Ada berapa koin minimal untuk membentuk nilai kembalian 23? 3. Ada berapa kombinasi cara untuk membentuk nilai 23?
Model matematika : f(3) = true f(5) = true f(12) = true f(x) = false untuk x < 0 f(n) = f(n-3) or f(n-r) or f(n-12)
Metode Pull jika kita ingin tahu apakah X bisa dibentuk, kita perlu tahu X-3 atau X-5 atau X-12 bisa dibentuk
Metode Push Jika nilai X bisa dibentuk, maka nilai X+3, X+5, X+12 dibentuk
Pseudocode contoh kasus 1: iNilaiCari=23 iMaxCari=25 iJumKoin=3 koin[1]=3 koin[2]=5 koin[3]=12 for i=1 to iMaxCari do c[i]=”X” endfor for j=1 to iJumKoin do c[koin[j]]=”B” 10
endfor for n=1to iMaxCari do for j=1to iJumKoin do if (n-koin[j])>=1 then if C[n-koin[j]]=”B” then C[n]=”B” Endif Endif Endfor Endfor If C[InilaiCari]=”B” then bBisaDicari=true else bBisaDicari=false endif
Contoh Kasus 2: Model matematika : f(23) = min{f(20),f(18),f(11)}+1 f(n) = min{f(n-3),f(n-5),f(n-12)}+1
Metode Pull Jumlah minimal koin untuk membentuk nilai X didapat dari 1 ditambah jumlah koin minimal untuk membentuk nilai X-3 atau X5 atau X-12 (diambil yang lebih kecil)
Metode Push Jika nilai X bisa dibentuk dengan Y koin, maka nilai X+3, X+5, X+12 bisa dibentuk dengan Y+1 koin
Pseudocode contoh kasus 2: iNilaiCari=23 iMaxCari=25
11
iJumKoin=3 koin[1]=3 koin[2]=5 koin[3]=12 for i=1 to iMaxCari do C[i]=0 Endfor For j=1 to iJumKoin do C[koin[j]]=1 Endfor For n=1 to iMaxCari do For j=1 to iJumKoin do If ((n-koin[j])>=1) and (C[n-koin[j]]>0) then If (C[n]=0) or (C[n]>(1+C[n-koin[j]])) then C[n[ = 1+C[n-koin[j]] Endif Endif Endfor Endfor If C[iNilaiCari]>0 then bBisaDicari=true iJumKoinMinimal=C[iNilaiCari] else bBisaDicari=false
2.4.3.
Traveling Salesman Problem
Permasalahan Traveling Salesman Problem(TSP) sebenarnya hampir mirip dengan Multisage Graph Problem dimana keduanya sama-sama mencari jalan optimum(tercepat/terdekat) untuk menuju titik tujuan. Berikut adalah contoh kasusnya
12
Contoh Kasus 1:
1
1
2
3
2
3 4
4 5
6
5 6
Bagan 1
Seorang salesman berangkat dari kota 1 dan harus mengunjungi 6 kota lainnya, dan harus kembali ke kota asal yaitu kota 1. Rute pertama seperti ditunjukkan pada bagan 1, rute yang ditempuh adalah 1 -> 4 -> 2 -> 5 ->6 ->3-> 1 dan total panjang lintasan 62 km, rute ini relevan tetapi bukan rute terbaik. Rute kedua ditunjukkan pada bagan 2, dengan lintasan 1->2->5->4->6->3->1, dengan total panjang lintasan 48 km, tentunya lintasan ini lebih baik daripada rute pertama. Jika proses pencarian rute disimbolkan dengan persamaan matematik, notasi biaya total c(A) sebagai himpunan bagian dari A dan himpunan bagian dari E maka berlaku: c(A) = u,v in A c(u,v) Fungsi biaya total merupakan segitiga tak sama dari simpul-simpul u, v, w dalam V, maka w mempunyai c(u,w)≤ c(u,v) + c(v,w). TSP merupakan kejadian NP-complete yaitu suatu kejadian yang memerlukan fungsi biaya yang menganut model segitiga sembarang. Permasalahan TSP adalah kejadian yang cukup komplek karena terdapat 3 variabel yang saling bergantung. Ini berarti bahwa tidak bisa didapatkan algoritma polinomal waktu untuk TSP.
13