PROGRAMING
PRODI STATISIKA JURUSAN MATEMATIKA FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM UNIVERSITAS HASANUDDIN 2012
A. Algoritma Greedy Algoritma menyelesaikan greedy merupakan salah satu algoritma termasuk yang dapat
bermacam-macam
permasalahan
permasalahan
mengoptimalkan (minimum atau maksimum) hasil yang didapat. Algoritma greedy menerapkan metode pencarian terkontrol dengan melakukan pilihan yang memberikan hasil optimal sementara. Memilih nilai optimal (maksimum atau minimum) dari sekumpulan pilihan merupakan konsep dasar dari algoritma greedy. Persoalan optimasi(optimization problems): Persoalan mencari solusi optimum. Hanya ada dua macam persoalan optimasi: 1. Maksimasi(maximization) 2. Minimasi(minimization) Contoh persoalan optimasi: ( Masalah Penukaran Uang): Diberikan uang senilai A. Tukar A dengan koin-koin uang yang ada. Berapa jumlah minimum koin yang diperlukan untuk penukaran tersebut? Persoalan minimasi Contoh 1: tersedia banyak koin 1, 5, 10, 25 Uang senilai A= 32 dapat ditukar dengan banyak cara berikut: 32 = 1 + 1 + + 1 32 = 5 + 5 + 5 + 5 + 10 + 1 + 1 32 = 10 + 10 + 10 + 1 + 1 Minimum: 32 = 25 + 5 + 1 + 1 (4 koin) (32 koin) (7 koin) (5 koin)
Algoritma greedy membentuk solusi langkah per langkah(step by step). Pada setiap langkah, terdapat banyak pilihan yang perlu dieksplorasi. Oleh karena itu, pada setiap langkah harus dibuat keputusan yang terbaik dalam menentukan pilihan. Pada setiap langkah, kita membuat pilihan optimum lokal (local optimum) Dengan harapan bahwa langkah sisanya mengarah ke solusi optimum global (global optimum). Algoritma greedy adalah algoritma yang memecahkan masalah langkah per langkah, pada setiap langkah: 1. mengambil pilihan yang terbaik yang dapat diperoleh pada saat itu tanpa memperhatikan konsekuensi ke depan (prinsiptake what you can get now!) 2. berharap bahwa dengan memilih optimum lokal pada setiap langkah akan berakhir dengan optimum global. Kelebihan utama dari algoritma greedy adalah : Mudah diimplementasikan, algoritma greedy sangat mudah untuk diimplementasikan pada persoalan-persoalan yang ada. Efisien, algoritma greedy merupakan algoritma yang sangat efisien karena algoritma ini selalu berusaha memilih hasil optimal. Tinjau masalah penukaran uang: Strategi Greedy Pada setiap langkah, pilihlah koin dengan nilai terbesar dari himpunan koin yang tersisa. Misal: A = 32, koin yang tersedia: 1, 5, 10, dan 25 Langkah1: pilih 1 buah koin 25 (Total = 25) Langkah2: pilih 1 buah koin 5 (Total = 25 + 5 = 30) Langkah3: pilih 2 buah koin 1 (Total = 25+5+1+1= 32) Solusi: Jumlah koin minimum = 4 (solusi optimal!)
Contoh: Dengan menggunakan metode greedy, memilih dari 4 bangun yang disediakan 35 cm
15 cm
Bangun I=
Luas Bangun= 12 cm
Bangun III=
Luas Bangun=8 cm
Bangu IV=
Luas Bangun= 16
Dengan Metode Greedy : Ambil bangun yang memiliki luas yang paling besar yaitu bangun IV agar solusi menjadi optimum yaitu memiliki sisa paling kecil. [ ] = 32 cm2
Langkah-langkah Greedy: 1. Menggabungkan 2 bangun III dan 2 bangun IV sehingga tampak seperti di bawah ini
2.
Menyusun bangun tersebut menjadi beberapa bagian, sehingga tampak seperti di bawah ini
3. Menambahkan beberapa bangun pada bagian yag kosong untuk meminimalisasikan sisa.Sehingga tampak seperti di bawah ini
4. Membatasi bagian yang kosong untuk menghitung sisa sehingga tampak seperti gambar di bawah ini.
Jumlah sisa= Luas A + Luas B + Luas C = 35 + 12 + 6 = 53 cm Jadi sisa bangun adalah 53 cm dari luas bangun 525 cm dengan menggabungkan 43 bangun
Metode Greedy ini digunakan untuk memperoleh solusi yang optimal dari suatu masalah yang mempunyai 2 indikator yaitu: adanya fungsi tujuan (Constrain). PROCEDURE GREEDY (A,n) Solusi FOR I X 0 (solusi awal) & pembatas
1 TO n DO SELECT(A)
IF FEASIBLE (Solusi, x) THEN Solusi ENDIF REPEAT RETURN (Solusi) END GREEDY Keterangan : A(1:n) mengandung n input data. FEASIBLE merupakan fungsi yang bernilai boolean (0 atau 1) UNION penggabungan dan pemeriksaan fungsi obyektifnya (update) SELECT merupakan fungsi untuk mengambil data input dari A CONTOH : Himpunan A merupakan himpunan pasangan terurut (x,y), yaitu { (2,1),(3,2),(7,1) dan (1,0)}. Dari data-data tersebut akan ditentukan suatu pasangan terurut yang memiliki jumlah x dan y yang minimum. Adapun batasan dari x dan y masing-masing lebih besar dari nol. Penyelesaiannya : UNION (solusi, x)
Solusi
N = 2 : x=3 > 0
N = 3 : x=7 > 0
Y=1>0 Solusi
Dari himpunan solusi yang mungkin tersebut diperoleh solusi yang optimal (dalam hal ini minimum) adalah (2,1) yang jumlahnya sebesar 2 + 1 = 3. Jadi solusi = (2,1) Metode greedy banyak digunakan dalam berbagai penyelesaian masalah, antara lain adalah : 1. Optimal Storage on Tapes Problem 2. Kanpsack Problem 3. Minimum Spanning Tree Problem 4. Shortest Path Problem B. Dynamic Programming Dynamic Programming adalah prosedur matematis yang terutama dirancang untuk memperbaiki efisiensi perhitungan masalah pemrograman matematis tertentu dengan menguraikannya menjadi bagian-bagian masalah yang lebih kecil. Sehingga program Dinamis (dynamic programming): o metode pemecahan masalah dengan cara menguraikan solusi menjadi sekumpulan tahapan (stage)
sedemikian sehingga solusi dari persoalan dapat dipandang dari serangkaian keputusan yang saling berkaitan.
Istilah program dinamis muncul karena perhitungan solusi menggunakan tabeltabel. Dynamic programming sebagai suatu teknik optimasi memiliki beberapa kelebihan, diantaranya : 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. Disamping memiliki kelebihan, dynamic programming juga memiliki beberapa kekurangan, diantaranya : Penggunaan dynamic programming jika tidak dilakukan secara tepat, akan mengakibatkan ketidakefisienan biaya maupun waktu. Karena dalam
menggunakan dynamic programming diperlukan keahlian, pengetahuan, dan seni untuk merumuskan suatu masalah yang kompleks, terutama yang berkaitan dengan penetapan fungsi transformasi dari permasalahan tersebut. Dynamic programming tidak memiliki suatu bentuk formulasi matematik yang baku untuk digunakan secara konsekuen, sehingga perhitungan untuk
Hambatan
terbesar
pada
dynamic
programming
adalah
masalah
dimensionalitas, yaitu masalah dimana peningkatan variabel keadaan yang digunakan dalam perhitungan pemrograman dinamis akan menambah beban memori komputer serta menambah lama waktu perhitungan. Karakteristik penyelesaian persoalan dengan Program Dinamis: terdapat sejumlah berhingga pilihan yang mungkin, solusi pada setiap tahap dibangun dari hasil solusi tahap sebelumnya, kita menggunakan persyaratan optimasi dan kendala untuk membatasi sejumlah pilihan yang harus dipertimbangkan pada suatu tahap. Perbedaan Algoritma Greedy dengan Program Dinamis: Greedy: hanya satu rangkaian keputusan yang dihasilkan Program dinamis: lebih dari satu rangkaian keputusan yang
dipertimbangkan.
Tinjau graf di bawah ini. Kita ingin menemukan lintasan terpendek dari 1 ke 10.
7 2 2 6 4 1 3 6 2 6 3 1 5 4 7 3 3 9 4
10
5 4 3 4
1 8 3
3 4
Prinsip Optimalitas Pada program dinamis, 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 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. Persoalan dapat dibagi menjadi beberapa tahap (stage), yang pada setiap tahap hanya diambil satu keputusan.
2. 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.
V1
V V V Graf multitahap (multistage graph). Tiap simpul diV dalam graf tersebut
2 3 4 5
4 8
11
3. Hasil dari keputusan yang diambil pada setiap tahap ditransformasikan dari status yang bersangkutan ke status berikutnya pada tahap berikutnya. 4. Ongkos (cost) pada suatu tahap meningkat secara teratur (steadily) dengan bertambahnya jumlah tahapan. 5. Ongkos pada suatu tahap bergantung pada ongkos tahap-tahap yang sudah berjalan dan ongkos pada tahap tersebut. 6. Keputusan terbaik pada suatu tahap bersifat independen terhadap keputusan yang dilakukan pada tahap sebelumnya. 7. Adanya hubungan rekursif yang mengidentifikasikan keputusan terbaik untuk setiap status pada tahap k memberikan keputusan terbaik untuk setiap status pada tahap k + 1. 8. Prinsip optimalitas berlaku pada persoalan tersebut.
5 4 3 4
1 8 3
3 4
Penyelesaian dengan Program Dinamis Mundur Misalkan x1, x2, , x4 adalah simpul-simpul yang dikunjungi pada tahap k (k = 1, 2, 3, 4). Maka rute yang dilalui adalah yang dalam hal ini x1 = 1. Pada persoalan ini,
x1
x2
x3
x4
10 ,
Tahap (k) adalah proses memilih simpul tujuan berikutnya (ada 4 tahap). Status (s) yang berhubungan dengan masing-masing tahap adalah simpulsimpul di dalam graf. Dengan ukuran bangun yang sama seperti pada contoh metode greedy sebelumnya, gunakan metode dynamic programming untuk menyelesaikan soal tersebut. Isi bangun berikut dengan memilih dari 4 bangun yang disediakan 35 cm
15 cm
Bangun I=
Luas Bangun= 12 cm
Bangun III=
Luas Bangun=8 cm
Bangun IV=
Luas Bangun= 16
Dengan Metode Dynamic Programming : Mengoptimalkan penyelesaian suatu masalah tertentu yang diuraikan menjadi bagian-bagian lebih kecil yang terkait satu sama lain.Langkah-langkahnya: 1. Membagi 4 bangun utama (A) seperti yang ditunjukkan seperti di bawah ini:
2. Untuk mengisi kotak bagian atas yaitu dengan meggabungkan bangun III dan IV Sehingga terbentuk:
4. Mengisi bagian kosog yang ada pada bagian atas dengan bangun III.
5. Mengisi bangun kosong bagian bawah dengan meggabungkan banggun III dan IV yaitu:
8. Memberi tanda pada bagian yang kosong untuk mempermudah dalam perhitungan sisa.
Jadi sisa bangun adalah 53 cm dari luas bangun utama yaitu 525 cm dengan menggunakan 41 bangun lebih efektif dari pada dynamic programming.