Penerapan Algoritma Backtracking untuk Menyelesaikan Permainan Hashiwokakero

dokumen-dokumen yang mirip
Penerapan Algoritma DFS pada Permainan Sudoku dengan Backtracking

Penerapan Algoritma Runut-Balik (Backtracking) pada Permainan Nurikabe

PENERAPAN ALGORITMA BACKTRACKING PADA PERMAINAN WORD SEARCH PUZZLE

Pencarian Solusi Permainan Flow Free Menggunakan Brute Force dan Pruning

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

PERMAINAN KNIGHT S TOUR DENGAN ALGORITMA BACKTRACKING DAN ATURAN WARNSDORFF

Penyelesaian Permasalahan Nonogram dengan Algoritma Runut Balik

Penerapan Algoritma Brute-Force serta Backtracking dalam Penyelesaian Cryptarithmetic

UNTUK PEMECAHAN MASALAH PADA PERMAINAN HASHIWOKAKERO

Implementasi Algoritma DFS pada Pewarnaan Gambar Sederhana Menggunakan Bucket tool

Perbandingan Algoritma Brute Force dan Breadth First Search dalam Permainan Onet

Penerapan Algoritma Runut-Balik untuk Menyelesaikan Permainan Pencarian Kata

Aplikasi Algoritma Runut Balik dalam Pembangkitan Elemen Awal Permainan Sudoku

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

Pemanfaatan Algoritma Runut-Balik dalam Menyelesaikan Puzzle NeurOn dalam Permainan Logical Cell

Penerapan Algoritma Backtracking pada Knight s Tour Problem

Implementasi Algoritma Runut Balik dalam Pengenalan Citra Wajah pada Basis Data

Penggabungan Algoritma Brute Force dan Backtracking dalam Travelling Thief Problem

Implementasi Algoritma Backtracking untuk Memecahkan Puzzle The Tile Trial pada Permainan Final Fantasy XIII-2

Penggunaan Algoritma Backtrack dan Aturan Warnsdorff Untuk Menyelesaikan Knight s Tour Problem

Pencarian Solusi Permainan Fig-Jig Menggunakan Algoritma Runut-Balik

Menyelesaikan Permainan Wordament Menggunakan Algoritma Backtracking

Penerapan Algoritma Backtracking pada Game The Lonely Knight

I. PENDAHULUAN II. DASAR TEORI. Contoh lainnya: Solusi: 0= V,1= I,2= O,3= R, 4= N,5= L,7= A,8= F,9= E.

Pencarian Solusi Permainan Pipe Puzzle Menggunakan Algoritma Backtrack

Penerapan Algoritma Brute Force dan Backtracking pada Permainan Skycraper

PENERAPAN ALGORITMA RUNUT BALIK DALAM PERMAINAN TEKA-TEKI SILANG

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

Perbandingan Algoritma Brute Force dan Backtracking dalam Permainan Word Search Puzzle

Algoritma Backtracking Pada Permainan Peg Solitaire

ANTIMAGIC PUZZLE. Alwi Afiansyah Ramdan

SOLUSI ALGORITMA BACKTRACKING DALAM PERMAINAN KSATRIA MENYEBRANG KASTIL

Implementasi Algoritma BFS dan DFS dalam Penyelesaian Token Flip Puzzle

Penerapan Algoritma DFS dan BFS untuk Permainan Wordsearch Puzzle

SOLUSI PERMAINAN CHEMICALS DENGAN ALGORITMA RUNUT BALIK

Analisis Beberapa Algoritma dalam Menyelesaikan Pencarian Jalan Terpendek

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

Penyelesaian Sum of Subset Problem dengan Dynamic Programming

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

Memecahkan Puzzle Hidato dengan Algoritma Branch and Bound

Penerapan Algoritma BFS dan DFS dalam Permainan Ular Tangga

Analisis Penerapan Algoritma Backtracking Pada Pencarian Jalan Keluar di Dalam Labirin

