Penyelesaian Permainan Minesweeper dengan Algoritma BFS dengan Optimasi Algoritma Greedy

dokumen-dokumen yang mirip
PENERAPAN ALGORITMA BFS DALAM PEMECAHAN PERMAINAN MINESWEEPER

Penerapan DFS dan BFS dalam Pencarian Solusi Game Japanese River IQ Test

Penggunaan Algoritma DFS dan BFS pada Permainan Three Piles of Stones

Pencarian Pohon Solusi Permainan Alchemy Menggunakan Algoritma BFS dan DFS

Penggunaan Algoritma Greedy untuk menyelesaikan Permainan Othello

PERBANDINGAN APLIKASI ALGORITMA BRUTE-FORCE DAN KOMBINASI ALGORITMA BREADTH FIRST SEARCH DAN GREEDY DALAM PENCARIAN SOLUSI PERMAINAN TREASURE HUNT

Analisis Pengimplementasian Algoritma Greedy untuk Memilih Rute Angkutan Umum

Penerapan Algoritma DFS pada Permainan Sudoku dengan Backtracking

Penerapan Algoritma BFS dan DFS dalam Mencari Solusi Permainan Rolling Block

Penerapan Algoritma Backtracking untuk Menyelesaikan Permainan Hashiwokakero

Penerapan Algoritma Greedy untuk Permainan Flood It

Penerapan Algoritma DFS dan BFS untuk Permainan Wordsearch Puzzle

Memecahkan Puzzle Hidato dengan Algoritma Branch and Bound

Perbandingan Algoritma Brute Force dan Breadth First Search dalam Permainan Onet

Penerapan Pohon dengan Algoritma Branch and Bound dalam Menyelesaikan N-Queen Problem

Penerapan Algoritma Backtrack pada Knight s Tour

Implementasi Algoritma DFS pada Pewarnaan Gambar Sederhana Menggunakan Bucket tool

PENERAPAN ALGORITMA BRANCH AND BOUND DALAM MENENTUKAN RUTE TERPENDEK UNTUK PERJALANAN ANTARKOTA DI JAWA BARAT

Penerapan Algoritma Greedy dan Algoritma BFS untuk AI pada Permainan Greedy Spiders

Penerapan Algoritma Runut-balik pada Permainan Math Maze

Perbandingan Algoritma Depth-First Search dan Algoritma Hunt-and-Kill dalam Pembuatan Labirin

Penerapan Algoritma BFS dan DFS dalam Permainan Ular Tangga

Pelacakan dan Penentuan Jarak Terpendek terhadap Objek dengan BFS (Breadth First Search) dan Branch and Bound

Penyelesaian Permasalahan Nonogram dengan Algoritma Runut Balik

dengan Algoritma Branch and Bound

Pembahasan Pencarian Lintasan Terpendek Menggunakan Algoritma Dijkstra dan A*

Penentuan Keputusan dalam Permainan Gomoku dengan Program Dinamis dan Algoritma Greedy

Penerapan Logika dan Peluang dalam Permainan Minesweeper

Penerapan Algoritma Brute Force dan Backtracking pada Permainan Skycraper

Aplikasi Algoritma Branch and Bound dalam Pencarian Solusi Optimum Job Assignment Problem

IMPLEMENTASI ALGORITMA GREEDY PADA PERMAINAN OTHELLO

Pencarian Solusi Permainan Flow Free Menggunakan Brute Force dan Pruning

Penerapan Algoritma Branch and Bound untuk Optimasi Rute Penempelan Poster di Papan Mading ITB

Penerapan Algoritma Branch and Bound untuk Penentuan Jalur Wisata

PENGGUNAAN ALGORITMA GREEDY PADA MESIN PENCARI

Menentukan Susunan Terbaik Tim Proyek dengan Algoritma Branch and Bound

Penggunaan Algoritma Pathfinding pada Game

Aplikasi Algoritma Traversal Dalam Binary Space Partitioning

PERBANDINGAN ALGORITMA GREEDY DAN BRUTE FORCE DALAM SIMULASI PENCARIAN KOIN

Pencarian Solusi Optimal dalam Permainan Congklak dengan Program Dinamis

Implementasi Algoritma DFS pada permainan Monument Valley

Penerapan Algoritma Greedy untuk Permainan Halma

Aplikasi Graf Breadth-First Search Pada Solver Rubik s Cube