Implementasi Algoritma Runut Balik pada Permainan Texas Hold em Poker

Penerapan Algoritma Backtrack pada Knight s Tour

Pembuatan Musik Tanpa Pola Dengan Menggunakan Algoritma Runut Balik

Permasalahan Clique dalam Graf

PENERAPAN ALGORITMA RUNUT-BALIK (BACKTRACKING) DALAM PENYELESAIAN PERMAINAN SUDOKU

PENGGUNAAN ALGORITMA BACKTRACKING DALAM PENCARIAN KOEFISIEN ROOK POLYNOMIAL

Penerapan Algoritma Backtracking pada Pewarnaan Graf

Penerapan Algoritma DFS dalam Menyelesaikan Permainan Buttons & Scissors

Algoritma Backtracking Pada Logic Game : Family Crisis (Game Penyebrangan)

Pendeteksian Deadlock dengan Algoritma Runut-balik

Aplikasi Algoritma Brute Force dan Backtracking pada Permainan Slitherlink

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

Penerapan Algoritma Flood Fill untuk Mengurangi Ruang Pencarian pada Pencarian Solusi Puzzle Pentomino

PENGUNAAN DUA VERSI ALGORITMA BACKTRACK DALAM MENCARI SOLUSI PERMAINAN SUDOKU

Penggunaan Algoritma DFS dan BFS pada Permainan Three Piles of Stones

ALGORITMA RUNUT-BALIK (BACKTRACKING ALGORITHM) PADA MASALAH KNIGHT S TOUR

Penggunaan Algoritma Backtracking pada Permainan Mummy Maze

Implementasi Algoritma DFS pada permainan Monument Valley

Penerapan Algoritma Runut-balik pada Permainan Math Maze

PENGGUNAAN EXHAUSTIVE SEARCH SEBAGAI SOLUSI PERMAINAN SCRAMBLE

Algoritma Puzzle Pencarian Kata

Penerapan Algoritma Runut-Balik dan Graf dalam Pemecahan Knight s Tour

Penyelesaian Permainan 3 missionaries and 3 cannibals Dengan Algoritma Runut-Balik

Penyelesaian Permainan Minesweeper dengan Algoritma BFS dengan Optimasi Algoritma Greedy

Aplikasi Algoritma Runut-balik untuk Penyelesaian Jenis Permainan Smart Mike pada Permainan Mike 2 in 1

Pencarian Pohon Solusi Permainan Alchemy Menggunakan Algoritma BFS dan DFS

Algoritma Runut-balik (Backtracking) Bahan Kuliah IF2251 Strategi Algoritmik Oleh: Rinaldi Munir

Penyelesaian Game Lights Out dengan Algoritma Runut Balik

MAKALAH STRATEGI ALGORITMIK (IF 2251) ALGORITMA RUNUT BALIK DALAM GAME LABIRIN

Pembentukan Pohon Pencarian Solusi dalam Persoalan N-Ratu (The N-Queens Problem)

Penerapan Algoritma Branch and Bound untuk Penentuan Jalur Wisata

Penerapan Algoritma BFS, DFS, DLS dan IDS dalam Pencarian Solusi Water Jug Problem

Oleh Lukman Hariadi

Aplikasi Algoritma Traversal Dalam Binary Space Partitioning

PENYELESAIAN PERMAINAN SUDOKU DENGAN ALGORITMA BRUTEFORCE,BACKTRACKING,dan BACKTRACKING DENGAN OPTIMASI

PENYELESAIAN TEKA-TEKI PENYUSUNAN ANGKA MENGGUNAKAN ALGORITMA RUNUT BALIK

Penggunaan Strategi Algoritma Backtracking pada Pencarian Solusi Puzzle Pentomino

Penerapan Algoritma Greedy dalam Pencarian Rantai Penjumlahan Terpendek

Penerapan Algoritma BFS dan DFS dalam Mencari Solusi Permainan Rolling Block

Penggunaan Algoritma Pathfinding pada Game

Strategi Algoritma Penyelesaian Puzzle Hanjie

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

Aplikasi Algoritma Greedy untuk Pergerakan Musuh pada Permainan Pac-Man

IMPLEMENTASI ALGORITMA GREEDY PADA PERMAINAN OTHELLO

Aplikasi Branch and Bound Pada Pencarian Jalan Pada Software Navigasi

ALGORITMA PENCARIAN SIMPUL SOLUSI DALAM GRAF

Analisis Pengimplementasian Algoritma Greedy untuk Memilih Rute Angkutan Umum

Algoritma Runut-balik (Backtracking)

Penerapan Algoritma Greedy Pada Game Tower Defense: Tower of Greece

Penerapan Algoritma Greedy dan Backtrackng Dalam Penyelesaian Masalah Rubik s Cube

Penerapan Algoritma Runut Balik pada Pathuku Games

Penerapan Algoritma Greedy pada Permainan Tower Defense

Penerapan strategi runut-balik dalam penyelesaian permainan puzzle geser

Penerapan Algoritma Greedy pada Permainan Bubble Breaker

Perbandingan BFS, DFS dan Greedy pada Permainan Logika Crossing Bridge

Penerapan Algoritma Branch & Bound dan Backtracking pada Game Flow

Penggunaan Algoritma Greedy untuk menyelesaikan Permainan Othello

Algoritma Runut-balik (Backtracking) Bagian 1

Transkripsi:

Penerapan Algoritma Backtracking untuk Menyelesaikan Irfan Kamil 13510001 1 Program Studi Teknik Informatika Sekolah Teknik Elektro dan Informatika Institut Teknologi Bandung, Jl. Ganesha 10 Bandung 40132, Indonesia 1 13510001@std.stei.itb.ac.id Abstrak Makalah ini berisi tentang pembahasan solusi permainan hashiwokakero dengan algoritma backtracking. Pada makalah ini terdapat pseudocode yang dirancang dari solusi permainan hashiwokakero dan analisis pada algoritma yang dibuat apakah mangkus atau tidak. Kata Kunci hashiwokakero solver, backtracking, pseudocode, kompleksitas waktu I. PENDAHULUAN Hashiwokakero[1] adalah permainan yang dibuat oleh Nikoli. Pada permainan ini, pemain harus membuat beberapa jembatan yang menghubungkan dua buah pulau. Pulau digambarkan sebagai angka yang dilingkari dan jembatan adalah garis lurus yang menghubungkan dua buah pulau. Gambar 1 Contoh persoalan Hashiwokakero Angka pada lingkaran menyatakan jumlah jembatan yang menghubungakan lingkaran tersebut dengan tetangganya yang harus dipenuhi. Jumlah maksimal jembatan yang menghubungkan dua buah pulau adalah dua jembatan. Dua buah jembatan tidak boleh saling memotong. Pada akhirnya, seluruh pulau akan saling terhubung. Tidak boleh ada himpunan pulau yang terisolasi, tidak terhubung dengan pulau lain. Gambar 2 Contoh solusi Hashiwokakero II. DASAR TEORI Backtracking adalah algoritma yang berbasis pada DFS untuk mencari solusi yang lebih mangkus. Secara sistematis, algoritma backtracking mencari solusi persoalan diantara kemungkinan solusi yang ada. Algoritma Backtracking memangkas simpul yang tidak mengarah ke solusi. [4] A. Solusi Persoalan Solusi dinyatakan sebagai vektor dengan n-dimensi. n adalah jumlah kemungkinan ruang nilai. X : vektor solusi x i : nilai pada komponen ke-i S i : himpunan nilai yang mungkin pada komponen ke-i X = (x 1, x 2,, x n ), x i S i B. Fungsi Pembangkit Fungsi pembangkit membangkitkan nilai pada suatu komponen vektor solusi. Fungsi pembangkit dinyatakan sebagai T(k). C. Fungsi Pembatas Fungsi pembatas membatasi solusi yang tidak mungkin menjadi solusi. Fungsi ini bernilai true apabila suatu vektor yang diperoleh mengarah ke solusi dan bernilai false