Implementasi Algoritma Greedy, BFS, Branch and Bound, dan Metode Heuristik dalam Permainan Reversi

Implementasi Algoritma BFS dan DFS dalam Penyelesaian Token Flip Puzzle

ANTIMAGIC PUZZLE. Alwi Afiansyah Ramdan

Penerapan Algoritma Greedy dan Breadth First Search pada Permainan Kartu Sevens

METODE BRANCH AND BOUND UNTUK MENEMUKAN SHORTEST PATH

ALGORITMA PENCARIAN SIMPUL SOLUSI DALAM GRAF

Penerapan strategi BFS untuk menyelesaikan permainan Unblock Me beserta perbandingannya dengan DFS dan Branch and Bound

Penerapan Algoritma Brute force dan Greedy pada Penjadwalan Disk

PENERAPAN ALGORITMA BACKTRACKING PADA PERMAINAN WORD SEARCH PUZZLE

Perbandingan Algoritma Brute Force dan Backtracking dalam Permainan Word Search Puzzle

Penerapan Algoritma Greedy Pada Game Tower Defense: Tower of Greece

Aplikasi Algoritma Greedy untuk Pergerakan Musuh pada Permainan Pac-Man

Implementasi Algoritma Greedy dalam Pembagian kerja pada Mesin yang Identik

Perbandinganan Penggunaan Algoritma Greedy dan Modifikasi Algoritma Brute Force pada Permainan Collapse XXL

SOLUSI ALGORITMA BACKTRACKING DALAM PERMAINAN KSATRIA MENYEBRANG KASTIL

Penyelesaian Sum of Subset Problem dengan Dynamic Programming

Analisis Beberapa Algoritma dalam Menyelesaikan Pencarian Jalan Terpendek

Penyelesaian Permainan Sliding Puzzle 3x3 Menggunakan Algoritma Greedy Dengan Dua Fungsi Heuristik

Pemodelan Pembagian Kelompok Tugas Besar Strategi Algoritma dengan Masalah Sum of Subset

Algoritma Puzzle Pencarian Kata

PENERAPAN ALGORITMA BFS PADA CHINESE SLIDE BLOCK PUZZLE (KLOTSKI)

Perbandingan BFS, DFS dan Greedy pada Permainan Logika Crossing Bridge

Penerapan Algoritma Greedy dalam Pencarian Rantai Penjumlahan Terpendek

Penerapan Algoritma Backtracking pada Knight s Tour Problem

Penerapan Algoritma Runut-Balik (Backtracking) pada Permainan Nurikabe

ALGORITMA GREEDY DALAM PERMAINAN DOTS AND BOXES

Penerapan Algoritma Greedy pada Intelegensia Buatan untuk Transfer Pemain dalam Permainan Simulasi Sepakbola

Strategi Algoritma Penyelesaian Puzzle Hanjie

Penggunaan Algoritma Greedy untuk Mencari Solusi Optimal dalam Permainan Brick Breaker

Implementasi Algoritma Greedy pada Permainan Ludo

Pemanfaatan Algoritma BFS pada Graf Tak Berbobot untuk Mencari Jalur Terpendek

Penerapan Algoritma Greedy Best First Search untuk Menyelesaikan Permainan Chroma Test : Brain Challenge

Branch and Bound untuk Rute Terpendek Tur Pengenalan Labtek V Gedung Benny Subianto Chita Najmi Nabila /

Pencarian Solusi Permainan Fig-Jig Menggunakan Algoritma Runut-Balik

Aplikasi Algoritma Greedy pada Optimasi Pelaksanaan Misi dalam Permainan Assassins Creed : Revelations

Algoritma Divide and Conquer untuk Optimasi Pemberian Efek Aura pada Permainan DotA (Defense of the Ancient)

Menentukan Titik Evakuasi Selanjutnya bagi Sekelompok Regu Tim SAR dengan Algoritma Branch and Bound

PENGUNAAN DUA VERSI ALGORITMA BACKTRACK DALAM MENCARI SOLUSI PERMAINAN SUDOKU

Pembuktian Kesulitan Hamiltonian Cycle Problem dengan Transformasi 3-Satisfiability Problem

SOLUSI PERMAINAN CHEMICALS DENGAN ALGORITMA RUNUT BALIK

Penggabungan Algoritma Brute Force dan Backtracking dalam Travelling Thief Problem