apabila tidak. Jika bernilai true, pembangkitan nilai untuk x k+1 dilanjutkan. Jika bernilai false, vektor tersebut dibuang dari kemungkinan solusi dan dilakukan backtrack pada x k. III. PENERAPAN BACKTRACKING Setiap pulau dianggap sebagai node dan setiap hubungan node yang mungkin dianggap sebagai edge. Edge ini dapat berari tidak ada jembatan, atau ada jembatan yang menghubungkan dua buah node. Edge yang bukan merupakan jembatan diberi nilai 0, edge yang mengandung jembatan diberi nilai 1 atau 2, sesuai jumlah jembatan. Setiap edge memiliki status apakah sudah diproses atau belum. X : nilai seluruh edge yang merupakan solusi x i : nilai pada edge ke-i S i : {0, 1, 2} n : jumlah edge pada permainan k : jumlah edge yang sudah diproses dengan nilai node Cara melakukan pengecekan ini adalah dengan meninjau dua buah node bertetangga yang dihubungkan oleh edge ke-k. Untuk kedua node: - Apabila semua edge pada node tersebut sudah diproses dan total nilai edge tersebut sama dengan nilai node tersebut, kriteria ini terpenuhi. - Apabila semua edge pada node tersebut sudah diproses dan total nilai edge tersebut tidak sama dengan nilai node tersebut, kriteria ini tidak terpenuhi. - Apabila ada edge yang belum diproses, kalikan dengan 2 jumlah node yang belum diproses lalu tambahkan dengan nilai node yang sudah diproses. Apabila nilai ini dibawah nilai node, kriteria ini tidak terpenuhi. Apabila nilai ini diatas sama dengan nilai node, kriteria ini terpenuhi. - Selain syarat di atas, kriteria tidak terpenuhi 2. Tidak ada suatu jembatan yang memotong jembatan lain Cara melakukan pengecekan ini adalah dengan membandingkan edge ke-k dengan semua edge sebelumnya Untuk setiap edge ke-1 hingga edge ke-k-1: - Apabila edge berpotongan dengan edge ke-k, kriteria tidak terpenuhi Gambar 3 Edge yang mungkin pada solusi A. Solusi Persoalan Solusi didapatkan apabila k sama dengan n dan apabila vektor yang didapat (x 1, x 2,, x k ) dikomposisikan pada fungsi pebatas bernilai true. B. Fungsi Pembangkit Fungsi pembangkit akan membangkitkan nilai 0 pada edge ke-k dan membuat edge ke-k telah diproses. Fungsi pembangkit dipanggil ketika vektor yang didapat (x 1, x 2,, x k-1 ) mengarah pada solusi. Maka dari itu dibangkitkan x k dan dimasukkan ke dalam vektor. C. Fungsi Pembatas Fungsi pembatas didefinisikan sebagai aturan yang harus dipenuhi pada permainan hashiwokakero. Berikut ini aturan yang harus dipenuhi. 1. Setiap node memiliki jumlah jembatan yang sama 3. Setiap node harus tercipta hubungan dengan seluruh node Cara melakukan pengecekan ini adalah dengan mengambil salah satu node dari edge ke-k dan menelusuri apakah dari node tersebut dapat mengunjungi seluruh node. Apabila seluruh node dapat dikunjungi, kriteria ini terpenuhi. Ketika node yang telah dikunjungi masih memiliki edge yang belum diproses, asumsikan kriteria ini masih terpenuhi karena bisa saja edge yang belum diproses menghubungkan node yang telah dikunjungi dengan seluruh node. Apabila node tersebut tidak dapat mengunjungi seluruh node dan semua node yang telah dikunjungi, edge-nya sudah diproses, kriteria ini tidak terpenuhi. D. Backtrack Aksi backtrack dilakukan apabila vektor yang sudah didapatkan menyalahi fungsi pembatas. Hal yang dilakukan pada backtrack ini adalah: Misal didapatkan vektor (x 1, x 2,, x k ) - Nilai pada x k ditambahkan dengan 1 - Apabila x k S k, edge ke-k diubah menjadi belum diproses lalu kurangi nilai k dengan 1. Jika k > 0, lakukan backtrack pada vektor (x 1, x 2,, x k ). Jika k = 0 maka solusi tidak ditemukan.

IV. PSEUDOCODE PENYELESAIAN PERMAINAN HASHIWOKAKERO function BATAS1(k:integer)->boolean pertama, false jika tidak} valid : boolean nprocessed, nunprocessed : integer tprocessed : integer valid <- true for each node on e[k] as n nprocessed <- 0 nunprocessed <- 0 tprocessed <- 0 tunprocessed <- 0 for each edge on n as ez if IsProcessed(ez) nprocessed <- nprocessed + 1 tprocessed <- tprocessed + Value(ez) nunprocessed <- nunprocessed + 1 if (nunprocessed = 0 and tprocessed = Value(n)) valid = true if (nunprocessed = 0 and tprocessed <> Value(n)) if (nunprocessed*2 + tprocessed >= Value(n)) valid = true -> valid function BATAS2(k:integer)->boolean kedua, false jika tidak} valid : boolean nprocessed, nunprocessed : integer tprocessed : integer valid <- true for each edge as ez if (ez <> e[k] and IsProcessed(ez)) if CROSSING(ez,e[k]) -> true function CROSSING(e1 : edge, e2 : edge) -> boolean {true jika e1 berpotongan dengan e2, false jika tidak} px1, py1, px2, py2, px3, py3, px4, py4 : integer d, pxi, pyi : integer px1 <- e1.vertices.first.x py1 <- e1.vertices.first.y px2 <- e1.vertices.second.x py2 <- e1.vertices.second.y px3 <- e2.vertices.first.x py3 <- e2.vertices.first.y px4 <- e2.vertices.second.x py4 <- e2.vertices.second.y d <- (px1-px2)*(py3-py4) - (py1- py2)*(px3-px4) if (d = 0) pxi <- ((px3-px4)*(px1*py2-py1*px2)- (px1-px2)*(px3*py4-py3*px4))/d; pyi <- ((py3-py4)*(px1*py2-py1*px2)- (py1-py2)*(px3*py4-py3*px4))/d; -> (px1 < pxi and pxi < px2 or py1 < pyi and pyi < py2 or px1 > pxi and pxi > px2 or py1 > pyi and pyi > py2) and (px3 < pxi and pxi < px4 or py3 < pyi and pyi < py4 or px3 > pxi and pxi > px4 or py3 > pyi and pyi > py4) function BATAS3(k:integer)->boolean pertama, false jika tidak} n : Node visited : array of boolean s : Stack of Node for each visited as vi vi <- false n <- e[k].verticies.first s.push(n) while not IsEmpty(s) n <- s.pop() visited[n.index] <- true for each edge on n as ez if (IsProcessed(ez)) if (not visited[neighbor(n,ez)]) s.push(neighbor(n,ez))