Penerapan Algoritma Greedy pada Permainan Tower Defense

Algoritma Branch & Bound untuk Optimasi Pengiriman Surat antar Himpunan di ITB

Aplikasi Algoritma Greedy, BFS dan DFS pada Penyelesaian Permainan Mahjong Solitaire

Penerapan Algoritma Runut-Balik untuk Menyelesaikan Permainan Pencarian Kata

PERBANDINGAN ALGORITMA BFS DAN DFS DALAM PEMBUATAN RUTE PERJALANAN OBJEK PERMAINAN 2 DIMENSI

Penentuan Lokasi Pemasaran Produk dengan Media Periklanan Menggunakan Algoritma Greedy

Menentukan Susunan Pengambil Tendangan Penalti dalam Skema Adu Penalti pada Pertandingan Sepak Bola dengan Algoritma Branch and Bound

Penerapan Algoritma Runut Balik pada Pathuku Games

Penggunaan Algoritma Divide and Conquer Dalam Pewarnaan Graf

Menentukan Starting Lineup Futsal Terbaik dengan Algoritma Branch and Bound

Penerapan Algoritma Greedy dalam Permainan Tetris

PERMAINAN KNIGHT S TOUR DENGAN ALGORITMA BACKTRACKING DAN ATURAN WARNSDORFF

Pencarian Solusi Permainan Pipe Puzzle Menggunakan Algoritma Backtrack

Penggunaan Algoritma Greedy Dalam Perancangan Papan Teka Teki Silang

Penerapan Algoritma Brute Force di Permainan Nonogram

Penerapan Algoritma Greedy dalam Permainan Othello

Transkripsi:

Penyelesaian Permainan Minesweeper dengan Algoritma BFS dengan Optimasi Algoritma Greedy Erdiansyah Fajar Nugraha / 13508055 Program Studi Teknik Informatika Sekolah Teknik Elektro dan Informatika Institut Teknologi Bandung, Jl. Ganesha 10 Bandung 40132, Indonesia 18055@students.if.itb.ac.id Minesweeper merupakan salah satu permainan yang sudah terinstall pada sistem operasi Windows. Permasalah pada permainan ini adalah menemukan seluruh ranjau bom pada kumpulan petak yang ada tanpa meledakannya. Cara menemukan ranjau adalah menggunakan petunjuk yang ada pada petak yang terbuka (non ranjau), petak tersebut berisikan angka yang menyatakan banyaknya ranjau yang ada disekitar petak yang berisikan angka tersebut. Maka untuk memecahkan masalah ini dibutuhkan cara tertentu, yaitu menggunakan Algoritma BFS (Breadth First Search) atau Pencarian Melebar, dan optimasi pemilihan petak dengan Algoritma Greedy. Algoritma BFS memiliki karakteristik pencarian melebar, yaitu mengunjungi seluruh anak-anak dari suatu simpul atau keadaan status dahulu baru setelah itu memperluasnya kembali. Algoritma ini digunakan sebagai bagian dari pemecahan masalah, yaitu untuk memfasilitasi proses penelusuran petak-petak yang ada pada papan minesweeper. Algoritma Greedy ini digunakan pada saat pemilihan petak jika tidak dapat dipastikan posisi ranjau relatif terhadap petak angka yang terbuka. Menurut penelitian, masalah minesweeper tergolong ke dalam masalah NP-complete. Hal ini dikarenakan masalah minesweeper tidak dapat diselesaikan dalam orde waktu polinomial. Kata Kunci : Minesweeper, BFS, Greedy, NP-complete. I. PENDAHULUAN Pemecahan permainan minesweeper merupakan salah satu masalah yang termasuk ke dalam golongan masalah NP-complete. Bahkan Clay Mathematics Institute of Chambridge, Massachusetts (CMI) menggolongkannya ke dalam salah satu dari tujuh masalah millenium yang dikenal dengan nama Prize Problems. CMI akan menganugrahkan $1 juta bagi yang dapat memecahkan salah satu masalah tersebut terkait hal masalah P = NP. Karena minesweeper termasuk ke dalam NP-complete, tidak ada algoritma yang dapat digunakan untuk memecahkan masalah tersebut dalam waktu polinomial. Walaupun begitu, tetap ada langkah-langkah yang dapat digunakan untuk mencoba memecahkan masalah tersebut. Makalah ini mencoba meberikan salah satu alternatif penyelesaian permainan minesweeper dengan mengunakan algoritma BFS dengan optimasi pemilihan petak menggunakan algoritma Greedy II. MINESWEEPER Pada awal permainan pemain dihadapkan dengan kumpulan petak atau kotak yang masih tertutup (belum bertanda apapun). Jumlah petak atau kotak menentukan skill yang dipilih pemain, tingkat skill tersebut tidak hanya menentukan banyaknya petak namun juga menentukan jumlah ranjau yang ada pada kumpulan petak tersebut. Jika pemain mengklik salah satu petak yang bukan ranjau maka akan petak tersebut akan berisikan angka dan akan terbuka petak-petak yang berisikan angka disekitar petak yang diklik tersebut. Angka pada petak tersebut menyatakan banyaknya ranjau disekitar petak tersebut, maksimal angka yang tertera pada petak adalah 8, karena sebuah petak hanya akan memiliki 8 petak tetangga. Dengan menggunakan fasilitas yang terdapat pada minesweeper yaitu mengklik kedua tombol mouse pemain dapat menyimpulkan petak mana yang ranjau dan petak mana yang bukan ranjau, berdasarkan informasi pada petak yang berisi angka tersebut. Namun ada kalanya pemain harus menebak kira-kira petak mana yang bukan Pemain dapat menandai petak yang dipastikan ranjau dengan mengklik kanan tombol mouse, dan petak tersebut akan ditandai dengan gambar bendera, dan dapat menandai petak yang diduga ranjau dengan mengklik kanan tombol mouse 2 kali hingga muncul tanda (?). Hal ini dapat dilakukan pemain untuk memudahkan dalam bermain agar tidak melakukan kesalahan yang tidak penting yaitu mengklik petak yang jelas-jelas adalah

urutan kombinasi dengan pencarian secara sistematis melalui setiap solusi. Dengan kata lain, ia akan melakukan pencarian secara mendalam pada keseluruhan graf atau urutan tanpa memperhatikan tujuan hingga menemukan tujuan tersebut. Algoritma ini tidak menggunakan algoritma heuristik.\ Dari sudut pandang algoritma, semua simpul anak didapatkan dengan memperluas simpul yang ditambahkan pada queue FIFO. Gambar 1 Gambar Permainan Minesweeper tingkat advance 3.1 NP-Complete III. DASAR TEORI NP Problem adalah himpunan persoalan keputusan yang dapat diselesaikan oleh algoritma non-deterministik dalam waktu polinom. Algoritma non-deterministik adalah algoritma yang berhadapan dengan beberapa opsi pilihan, dan algoritma memiliki kemampuan untuk menerka opsi pilihan yang tepat. Kebanyakan persoalan keputusan adalah NP. Semua persoalan P juga adalah NP, sebab tahap menerka tidak terdapat di dalam persoalan P. Karena itu, P adalah himpunan bagian dari NP. Namun, belum ada yang bisa membuktikan apakah masalah P = NP atau P NP, sehingga ada banyak persoalan yang dapat di pecahkan secara mangkus dengan algoritma yang kebutuhan waktunya polinom. Namun kenyataannya, banyak ahli yang telah gagal menemukan algoritma waktu-polinom untuk persoalan NP. Karena itu cukup aman jika kita menduga-duga bahwa P NP. NP-Complete (NPC) adalah persoalan NP yang paling sulit. Sebuah persoalan X dikatakan NPC jika: 1. X termasuk ke dalam kelas NP 2. Setiap persoalan di dalam NP dapat direduksi dalam waktu polinom menjadi X. 3.2 Algoritma BFS Pada teori graf, BFS adalah algoritma pencarian pada graf yang dimulai dari simpul akar dan menelusuri seluruh simpul tetangganya. Kemudian untuk setiap simpul terdekat, algoritma ini menelusuri simpul tetangganya yang belum ditelusuri, dan seterusnya hingga menemukan solusi. Dengan metode BFS, simpul akar dibangkitkan pertama kali, kemudian simpul anak-anaknya, kemudia successor dari setiap simpul anak, dan seterusnya. Secara umum, semua simpul pada aras d dibangkit kan terlebih dahulu sebelum simpul-simpul pada aras d+1. 3.3 Algoritma Greedy Algoritma greedy membentuk solusi langkah per langkah (step by step). Terdapat banyak pilihan yang perlu dieksplorasi pada setiap langkah solusi. Oleh karena itu, pada setiap langkah harus dibuat keputusan terbaik dalam menentukan pilihan. Pendekatan yang digunakan di dalam algoritma greedy adalah membuat pilihan yang tampaknya memberikan perolehan yang terbaik, yaitu dengan membuat pilihan optimum lokal pada setiap langkah dengan harapan bahwa sisanya mengarah ke solusi optimum global. IV. ANALISIS PERMAINAN MINESWEEPER Terdapat banyak petak bernomor dengan pola tertentu yang mungkin ada selama permainan, pola tersebut hanyak memiliki satu kemungkinan peletakan ranjau di sekitar petak tersebut. Sehingga pasti ada petak yang benar-benar harus ditebak apakah ranjau atau bukan. Karena dalam permainan ini waktu merupakan bagian dari permainan, selain dapat diselesaikan namun juga harus diselesaikan dengan waktu yang singkat. Ada beberapa analisis untuk memecahkan masalah tersebut. 4.1 Analisis Single-Square Ada dua kasus khusus yang dapat dianalisis dengan metode ini: - Jika jumlah petak unlcliked (blank atau memiliki tanda bendera) yang bertetangga sama dengan angka pada petak bernomor, maka semua petak unclicked tersebut adalah BFS adalah metode pencarian yang bertujuan untuk memperluas dan memeriksa semua simpul pada graf atau