-> true -> IsAllNodeVisited(visited) procedure Hashi_Solve(input n : array of Node, input e : array of Edge) { Menyelesaikan puzzle hashiwokakero yang diberikan } k, N : integer k <- 1 N <- 0 for each e as ez {hitung jumlah edge yang mungkin} N <- N + 1 e[1].value <- 0 {inisialisasi angka dengan 0} e[1].processed <- true while k > 0 do while (e[k].value <= 2) and (not BATAS1(k) or not BATAS2(k) or not BATAS3(k)) do {periksa apakah edge menuju solusi} e[k].value <- e[k].value + 1 {e[k].value > 2 or BATAS1(k) and BATAS2(k) and BATAS3(k)} if e[k].value <= N then {mengarah ke solusi} if k = N then {apakah solusi sudah lengkap?} CetakSolusi(n,e) k <- k + 1 {pergi ke baris berikutnya} e[k].value <- 0 {inisialisasi angka dengan 0} e[k].processed <- true e[k].processed <- false k <- k - 1 { runut-balik ke baris sebelumnya } { k = 0 } V. ANALISIS DAN PEMBAHASAN A. Kompleksitas Waktu Algoritma Penyelesaian Tinjau nilai pada edge sebagai ruang yang bisa dicoba nilainya. Setiap edge dapat bernilai 0, 1, atau 2. Jadi, jumlah kemungkinan pada suatu edge adalah 3. Kemungkinan ini dicoba untuk setiap edge yang mungkin. Jadi, jumlah percobaan adalah: 3 n (1) dengan n adalah jumlah edge. Pada masing-masing percobaan, diterapkan fungsi pembatas. - Fungsi pembatas pertama mencoba maksimal 7 edge di sekitar 2 buah node O(n) = c (2) - Fungsi pembatas kedua mengecek edge ke-k dengan edge 1 sampai k-1 O(n) = n (3) - Fungsi pembatas ketiga menelusuri seluruh node dengan melalui edge yang sudah diproses O(n) = n (4) Jadi, dengan mengalikan jumlah percobaan dengan fungsi pembatas O(n) = (c + n + n). 3 n = n. 3 n (5) B. Tipe Persoalan Algoritma Penyelesaian Tipe persoalan algoritma penyelesaian permainan hashiwokakero adalah NP-Complete[2]. Konsekuensi dari tipe NP-Complete adalah tidak terdapat solusi dengan kompleksitas waktu polinomial. Jadi, algoritma backtracking adalah algoritma yang mangkus untuk persoalan ini. C. Validitas Solusi yang Dihasilkan Selama percobaan, dari 5 contoh kasus yang diselesaikan, solusi yang ditampilkan algoritma ini valid. Algoritma ini seolah-olah mencoba semua kemungkinan seperti brute force dengan tidak mencoba yang sudah pasti gagal[4]. Jadi, untuk setiap puzzle yang memiliki solusi, algoritma ini dapat mencari solusi dari puzzle tersebut. D. Perbaikan pada Algoritma Algoritma backtracking dapat menyelesaikan persoalan hashiwokakero. Untuk mempercepat pencarian solusi, dapat diterapkan aturan heuristik untuk memproses suatu edge yang nilainya sudah dapat dipastikan dari puzzle yang tersedia. Beberapa teknik heuristik yang dapat dilakukan adalah[3]: 1. Jumlah maksimal nilai semua edge pada suatu node sama dengan nilai node 2. Node dengan nilai 1 memiliki satu buah edge yang mungkin 3. Teknik jumlah tetangga yang mungkin 4. Teknik node sisa 5. Teknik isolasi Setelah aturan heuristik permainan diterapkan, bisa jadi sudah tercipta solusi atau belum. Misalkan didapatkan vektor (x 1, x 2,, x k ) dari hasil heuristik. Vektor ini dipastikan sudah mendekati solusi karena memenuhi aturan permainan. Pada vektor ini tidak diperlukan proses backtracking. Kemudian, lakukan proses backtracking

pada edge yang belum diproses. V. KESIMPULAN Algoritma backtracking dapat diterapkan untuk menyelesaikan permainan hashiwokakero. Algoritma ini mangkus untuk penerapan masalah ini. REFERENSI [1] http://www.nikoli.com/en/puzzles/hashiwokakero/ akses pada 21 Desember 2012 [2] D. Anderson, HASHIWOKAKERO Is NP-Complete. Aarhus: Department of Computer Science Aarhus University. [3] R. F. Malik, Solving Hashiwokakero Puzzle Game with Hashi Solving Techniques and Depth First Search, Buletin Teknik Elektro dan Informatika Unsri, 2012, pp. 61-68 [4] R. Munir, Diktat Kuliah IF3051 Strategi Algoritma, Bandung : STEI 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, 21 Desember 2012 Irfan Kamil (13510001)