Contoh : Gambar 2 petak yang ditandai coretan merah adalah - Untuk petak bernomor berapapun, jika jumlah ranjau yang telah ditemukan atau ditandai sama dengan angka pada petak maka, petak lain yang bertetangga dengan petak bernomor tersebut bukan Gambar 4 Contoh analisis multi-square Pada bagian yang diberi kotak hitam terdapat 3 petak bernomor yang bertetangga, maka dicoba setiap kombinasi dengan brute force dan menghasilkan 4 konfigurasi yang valid, {a,b,c,d,e} = {1,0,0,0,1}, {0,1,0,0,1}, {1,0,0,1,0} dan {0,1,0,1,0}, angka 1 menandakan Dari hasil tersebut dapat disimpulkan variabel c tidak pernah ranjau, sehingga petak c aman untuk dibuka. V. PENERAPAN ALGORITMA BFS DAN OPTIMASI PEMILIHAN PETAK DENGAN ALGORITMA GREEDY Gambar 3 petak dengan noda merah aman dibuka. 4.2 Analisis Multiple Square Untuk analisis yang lebih kompleks, pemain perlu mempertimbangkan lebih dari satu petak sekaligus. Beberapa strategi yang digunakan adalah : - Jika terdapat dua angka bertetangga, selisih antara kedua angka tersebut sama dengan jumlah ranjau untuk tiga petak yang bertetangga dengan masingmasing petak yang tidak bertetangga dengan anka lain. - Dengan metode yang sama, kadang-kadang tidak dapat diketahui bahwa terdapat sejumlah ranjau pada sejumlah petak dan informasi tersebut dapat digunakan untuk menemukan informasi mengenai petak lain. Variabel yang tak dikenal adalah petak yang belum terbuka dan pembatasnya adalah petak tetangga yang telah terbuka. Algoritma pada analisa ini terdiri dari mencoba setiap kombinasi yang ranjau yang memenuhi setiap angka pada petak tetangga, dari hal tersebut dibuatlah kesimpulan. Algoritma BFS ini digunakan untuk memecahkan masalah minesweeper yaitu dengan cara menelusuri seluruh petak yang memiliki tetangga ranjau yang dapat ditentukan dengan pasti. Untuk petak-petak yang tidak dapat dipastikan ranjau atau bukan digunakanlah algoritma greedy. Algoritma BFS ini akan menelusuri petak pada papan secara rekursif sehingga petak-petak tidak dapat ditelusuri lagi. Papan akan membuka petaknya jika petak tersebut aman untuk dibuka dan menandai dengan bendera jika peta tersebut adalah Jika pada penelusurannya menemukan sebuah petak yang belum dapat dipastikan makan petak tersebut akan disimpan dalam sebuah queue yang nantinya akan diproses lebih lanjut. Pseudo code Algoritma BFS untuk minesweeper cekpetak(input pt : petak) { belumpasti false If (pt <> petakkosong)then {basis} belumpasti ceksinglesquare(pt) if (not belumpasti)then insertqueue(pt) else //cek petak tetangga {rekurens}

i traversal [1..8] pttemp pt(i) if (pttemp = belumdibuka or pttemp = petakbernomor) then cekpetak(pttemp) } Fungsi ceksinglesqure adalah fungsi yang mengecek kepastian petak-petak tetangga dari petak yang dikunjungi. Fungsi ini menggunakan analisa singlesquare. Sedanggakn prosedur insertqueue adalah memasukkan petak ke dalam queue untuk dicek dengan algoritma greedy. Untuk petak-petak yang ada dalam queue maka akan diproses dengan algoritma greedy untuk ditentukan apakah petak tersebut aman untuk dibuka atau tidak. Algoritma greedy disini menghitung persentase kemungkinan petak itu ranjau berdasarkan analisis multisqure yang telah dijelaskan diatas, kemudian dipilihlah petak yang memiliki persentase ranjau yang paling kecil. Prosesnya yaitu menelusuri queue mulai dari head. Jika petak tersebut memiliki presentase yang paling kecil maka petak tersebut akan dibuka dan petak tersebut dihapus dari queue, jika petak head bukan petak yang memiliki persentase paling kecil maka petak tersebut dipindah ke tail. Pseudo code Algoritma greedy procedure TelusurPetakInQ() { bukanmin false min persentasemin(q) n panjangq() selesai false pertama true while (not selesai)do headq headqueue() if(min = headq)then min persentasemin(q) else headq deletequeue() addqueue(headq) //penanda 1 siklus if(pertama)then patokan headq pertama false if(isemptyqueue() or (headq = patokan and panjangqueue() = n))then selesai true else if (headq = patokan)then {siklus baru} n panjangqueue() pertama true endwhile } Fungsi persentasemin adalah fungsi yang mengembalikan petak dengan persentase minimun berdasarkan algoritma greedy, petak yang memiliki persentase minimum adalah petak yang kemungkinan petak tersebut ranjau adalah paling kecil berdasarkan analisis multi-square. VI. ANALISIS SOLUSI Algoritma BFS pada persoalana ini digunakan sebagai metode penelusuran petak-petak. Algoritma ini dipilih karena sifat mebangkitkan seluruh kemungkinan sehingga proses penelusuran petak hingga petak yang tidak dapat dipastikan ranjau atau bukan dapat segera tercapai, dan dapat ter-list seluruh petak yang belum pasti Algoritma Greedy pada persoalan ini digunakan sebagai metode pemilihan petak mana yang aman untuk dibuka berdasarkan analisis multi-square. Secara keseluruhan, solusi ini belum dapat menghasilkan hasil yang akurat. Karena ada saatnya program tidak dapat memperluas petak yang dapat ditelusuri sehingga program harus mengambil petak selanjutnya secara random. Akibatnya terdapat kemungkinan program salah mengambil petak dan petak yang diambil tersebut adalah Algoritma greedy disini juga belum optimal karena mungkin saja persentase yang terkecil petak bukan ranjau tersebut adalah salah. Seperti yang sudah dijelaskan sebelumnya, permainan minesweeper ini termasuk masalah NP-complete dan pemecahan yang telah dicoba ini belum dapat memberikan solusi polinomial. Hal ini dapat dilihat dari kompleksitas algoritma BFS sendiri. VII. KESIMPULAN Algoritma BFS dengan optimasi Algoritma greedy dapat digunakan sebagai bagian dari pemecahan masalah minesweeper. Secara keseluruhan, solusi yang ditawarkan belum menjadi solusi yang akurat dan belum dapat memberikan waktu pemecahan polinomial.

REFERENSI [1] http://en.wikipedia.org/wiki/breadth-first_search [2] http://en.wikipedia.org/wiki/minesweeper_%28computer_game% 29 [3] Munir, Rinaldi. Diktat Kuliah IF3051 Startegi Algoritma. Program Studi Teknik Informatika ITB 2009 PERNYATAAN Dengan ini saya menyatakan bahwa makalah yang saya tulis ini adalah tulisan saya sendiri, bukan saduran, atau terjemahan dari makalah orang lain, dan bukan plagiasi. Bandung, 8 Desember 2010 Erdiansyah Fajar Nugraha (13508055)