Implementasi Algoritma MTD (F) Untuk Menentukan Solusi Pad Board Game 2048

(1)

1

1.1 Latar Belakang Masalah

Permainan 2048 adalah permainan yang diciptakan oleh pengembang web yang berasal dari Italia yaitu Gabriele Cirulli pada bulan Maret 2014. Permainan tersebut cukup mudah dimainkan karena tinggal menggeser ke kiri, kanan, atas atau bawah untuk menggabungkan kotak-kotak bernomor tertentu supaya membentuk hasil akhir 2048 [1]. Permainan 2048 dirilis untuk berbagai platform sehingga banyak orang yang dapat memainkannya. Saat ini banyak orang menggunakan berbagai macam cara untuk menyelesaikan permainan tersebut. Berbagai algoritma sudah diimplementasikan untuk menyelesaikannya, seperti dengan menggunakan algoritma greedy, backtracking [2], dan minimax [3]. Dari hasil implementasi tersebut didapatkan bahwa algoritma greedy kurang optimal dalam menyelesaikan permainan 2048 karena dari 11 kali percobaan tidak bisa mendapatkan angka 2048 namun cepat dalam mengambil langkah sedangkan untuk algoritma backtracking dapat menyelesaikan permainan 2048 dalam 1 kali percobaan namun dengan waktu 23 menit 18 detik. Untuk algoritma minimax hasilnya ditentukan dari kedalaman dalam pencarian, semakin dalam mencari semakin besar kemungkinan untuk dapat menyelesaikan permainan 2048 namun membutuhkan waktu yang lebih lama sesuai kedalaman pencariannya. Untuk itu diperlukan penelitian terhadap algoritma lainnya untuk menyelesaikan permainan 2048.

Algoritma yang akan diteliti adalah algoritma MTD(f). Algoritma MTD(f) merupakan salah satu pengembangan dari algoritma minimax. MTD(f) adalah singkatan dari Memory-enhanced Test Driver with node n and value f. Dalam penelitiannya, Aske Plaat [4] menyatakan bahwa algoritma MTD(f) adalah algoritma minimax paling efisien dibandingkan algoritma-algoritma minimax sebelumnya. Dalam beberapa percobaan


(2)

permainan komputer seperti catur, othello, dan checkers, algoritma MTD(f) mempunyai performa rata-rata lebih baik daripada algoritma-algoritma optimasi minimax lainnya seperti Alpha-Beta dan negascout [5], sehingga algoritma MTD(f) memungkinkan dapat menyelesaikan permainan 2048.

Dari uraian tersebut, maka akan dilakukan penelitian untuk mengimplementasikan algoritma MTD(f) dalam menyelesaikan permainan 2048. Diharapkan dengan mengimplementasikan algoritma MTD(f) dapat diketahui kemampuan algoritma MTD(f) untuk menyelesaikan permainan 2048.

1.2 Rumusan Masalah

Sebagai hasil kajian dari uraian latar belakang, maka berikut adalah beberapa rumusan masalah yang teridentifikasi yaitu :

1) Bagaimana mengimplementasikan algoritma MTD(f) pada permainan 2048?

2) Bagaimana kemampuan algoritma MTD(f) dalam menyelesaikan permainan 2048?

1.3 Maksud dan Tujuan

Berdasarkan masalah yang ada, maka maksud dari tugas akhir ini adalah untuk mengimplementasikan algoritma MTD(f) pada permainan 2048. Sedangkan tujuan yang akan dicapai adalah mengukur tingkat akurasi dan kecepatan algoritma MTD(f) untuk menyelesaikan permainan 2048.

1.4 Batasan Masalah

Dalam pembuatan tugas akhir ini ada beberapa batasan masalah yang bertujuan agar lebih fokus pada tujuan yang akan dicapai. Batasan masalah dalam tugas akhir ini adalah :


(3)

1) Permainan bergenre board game 2) Papan permainan berukuran 4x4 kotak

3) Permainan dimainkan oleh algoritma MTD(f) untuk menentukan langkah dalam permainan 2048

4) Pemodelan dan perancangan sistem menggunakan pemodelan berbasis objek dengan UML

5) Bahasa pemrograman yang digunakan adalah C# 6) Permainan 2048 disimulasikan dalam platform desktop

1.5 Metodologi Penelitian

Metode penelitian yang digunakan adalah metode penelitian dan pengembangan (research and development), yaitu metode penelitian yang bertujuan menghasilkan produk tertentu serta menguji efektivitas produk tersebut. Langkah-langkah yang akan dilakukan pada penelitian ini adalah melalui metode pengumpulan data, pembuatan perangkat lunak, pengujian perangkat lunak dan kesimpulan dari pengujian yang telah dilakukan.

Gambar 1.1 Metodologi Penelitian

1.5.1 Metode Pengumpulan Data

Metode pengumpulan data yang digunakan dalam penelitian ini adalah Studi pustaka dengan mempelajari berbagai literatur, seperti buku-buku, artikel-artikel, ebook, website, dan sumber-sumber yang berkaitan dengan permainan, permainan 2048, kecerdasan buatan dan algoritma MTD(f).


(4)

1.5.2 Metode Pembangunan Perangkat Lunak

Metode pembangunan perangkat lunak yang digunakan adalah metode Extreme Programming [6].

Gambar 1.2 Metode Pembangunan Perangkat Lunak Extreme Programming

Proses-proses pada Gambar 1.2 dapat dijelaskan sebagai berikut: 1) Planning

Merancanakan untuk menganalisa masalah pada permainan 2048 dengan mengumpulkan referensi dari berbagai sumber. Sehingga didapatkan masalah pada permainan 2048 adalah algoritma apa yang sesuai untuk menyelesaikan permainan 2048. Kemudian mencari algoritma yang dapat diimplementasikan dengan membaca dari buku, jurnal dan website yang berkaitan dengan algoritma untuk permainan 2048. Lalu didapatkan algoritma MTD(f) sebagai algoritma yang akan diimplementasikan pada permainan 2048.


(5)

2) Design

Perancangan aplikasi untuk mengimplementasikan algoritma MTD(f) pada permainan 2048 berbasis objek menggunakan UML.

3) Coding

Menulis kode program dari hasil perancangan ke dalam Bahasa pemrograman Java.

4) Test

Menguji algoritma yang telah diterapkan pada permainan 2048 dengan mengukur tingkat akurasi dan kecepatan algoritma MTD(f) dalam menyelesaikan permainan 2048.

1.5.3 Pengujian Perangkat Lunak

Pengujian perangkat lunak dilakukan untuk menguji tingkat akurasi dan kecepatan dari algoritma MTD(f) yang telah diimplementasikan pada permainan 2048. Permainan 2048 akan dimainkan oleh algoritma MTD(f) sebanyak 10 kali tiap tingkat kedalaman pencarian. Tingkat kedalaman pencarian yang akan diuji adalah lima tingkat dari tingkat kedalaman nol sampai empat. Kemudian dihitung jumlah permainan yang bisa mencapai angka 2048 pada tiap tingkat kedalaman pencarian. Sehingga untuk mendapatkan hasil akurasi algoritma MTD(f) dengan membandingkan banyaknya jumlah permainan yang bisa mencapai angka 2048 dengan banyaknya permainan yang telah dilakukan. Sedangkan untuk kecepatannya dihitung berdasarkan waktu yang dibutuhkan untuk menyelesaikan permainan 2048.

1.5.4 Kesimpulan

Kesimpulan didapatkan setelah dilakukan pengujian perangkat lunak. Hasil yang akan didapatkan dari kesimpulan adalah tingkat akurasi dan kecepatan algoritma MTD(f) untuk menyelesaikan permainan 2048.


(6)

1.6 Sistematika Penulisan

Sistematika penulisan tugas akhir ini disusun untuk memberikan gambaran umum tentang penelitian yang dijalankan. Sistematika tugas akhir ini adalah sebagai berikut:

BAB 1 PENDAHULUAN

Bab ini menguraikan tentang latar belakang masalah, rumusan masalah, maksud dan tujuan, batasan masalah, metodologi penelitian, serta sistematika penulisan.

BAB 2 LANDASAN TEORI

Bab ini membahas tentang permainan, permainan 2048, kecerdasan buatan,algoritma minimax, algortima alphabeta prunning, algoritma MTD(f), objek-oriented programming, unified modelling language, C# dan Visual Studio.

BAB 3 ANALISIS DAN PERANCANGAN SISTEM

Bab ini membahas analisis masalah, analisis algoritma MTD(f), analisis kebutuhan fungsional dan kebutuhan nonfungsional serta melakukan perancangan sistem yang akan dibangun.

BAB 4 IMPLEMENTASI DAN PENGUJIAN SISTEM

Bab ini membahas implementasi dari tahapan analisis dan perancangan sistem ke dalam perangkat lunak dan hasil uji dari analisis algoritma MTD(f) pada permaianan 2048.

BAB 5 KESIMPULAN DAN SARAN

Bab ini berisikan hal-hal terpenting yang dibahas dan kemudian dijadikan kesimpulan dari hasil analisis performansi algoritma MTD(f) dalam menyelesaikan permainan 2048. Bab ini juga berisi saran-saran yang dimungkinkan untuk pengembangan pada penelitian selanjutnya.


(7)

7

2.1 Permainan

Pada bagian ini akan dijelaskan mengenai definisi permainan dan jenis-jenis permaianan.

2.1.1 Definisi Permainan

Permainan (Game) terdiri atas sekumpulan peraturan yang membangun situasi bersaing dari dua sampai beberapa orang atau kelompok dengan memilih strategi yang dibangun untuk mengoptimalkan kemenangan sendiri atau meminimalkan kemenangan lawan. Peraturan menentukan kemungkinan tindakan untuk setiap pemain, sejumlah keterangan diterima setiap pemain sebagai aturan dalam bermain, sejumlah kemenangan atau kekalahan dalam berbagai situasi [7]. Permainan umumnya menyediakan sistem penghargaan, misalnya nilai (score) yang dihitung berdasarkan tingkat keberhasilan yang dicapai dalam menyelesaikan tugas-tugas yang ada di dalam permainan tersebut. Sistem elektronik yang digunakan untuk menjalankan permainan disebut platform, contohnya adalah komputer dan konsol permainan (game console).

Permainan komputer adalah permainan yang dimainkan pada komputer dan bukan pada konsol permainan. Permainan komputer telah berevolusi dari sistem grafis sederhan menjadi sangat kompleks dan mutakhir. Sedangkan permainan konsol adalah sebuah bentuk media interaktif yang berfungsi sebagai hiburan. Permainan ini pada umumnya berisi gambar-gambar dan suara-suara yang dihasilkan oleh sebuah alat permainan konsol, dan ditampilkan pada sebuah televisi atau peralatan audio visual yang sejenis. Permainan ini sendiri dapat dikendalikan dengan menggunakan alat kendali yang dipegang dan terhubung pada konsol yang


(8)

dinamakan pengendali (controller). Pengendali ini pada umumnya terdiri dari sejumlah tombol-tombol dan kendali arah yang masing-masing bagian memiliki fungsi tersendiri. Fungsi dari alat pengendali tersebut untuk mengendalikan maupun berinteraksi dengan gambar yang ada di layar.

2.1.2 Jenis Permainan

Permainan dari tahun pertama dibuat sampai sekarang semakin banyak jenis dan teknologi yang digunakan semakin canggih. Dari semua permainan yang telah dibua tdi dunia, permainan tersebut dikelompokkan menjadi beberapa jenis. Beberapa contoh jenis-jenis permainan yang sering dimainkan dan dikelompokkan sebagai berikut:

1) Action Game (Permainan Aksi)

Jenis permainan ini memiliki fitur utama berupa banyaknya aksi di mana pemain harus memiliki keterampilan dengan reaksi yang cepat untuk menghindari musuh atau menghindari rintangan. Pengembang permainan jenis ini perlu memastikan permainan yang dibuat dimaksimalkan sehingga pemain memiliki pengalaman dalam bermain yang baik, dan tidak terganggu oleh waktu proses yang lama. Contohnya adalah Metal Gear Solid

2) Adventure Game (Permainan Bertualang)

Jenis permainan ini pada umumnya membuat pemain harus berjalan mengelilingi suatu tempat dengan kondisi tertentu, seperti sebuah istana atau gua yang berkelok dan planet yang jauh. Pemain melakukan navigasi terhadap suatu tempat untuk mencari pesan-pesan rahasia dan memperoleh objek yang memiliki kemampuan yang bervariasi. Untuk membuat permainan ini membutuhkan perencanaan yang akurat sehingga memiliki alur cerita yang menarik bagi pemain. Contohnya adalah Tomb Raider.


(9)

3) Fighting Game (Permainan Bertarung)

Jenis permainan ini pada umumnya pemain bertarung dengan lawan tandingnya dengan cara memukul, menendang, atau menggunakan jurus sampai lawan tandingnya kalah. Contohnya adalah Tekken, Mortal Kombat, dan lain-lain.

4) Sport Game (Permainan Olahraga)

Permainan jenis ini berupa kompetisi antara dua pemain atau lebih, di mana pemain dapat berupa individual atau kelompok. Contoh permainan jenis ini adalah sepakbola, bola basket, tenis, bilyard, dan lain-lain. Permainan ini tergantung seberapa lama waktu yang dibutuhkan dalam satu pertandingan. Contohnya adalah Pro Evolution Soccer.

5) Role Playing Game (Permainan Beralur)

Permainan ini seringkali berupa multi-player (Lebih dari satu pemain) di mana setiap pemain memiliki karakter dengan kemampuan, kekuatan, dan kelemahan yang berbeda. Pemain saling berkompetisi, berinteraksi, dan bertempur satu sama lain. Tampilan grafik yang berbeda untuk setiap karakter pemain dan memiliki storyline (alur cerita) yang mendebarkan sehingga memberikan pengalaman yang menarik dan berbeda di dalam bermain. Contohnya adalah Final Fantasy.

6) Strategy Game (Permainan Strategi)

Jenis permainan ini pada umumnya pemain menggunakan taktik dan strategi untuk melawan dan menghancurkan musuhnya dengan membangun tentara dan alat perang menggunakan sumber daya yang ada secara bijaksana dan teliti. Contohnya adalah Command & Conquer.

7) Platform Game

Permainan ini mengharuskan pemain mengarahkan suatu obyek dengan melalui berbagai tahap atau tingkatan area untuk menyerang musuh dan menghindar terhadap serangan. Jenis


(10)

permainan ini hampir serupa dengan permainan aksi, tetapi aksi yang dilakukan tidak secepat permainan aksi. Contohnya adalah Sonic The Hedgehog & Mario Bros.

8) Puzzle Game (Permainan Teka-teki)

Permainan ini pada umumnya membuat pemain menggunakan kemampuan berpikirnya sebagai pengganti keterampilan reaksi yang cepat karena terdapat rahasia yang perlu dipecahkan. Permainan ini lebih bersifat statis dibanding permainan aksi. Pembuatan permainan jenis ini seringkali ditunjang dengan algoritma kecerdasan buatan. Contohnya adalah 7 Wonders of The Ancient World, Zuma, dan lain-lain.

9) Simulation Game (Permainan Simulasi)

Jenis Permainan ini memberikan pengalaman atau interaksi secara mirip dengan kendaraan aslinya, meskipun terkadang kendaraan tersebut masih berupa contoh atau bahkan fiktif, tapi ada penekanan khusus pada detail dan pengalaman nyata menggunakan kendaraan tersebut. Contohnya adalah Gran Turismo, Sim City dan lain-lain.

10) Board Game (Permainan Papan)

Jenis permainan ini membutuhkan papan permainan untuk memainkannya. Permainan ini biasanya melibatkan potongan yang bisa dipindahkan atau ditempatkan pada permukaan atau papan permainan dengan aturan yang sudah dibuat. Permainan ini didasarkan pada strategi murni, kesempatan (misalnya menggunakan dadu atau giliran), atau campuran dari keduanya, dan biasanya memiliki tujuan untuk mencapai sesuatu. Permainan papan berasal dari representasi pertempuran antara dua tentara dan yang pada zaman sekarang masih berdasarkan mengalahkan pemain lawan dalam hal menyerang, posisi, atau mendaptkan poin.


(11)

2.2 Permainan 2048

Pada bagian ini akan menjelaskan sejarah permainan 2048 dan aturan permainan 2048.

2.2.1 Sejarah Permainan 2048

Permainan 2048 merupakan permainan untuk pemain tunggal yang diciptakan pada bulan Maret 2014 oleh seorang programmer asal Italia yang bernama Gabriele Cirulli. Ketika pertama kali dirilisnya permainan ini, permainan ini langsung melesat ke peringkat 1 dunia dalam hanya waktu seminggu dan mencapai lebih dari 4 juta download dan hal tersebut merupakan rekor yang cukup fantastis. Pada kenyataannya, permainan ini

hanyalah sebuah proyek “iseng” yang dikerjakan oleh programmer Italia

tersebut yang hanya ingin mencoba apakah ia mampu membuat sebuah permainan dari awal dan ia berhasil menyelesaikan pembuatannya hanya dalam waktu seminggu. Permainan ini juga bukanlah yang pertama kali diciptakan, sebelumnya juga pernah ada permainan berjudul Three! yang memiliki tampilan serta cara bermain yang mirip, dan juga permainan 1024 yang cara bermainnya sama persis, hanya saja dengan tujuan permainan yang sedikit berbeda [1].


(12)

2.2.2 Aturan Permainan 2048

Untuk aturan cara bermain permainan 2048 adalah sebagai berikut [1]:

1) Permainan 2048 dimainkan di papan abu-abu 4×4.

2) Di atasnya terdapat beberapa kotak dengan warna berbeda yang bergeser ketika pemain menekan empat tombol arah di keyboard.

3) Kotaknya dapat bergerak sejauh mungkin sampai bertemu kotak lain atau pinggir papan.

4) Apabila dua kotak bernomor sama bergabung saat bergeser, keduanya akan bergabung dan menghasilkan kotak baru yang nomornya merupakan hasil penjumlahan nomor di dua kotak yang bergabung tadi.

5) Misal pada Gambar 2 kotak yang bernilai 2 bisa digabung saat pemain menggeserkan ke arah kiri atau kanan dan akan menghasilkan kotak yang bernilai 4 seperti pada Gambar 2.1. 6) Kotak yang baru ini tidak bisa bergabung dengan kotak lain

dengan arah yang sama.

7) Di setiap pergeseran akan ada satu kotak baru bernomor 2 atau 4 yang muncul secara acak pada ruang kosong di papan. 8) Pemain baru menang ketika sebuah kotak bernomor 2048

muncul di papan.

9) Saat pemain tidak bisa bergerak lagi maka permainan berakhir.

10)Skor didapatkan dari hasil penggabungan kotak.

2.3 Kecerdasan Buatan

Kecerdasan buatan sering disebut juga dengan Artificial Intelligence (AI). Kecerdasan buatan adalah ilmu dan rekayasa, yang membuat mesin mempunyai kecerdasan tertentu khususnya program komputer yang cerdas.


(13)

Intelegensi merupakan bagian kemampuan komputasi untuk mencapai tujuan di dalam dunia. Ada beberapa macam jenis dan derajat intelegensi untuk manusia, binatang dan beberapa mesin. Kecerdasan buatan berhubungan dengan penggunaan komputer untuk melaksanakan tugas atau menyelesaikan masalah yang memerlukan kecerdasan atau kepintaran. Pada umumnya komputer memerlukan aplikasi atau perangkat lunak untuk melaksanakan tugas atau menyelesaikan masalah, maka aplikasi atau perangkat lunak yang berdasarkan teknologi Kecerdasan buatan di perlukan.

Agar komputer bisa bertindak seperti apa yang dapat dilakukan manusia, maka komputer juga harus diberi bekal pengetahuan dan mempunyai kemampuan untuk menalar. Untuk itu kecerdasan buatan akan mencoba untuk memberikan beberapa metode untuk membekali komputer agar bisa menjadi mesin yang pintar. Dari beberapa perspektif, kecerdasan buatan dapat dipandang sebagai berikut [8]:

1) Perspektif kecerdasan, AI adalah bagaimana membuat mesin yang cerdas dan dapat melakukan hal-hal yang sebelumnya hanya dapat dilakukan manusia.

2) Perspektif bisnis, AI adalah sekelompok alat bantu (tools) yang berdayaguna dan metodologi yang menggunakan alat-alat bantu tersebut untuk menyelesaikan masalah-masalah bisnis.

3) Perspektif pemrograman, AI meliputi studi tentang pemrograman simbolik, pemecahan masalah, dan proses pencarian (search). 4) Perspektif penelitian, riset tentang AI dimulai pada awal tahun

1960an, percobaan pertama adalah membuat program permainan catur, membuktikan teori, dan general problem solving.

2.4 Algoritma Minimax

Algoritma minimax (juga sering disebut Minmax) adalah sebuah algoritma yang mendasari pola pikir langkah penyelesaian masalah dalam beberapa jenis permainan komputer, seperti tic-tac-toe, othello, checkers,


(14)

catur. Pada dasarnya, algoritma minimax sangat andal untuk menyelesaikan segala masalah dalam pencarian langkah untuk permainan komputer dengan jumlah kemungkinan penyelesaian yang kecil, seperti pada permainan tic-tac-toe. Secara teori, algoritma minimax didefinisikan sebagai berikut:

“Untuk setiap permainan satu-lawan satu, ada sebuah nilai yang bernilai V dan strategi yang dipilih oleh tiap pemain sedemikian sehingga dengan strategi dari pemain-2, pemain-1 dapat memperoleh nilai terbaik V dan sebaliknya dengan strategi dari pemain-1, pemain-2 dapat memperoleh nilai terbaik –V, sehingga:

1) Jika diberikan strategi dari pemain ke-2, maka langkah penyelesaian terbaik dari pemain pertama adalah V.

2) Jika diberikan strategi dari pemain pertama, maka langkah penyelesaian terbaik dari pemain kedua adalah –V”.

Singkatnya, pemain pertama memberikan langkah penyelesaian yang bernilai V terhadap permainan pemain kedua, dan sebaliknya, pemain kedua memberikan langkah peyelesaian bernilai –V. Pemikiran inilah yang mendasari asal usul penamaan algoritma Minimax, dimana pemain yang satu berjuang untuk mendapat nilai maksimum, sedangkan lawannya berjuang untuk mendapat nilai minimum [9].

Cara kerja algoritma Minimax:

1) Misalkan ada 2 pemain yang terlibat, kita namakan MAX dan MIN

2) Lakukan pencarian atau penulusuran dari simpul yang paling dalam

3) setelah simpul yang paling dalam ditelusuri akan dilakukan pencarian tingkat kedua, ketiga dan seterusnya .

4) Pencarian dilakukan secara rekursif

5) lakukan pembandingan nilai MAX dan MIN

6) Nilai MIN dan MAX yang telah dibandingkan akan disimpan pada temp sementara


(15)

Gambar 2.2 Pohon Pencarian Minimax

Algoritma minimax merupakan salah satu algoritma yang digunakan pada permainan papan (board game) yang pada umumnya dimainkan oleh 2 orang pemain atau lebih dan berbasis zero-sum yang artinya keuntungan untuk pemain pertama berarti kerugian untuk pemain kedua. Algoritma minimax akan melakukan pengecekan terhadap seluruh kemungkinan yang ada sampai permainan selesai. Keuntungan yang didapat dengan menggunakan algoritma minimax yaitu algoritma minimax mampu menganalisis segala kemungkinan posisi permainan untuk menghasilkan keputusan yang terbaik karena algoritma Minimax ini bekerja secara rekursif dengan mencari langkah yang akan membuat lawan mengalami kerugian minimum. Semua strategi lawan akan dihitung dengan algoritma yang sama dan seterusnya. Ini berarti, pada langkah pertama komputer akan menganalisis seluruh kondisi permainan, dan untuk setiap langkahnya, komputer akan memilih langkah yang paling membuat lawan mendapatkan keuntungan minimum, dan yang paling membuat komputer itu sendiri mendapat keuntungan maksimum. Dalam penentuan keputusan tersebut dibutuhkan suatu nilai yang merepresentasikan kerugian atau keuntungan


(16)

yang akan diperoleh jika langkah tersebut dipilih. Pada Gambar 2.3 adalah pseudocode dari algoritma minimax.

function minimax(node, depth, turn)

if depth = 0 or node is a terminal node return the heuristic value of node

if turn == player1 bestValue := -∞

foreach child of node

val := minimax(child, depth - 1, player2) bestValue := max(bestValue, val);

return bestValue

else

bestValue := +∞

for each child of node

val := minimax(child, depth - 1, player1) bestValue := min(bestValue, val);

return bestValue

Gambar 2.3 Pseudocode Algoritma Minimax

Contoh implementasi algoritma minimax: misalkan ada sebuah permainan sederhana yang dengan hanya ada satu langkah, untuk tiap pemain dengan kemungkinan situasi seperti pada Tabel 2.1.

Tabel 2.1 Contoh Nilai Akhir Pergerakan MAX dan MIN

MAX MIN Nilai Evaluasi

A C 12

A D -2

B C 5

B D 6

Fungsi evaluasi berlaku untuk posisi akhir papan, yang berupa kombinasi langkah dari MIN dan MAX. MAX berasumsi jika MIN akan bermain dengan baik. Maka dari itu, MAX tahu jika dia melakukan pergerakan A, maka MIN akan membalasnya dengan melakukan pergerakan


(17)

D, yang mengakibatkan nilai evaluasi -2 (kemenangan bagi MIN). Bagaimanapun juga, jika MAX melakukan gerakan B, dia pasti akan menang karena pergerakan MIN yang terbaik hanya akan menghasilkannilai evaluasi terbaik sebesar 5 saja. Jadi, dengan menggunakan algoritma minimax, MAX akan selalu memilih untuk melakukan langkah B, walaupun dia sebenarnya akan mendapatkan kemenangan yang lebih baik jika melakukan A dan MIN melakukan kesalahan dengan memilih langkah C.

2.5 Algoritma Alphabeta Prunning

Dalam algoritma minimax, pencarian dilakukan pada seluruh bagian pohon, sementara sebagian pohon tidak seharusnya diperiksa. Alpha-beta pruning merupakan modifikasi dari algoritma minimax, yang akan mengurangi jumlah node yang dievaluasi oleh pohon pencarian. Pencarian untuk node berikutnya akan dipikirkan terlebih dahulu. Algoritma ini akan berhenti mengevaluasi langkah ketika terdapat paling tidak satu kemungkinan yang ditemukan dan membuktikan bahwa langkah tersebut lebih buruk jika dibandingkan dengan langkah yang diperiksa sebelumnya. Sehingga, langkah berikutnya tidak perlu dievaluasi lebih jauh. Dengan algoritma ini hasil optimasi dari suatu algoritma tidak akan berubah [5]. Berikut merupakan pohon dengan algoritma alpha-beta pruning.


(18)

Gambar 2.4 Pohon Pencarian AlphaBeta Prunning

Diperlihatkan, pada pohon tersebut, bahwa terdapat pemotongan pencarian dengan menggunakan algoritma ini. Pada algoritma ini, terdapat dua nilai yang diatur, yaitu alpha dan beta, yang merepresentasikan nilai minum dari max yang diyakini dan nilai maksimum dari min yang diyakini. Nilai awal alpha adalah tak hingga negatif dan nilai awal beta adalah tak hingga positif. Sebagai hasil dari proses rekursif, area pencarian akan semakin kecil. Ketika beta menjadi lebih kecil dari alpha, akan berarti posisi saat itu tidak dapat menjadi hasil terbaik permainan untuk kedua pemain dan pencarian tidak perlu dilakukan lebih jauh. Pada Gambar 2.5 dapat dilihat pseudocode dari algoritma alphabeta.

function alphabeta(node, depth, α, β, maximizingPlayer)

if depth = 0 or node is a terminal node return the heuristic value of node if maximizingPlayer

v := -∞

for each child of node

v := max(v, alphabeta(child, depth - 1, α, β, FALSE))

α := max(α, v) if β ≤ α


(19)

return v else

v := ∞

for each child of node

v := min(v, alphabeta(child, depth - 1, α, β, TRUE))

β := min(β, v) if β ≤ α

break (* α cut-off *) return v

Gambar 2.5 Pseudocode Algoritma Alphabeta

2.6 Algortima MTD(f)

Algoritma MTD(f) adalah sebuah algoritma optimasi Minimax baru yang lebih sederhana dan lebih sangkil daripada beberapa pendahulunya [4]. Nama dari algoritma ini adalah kependekan dari MTD(n,f), yang disingkat dari Memory-enhanced Test Driver with node n and value f. MTD adalah nama dari sekumpulan driver program yang mencari pohon Minimax menggunakan pemanggilan zero-window AlphaBeta. Dalam beberapa percobaan permainan komputer seperti catur, othello, dan checkers, algoritma ini mempunyai performa rata-rata lebih baik daripada Negascout (variasi dari AlphaBeta yang diimplementasikan dalam hampir semua permainan catur, checkers, dan othello). Salah satu program catur terkuat, Cilkchess milik MIT yang menggunakan metode komputasi pararel, juga menggunakan MTD(f) sebagai algoritma pencariannya menggantikan Negascout yang digunakan oleh program catur pendahulunya, StarSocrates. Algoritma MTD(f) terdiri dari 10 baris kode saja, yaitu seperti pada Gambar 2.6.

function MTDF(root, f, d) g := f

upperBound := +∞ lowerBound := -∞

while lowerBound < upperBound


(20)

β:= g+1

else β := g

g := AlphaBeta (root, β-1, β, d)

if g < β then

upperBound := g

else

lowerBound := g

return g

Gambar 2.6 Psuedo Code Algoritma MTD(f)

Algoritma MTD(f) tersebut memanggil fungsi Alpha Beta berkali kali dengan metode zero-window pencarian Alpha-Beta, tidak seperti Negascout yang menggunakan pencarian wide-window. Pemanggilan Alpha Beta mengembalikan batas dari nilai evaluasi Minimax. Batas dari nilai itu kemudian disimpan dalam upperbound (batas atas) dan lowerbound (batas bawah), membentuk sebuah interval yang melingkupi nilai Minimax yang sebenarnya pada pencarian dengan kedalaman tertentu. Positif dan negatif tak hingga adalah kependekan dari nilai diluar interval pada daun pohon. Ketika batas atas dan batas bawahnya bernilai sama atau batas bawah telah melampaui nilai batas atas, maka nilai Minimax telah ditemukan.


(21)

Efisiensi dari MTD(f) berasal dari pencarian Alpha-Beta dengan zero-window, dan menggunakan sebuah nilai batas yang baik (variabel Beta) untuk melakukan pencarian zero-window tersebut. Dalam versi yang sebelumnya, Alpha-Beta dipanggil dengan pencarian wide-window seperti ini AlphaBeta(root, -INFINITY, +INFINITY, depth), yang memastikan nilai kembaliannya berada dalam interval Alpha dan Beta. Sedangkan dalam algoritma MTD(f), digunakan pencarian zero-window, jadi untuk setiap pemanggilan Alpha-Beta akan mengembalikan batas bawah dan batas atas dari nilai Minimax berturut-turut. Pencarian dengan zero-window memberikan lebih banyak jalan pintas, tetapi lebih sedikit informasi, yaitu hanya batas dari nilai minimax saja.

2.7 Object Oriented Programming (OOP)

Analisis dan desain berorientasi objek adalah cara baru dalam memikirkan suatu masalah dengan menggunkan model yang dibuat menurut konsep sekitar dunia nyata. Dasar pembuatan adalah objek, yang merupakan kombinasi antara struktur data dan perilaku dalam suatu entitas. Model berorientasi objek bermanfaat untuk memahami masalah, komunikasi dengan ahli aplikasi, pemodelan suatu organisasi, menyiapkan dokumentasi serta perancangan program dan basis data. Pertama-tama suatu model analisis dibuat untuk menggambarkan aspek dasar dari domain aplikasi, dimana model tersebut berisi objek yang terdapat dalam domain aplikasi termasuk deskripsi dari keterangan objek dan perilakunya. Secara spesifik, pengertian berorientai objek berarti bahwa mengorganisasi perangkat lunak sebagai kumpulan dari objek tertentu yang memiliki struktur data dan perilakunya. Hal ini yang membedakan dengan pemograman konvensional dimana struktur data dan perilaku hanya berhubungan secara terpisah. Terdapat beberapa cara untuk menentukan karakteristik dalam pendekatan berorientasi objek, tetapi secara umum mencakup empat hal, yaitu identifikasi, klasifikasi, polimorfisme dan pewarisan.


(22)

Karakteristik dari objek identitas berarti bahwa data diukur mempunyai nilai tertentu yang membedakan entitas dan disebut objek. Suatu paragraf dari dokumen, suatu windows dari workstation, dan raja putih dari buah catur adalah contoh dari objek. Objek dapat kongkrit, seperti halnya arsip dalam sistem, atau konseptual seperti kebijakan penjadualan dalam multiprocessing pada sistem operasi. Setiap objek mempunyai sifat yang melekat pada identitasnya. Dua objek dapat berbeda walaupun bila semua atributnya identik Klasifikasi berarti bahwa suatu kegiatan mengumpulkan data (atribut) dan perilaku (operasi) yang mempunyai struktur data sama ke dalam satu grup yang disebut kelas. Paragraf, window, buah catur adalah contoh dari kelas. Kelas merupakan abstraksi yang menjelaskan sifat penting pada suatu aplikasi dan mengabaikan yang lain. Setiap kelas menunjukan suatu kumpulan infinite yang mungkin dari objek. Suatu objek dapat dikatakan sebagai instans dari kelas, setiap instansi dari kelas mempunyai nilai individu untuk setiap nama atribut dan operasi, tetapi memiliki bersama atribut dan operasi dengan instansi lain dalam kelas.

Karakteristik Metodologi Berorientasi Objek Metodologi pengembangan sistem berorientasi objek mempunyai tiga karateristik utama yaitu [10]:

1) Encapsulation

Encapsulation (pengkapsulan) merupakan dasar untuk pembatasan ruang lingkup program terhadap data yang diproses. Data dan prosedur atau fungsi dikemas dalam bersama-sama dalam suatu objek, sehingga prosedur atau fungsi lain dari luar tidak dapat mengaksesnya. Data terlindung dari prosedur atau objek lain kecuali prosedur yang berada dalam objek itu sendiri.

2) Inheritance

Inheritance (pewarisan) adalah teknik yang menyatakan bahwa anak dari objek akan mewarisi atribut dan metoda dari


(23)

induknya langsung. Atribut dan metoda dari objek induk diturunkan kepada anak objek, demikian seterusnya. Pendefinisian objek dipergunakan untuk membangun suatu hirarki dari objek turunannya, sehingga tidak perlu membuat atribut dan metoda lagi pada anaknya, karena telah mewarisi sifat induknya.

3) Polymorphism

Polymorphism (polimorfisme) yaitu konsep yang menyatakan bahwa sesuatu yang sama dapat mempunyai bentuk dan perilaku berbeda. Polimorfisme mempunyai arti bahwa operasi yang sama mungkin mempunyai perbedaan dalam kelas yang berbeda.

2.8 Unified Modeling Language (UML)

UML adalah sebuah bahasa yang telah menjadi standar dalam industri untuk menvisualisasi, menspesifikasi, merancang dan mendokumentasi sistem piranti lunak. Unified Modelling Language (UML) menawarkan sebuah standar untuk merancang model sebuah sistem. Tujuan UML adalah :

1) Memberikan model yang siap pakai, bahasa pemodelan visual yang ekspresif untuk mengembangkan dan saling menukar model dengan mudah dan dimengerti secara umum. 2) Memberikan bahasa pemodelan yang bebas dari berbagai

bahasa pemrograman dan proses rekayasa.

3) Menyatukan praktik-praktik terbaik yang terdapat dalam pemodelan. UML menyediakan beberapa notasi dan artifact standar yang bisa digunakan sebagai alat komunikasi bagi para pelaku dalam proses analisis dan desain. Artifact didalam UML didefinisikan sebagai informasi dalam bentuk


(24)

yang digunakan atau dihasilkan dalam proses pengembangan perangkat. Contohnya adalah source code yang dihasilkan oleh proses pemrograman.

Diagram-diagram pada UML akan dijelaskan sebagai berikut [11]: 1) Use Case Diagram

Use case diagram menggambarkan fungsionalitas yang diharapkan

dari sebuah sistem. Yang ditekankan adalah “apa” yang diperbuat sistem, dan bukan “bagaimana”. Use Case dilakukan oleh satu aktor yang digambarkan dengan simbol orang yang dihubungkan dengan garis yang menunjukan hubungan komunikasi. Setiap Use Case harus diberi nama yang menyatakan apa hal yang dicapai dari hasil interaksi dengan Aktor. Nama Use Case boleh terdiri dari beberapa kata dan tidak boleh ada Use Case yang memiliki nama yang sama.

Gambar 2.8 Contoh Usecase Diagram

2) Class Diagram

Class Diagram menggambarkan tipe-tipe objek dalam sistem dan berbagai jenis hubungan atau relasi statis yang ada diantara mereka. Diagram ini memberikan gambaran umum dari sistem. Seperti tipe-tipe dari objek dengan menunjukan kelasnya dan hubungan diantara mereka, serat penjelasan detail tiap-tiap kelas ke dalam model suatu


(25)

sistem. Class Diagram bersifat statik (tidak berubah) yang akan menunjukan apa itu interaksi tapi tidak menjelaskan apa yang terjadi ketika mereka melakukan interaksi.

Gambar 2.9 Contoh Class Diagram

3) Activity Diagram

Activity Diagram memodelkan alur kerja. Sebuah proses bisnis dan urutan aktifitas dalam suatu proses. Diagram ini sangat mirip dengan sebuah flowchart karena dapat memodelkan sebuah alur kerja dari aktifitas keaktifitas lainnya atau dari suatu aktifitas kedalam keadaan sesaat.


(26)

Gambar 2.10 Contoh Activity Diagram

4) Sequence Diagram

Sequence Diagram merupakan gambaran interaksi antar objek di dalam dan di sekitar sistem berupa pesan yang digambarkan terhadap waktu. Diagram ini secara khusus berasosiasi dengan use case. Sequence Diagram juga digunakan untuk menggambarkan skenario atau rangkain langkah-langkah apa yang seharusnya terjadi sebagai respons dari sebuah event untuk menghasilkan sesuatu didalam use case sebagai output. Untuk pesan digambarkan sebagai garis berpanah dari satu objek ke objek lainnya. Pada fase desain berikutnya, pesan dipetakan menjadi operasi/metode dari class. Activation bar menunjukan lamanya eksekusi sebuah proses dan biasanya diawali dengan sebuah pesan.


(27)

Gambar 2.11 Contoh Sequence Diagram

2.9 C#

C# (dibaca: C sharp) merupakan sebuah bahasa pemrograman yang berorientasi objek yang dikembangkan oleh Microsoft sebagai bagian dari inisiatif kerangka .NET Framework. Bahasa pemrograman ini dibuat berbasiskan bahasa C++ yang telah dipengaruhi oleh aspek-aspek ataupun fitur bahasa yang terdapat pada bahasa-bahasa pemrograman lainnya seperti Java, Delphi, Visual Basic, dan lain-lain) dengan beberapa penyederhanaan. Menurut standar ECMA-334 C# Language Specification, nama C# terdiri atas sebuah huruf Latin C (U+0043) yang diikuti oleh tanda pagar yang menandakan angka # (U+0023). Tanda pagar # yang digunakan memang bukan tanda kres dalam seni musik (U+266F), dan tanda pagar # (U+0023) tersebut digunakan karena karakter kres dalam seni musik tidak terdapat di dalam keyboard standar. [12]

Standar European Computer Manufacturer Association (ECMA) mendaftarkan beberapa tujuan desain dari bahasa pemrograman C#, sebagai berikut:

1) Bahasa pemrograman C# dibuat sebagai bahasa pemrograman yang bersifat bahasa pemrograman general-purpose (untuk tujuan jamak), berorientasi objek, modern, dan sederhana.


(28)

2) Bahasa pemrograman C# ditujukan untuk digunakan dalam mengembangkan komponen perangkat lunak yang mampu mengambil keuntungan dari lingkungan terdistribusi.

3) Portabilitas programmer sangatlah penting, khususnya bagi programmer yang telah lama menggunakan bahasa pemrograman C dan C++.

4) Dukungan untuk internasionalisasi (multi-language) juga sangat penting.

5) C# ditujukan agar cocok digunakan untuk menulis program aplikasi baik dalam sistem klien-server (hosted system) maupun sistem embedded (embedded system), mulai dari perangkat lunak yang sangat besar yang menggunakan sistem operasi yang canggih hingga kepada perangkat lunak yang sangat kecil yang memiliki fungsi-fungsi terdedikasi.

6) Meskipun aplikasi C# ditujukan agar bersifat 'ekonomis' dalam hal kebutuhan pemrosesan dan memori komputer, bahasa C# tidak ditujukan untuk bersaing secara langsung dengan kinerja dan ukuran perangkat lunak yang dibuat dengan menggunakan bahasa pemrograman C dan bahasa rakitan.

7) Bahasa C# harus mencakup pengecekan jenis (type checking) yang kuat, pengecekan larik (array), pendeteksian terhadap percobaan terhadap penggunaan Variabel-variabel yang belum diinisialisasikan, portabilitas kode sumber, dan pengumpulan sampah (garbage collection) secara otomatis.

2.10 Visual Studio

Microsoft Visual Studio merupakan sebuah perangkat lunak lengkap (suite) yang dapat digunakan untuk melakukan pengembangan aplikasi, baik itu aplikasi bisnis, aplikasi personal, ataupun komponen aplikasinya, dalam bentuk aplikasi console, aplikasi Windows, ataupun aplikasi Web. Visual


(29)

Studio mencakup kompiler, SDK, Integrated Development Environment (IDE), dan dokumentasi (umumnya berupa MSDN Library). Kompiler yang dimasukkan ke dalam paket Visual Studio antara lain Visual C++, Visual C#, Visual Basic, Visual Basic .NET, Visual InterDev, Visual J++, Visual J#, Visual FoxPro, dan Visual SourceSafe [13].

Microsoft Visual Studio dapat digunakan untuk mengembangkan aplikasi dalam native code (dalam bentuk bahasa mesin yang berjalan di atas Windows) ataupun managed code (dalam bentuk Microsoft Intermediate Language di atas .NET Framework). Selain itu, Visual Studio juga dapat digunakan untuk mengembangkan aplikasi Silverlight, aplikasi Windows Mobile (yang berjalan di atas .NET Compact Framework).


(30)

(31)

77

Pada bagian ini akan dikemukakan kesimpulan dari skripsi yang berjudul

Implementasi Algoritma MTD(f) Untuk Menentukan Solusi Pada Board Game 2048” dan saran yang bersifat membangun.

5.1 Kesimpulan

Berdasarkan dari hasil penelitian, analisis perancangan sistem dan implementasi serta pengujian yang dilakukan dari algoritma MTD(f) untuk menyelesaikan permainan 2048, maka diperoleh kesimpulan bahwa algoritma MTD(f) dapat diterapkan pada permainan 2048 namun untuk mendapatkan tile 2048 agar bisa memenangkan permainan 2048 membutuhkan kedalaman pencarian minimal pencarian level tiga dan membutuhkan waktu sekitar 13 menit 59 detik. Tingkat akurasi pada algoritma MTD(f) pada pencarian dengan kedalaman level nol, satu dan dua adalah 0%, sedangkan pada level tiga adalah 20%, level empat adalah 30% dan level lima adalah 60%.

5.2 Saran

Dalam implementasi algoritma MTD(f) pada permainan 2048 ini masih jauh dari sempurna dan masih banyak kekurangan. Oleh karena itu perlu dilakukan analisis yang lebih dalam. Adapun saran yang dapat diberikan oleh peneliti pada penelitian ini adalah menerapkan algoritma lainnya yang dapat diterapkan pada permainan 2048 agar bisa lebih cepat dan akurat untuk menyelesaikan permainan 2048.


(32)

(33)

IMPLEMENTASI ALGORITMA MTD(F) UNTUK

MENENTUKAN SOLUSI PADA BOARD GAME 2048

SKRIPSI

Disusun untuk Menempuh Ujian Akhir Sarjana

RIZQIANA TRINENDA 10109418

PROGRAM STUDI TEKNIK INFORMATIKA

FAKULTAS TEKNIK DAN ILMU KOMPUTER

UNIVERSITAS KOMPUTER INDONESIA

2016


(34)

v

DAFTAR ISI

ABSTRAK ... i ABSTRACT ... ii KATA PENGANTAR ... iii DAFTAR ISI ... v DAFTAR GAMBAR ... viii DAFTAR TABEL ... x DAFTAR SIMBOL ... xi DAFTAR LAMPIRAN ... xiv BAB 1 PENDAHULUAN ... 1 1.1 Latar Belakang Masalah ... 1 1.2 Rumusan Masalah ... 2 1.3 Maksud dan Tujuan ... 2 1.4 Batasan Masalah ... 2 1.5 Metodologi Penelitian ... 3 1.5.1 Metode Pengumpulan Data ... 3 1.5.2 Metode Pembangunan Perangkat Lunak ... 4 1.5.3 Pengujian Perangkat Lunak... 5 1.5.4 Kesimpulan ... 5 1.6 Sistematika Penulisan ... 6 BAB 2 LANDASAN TEORI ... 7 2.1 Permainan ... 7 2.1.1 Definisi Permainan ... 7 2.1.2 Jenis Permainan ... 8 2.2 Permainan 2048 ... 11 2.2.1 Sejarah Permainan 2048 ... 11 2.2.2 Aturan Permainan 2048... 12 2.3 Kecerdasan Buatan ... 12 2.4 Algoritma Minimax ... 13 2.5 Algoritma Alphabeta Prunning ... 17 2.6 Algortima MTD(f) ... 19 2.7 Object Oriented Programming (OOP) ... 21


(35)

vi

2.8 Unified Modeling Language (UML) ... 23 2.9 C# ... 27 2.10 Visual Studio ... 28 BAB 3 ANALISIS DAN PERANCANGAN SISTEM ... 31 3.1 Analisis Sistem ... 31 3.1.1 Analisis Masalah ... 31 3.1.2 Analisis Permainan 2048... 32 3.1.3 Nilai Evaluasi Permainan 2048 ... 34 3.1.4 Analisis Algoritma MTD(f) ... 35 3.1.5 Analisis Kebutuhan Nonfungsional ... 47 3.1.5.1 Analisis Kebutuhan Perangkat Lunak ... 47 3.1.5.2 Analisis Kebutuhan Perangkat Keras ... 48 3.1.6 Analisis Kebutuhan Fungsional ... 48 3.1.6.1 Usecase Diagram ... 48 3.1.6.1.1 Definisi Aktor ... 49 3.1.6.1.2 Definisi Usecase ... 49 3.1.6.1.3 Skenario Usecase ... 50 3.1.6.2 Activity Diagram ... 54 3.1.6.2.1 Activity Diagram Memulai Permainan ... 55 3.1.6.2.2 Activity Diagram Menggeserkan Kotak ... 55 3.1.6.2.3 Activity Diagram Menggunakan AI ... 56 3.1.6.2.4 Activity Diagram Memilih Langkah Selanjutnya ... 57 3.1.6.3 Class Diagram ... 58 3.1.6.4 Sequence Diagram ... 59 3.1.6.4.1 Sequence Diagram Memulai Permainan ... 59 3.1.6.4.2 Sequence Diagram Menggeserkan Kotak... 59 3.1.6.4.3 Sequence Diagram Menggunakan AI ... 60 3.1.6.4.4 Sequence Diagram Memilih Langkah Selanjutnya ... 60 3.2 Perancangan Sistem ... 60 3.2.1 Perancangan Komponen Permainan 2048 ... 61 3.2.2 Perancangan Struktur Menu ... 61 3.2.3 Perancangan Antarmuka ... 62 3.2.3.1 Perancangan Antarmuka Tampilan Utama ... 62 BAB 4 Implementasi dan Pengujian Sistem ... 63


(36)

vii

4.1 Implementasi Sistem ... 63

4.1.1 Implementasi Perangkat Keras ... 63

4.1.2 Implementasi Perangkat Lunak ... 64

4.1.3 Implementasi Antarmuka ... 64

4.2 Pengujian Sistem ... 65

4.2.1 Rencana Pengujian ... 66

4.2.2 Pengujian Black Box ... 66

4.2.3 Pengujian Algoritma ... 67

4.2.3.1 Hasil Pengujian Kedalaman Level 0 ... 67

4.2.3.2 Hasil Pengujian Kedalaman Level 1 ... 68

4.2.3.3 Hasil Pengujian Kedalaman Level 2 ... 69

4.2.3.4 Hasil Pengujian Kedalaman Level 3 ... 70

4.2.3.5 Hasil Pengujian Kedalaman Level 4 ... 71

4.2.3.6 Hasil Pengujian Kedalaman Level 5 ... 72

4.2.4 Hasil Pengujian ... 73

BAB 5 KESIMPULAN DAN SARAN ... 77

5.1 Kesimpulan ... 77

5.2 Saran ... 77


(37)

79

[1] K. Lu, "Game Theory of 2048," Math 89s: Game Theory and Democracy, 2014.

[2] Stepen, "Perbandingan Algoritma Greedy & Bactracking Dalam Penyelesaian Permainan 2048," Makalah IF2211 Strategi Algoritma , 2014. [3] V. Vryniotis, "Using Artificial Intelligence to solve the 2048 Game (JAVA

code) | Datumbox," 14 November 2014. [Online]. Available: http://blog.datumbox.com/using-artificial-intelligence-to-solve-the-2048-game-java-code/. [Accessed 20 September 2015].

[4] A. Plaat, "MTD ( f ) A Minimax Algorithm faster than NegaScout," Erasmus University, Rotterdam, 1997.

[5] M. Shalihin, I. Arwani and E. M. Adam, "Penerapan Algoritma Minimax Dengan Optimasi Mtd(F) Pada Permainan Dam-Daman," Informatika, 2014. [6] R. S. Pressman, Software Engineering: A Practitioner’s Approach, Seventh

Edition, New York: McGraw-Hill, 2010.

[7] J. V. Neumann and O. Morgenstern, Theory of Games and Economic Behavior, Third Edition, New Jersey: Princeton, 1953.

[8] S. Russell and P. Norvig, Artificial Intelligence A Modern Approach, Third Edition, New Jersey: Pearson, 2010.

[9] A. Ilman, "Penerapan Algoritma Minimax Dengan Optimasi Mtd(F) Pada Permainan Catur," Makalah IF2251 Strategi Algoritmik, 2008.

[10] J. Lewis and W. Loftus, Java Software Solution Foundations of Programming Design, Sixth Edition, New Jersey: Pearson, 2008.

[11] D. A. Uston, Theory and Problems of Software Engineering, New York: McGraw-Hill, 2002.

[12] Microsoft, "Introduction to the C# Language and the .NET Framework," Microsoft, [Online]. Available:


(38)

https://msdn.microsoft.com/en-us/library/z1zx9t92.aspx. [Accessed 18 12 2015].

[13] Microsoft, "Visual Studio," Microsoft, [Online]. Available: https://msdn.microsoft.com/en-us/vstudio/aa718325.aspx. [Accessed 15 12 2015].


(39)

Rizqiana Trinenda

Teknik Informatika – Universitas Komputer Indonesia Jl. Dipatiukur 112-114 Bandung

E-mail : rizqiana.trinenda@

ABSTRAK

Permainan 2048 adalah permainan yang diciptakan oleh pengembang web yang berasal dari Italia yaitu Gabriele Cirulli pada bulan Maret 2014. Permainan tersebut cukup mudah dimainkan karena tinggal menggeser ke kiri, kanan, atas atau bawah untuk menggabungkan kotak-kotak bernomor tertentu supaya membentuk hasil akhir 2048. Berbagai algoritma sudah diimplementasikan untuk menyelesaikannya, seperti dengan menggunakan algoritma greedy, backtracking, dan minimax. Dari hasil implementasi tersebut didapatkan bahwa algoritma greedy kurang optimal dalam menyelesaikan permainan 2048 karena dari 11 kali percobaan tidak bisa mendapatkan angka 2048 namun cepat dalam mengambil langkah sedangkan untuk algoritma backtracking dapat menyelesaikan permainan 2048 dalam 1 kali percobaan namun dengan waktu 23 menit 18 detik. Untuk algoritma minimax hasilnya ditentukan dari kedalaman dalam pencarian, semakin dalam mencari semakin besar kemungkinan untuk dapat menyelesaikan permainan 2048 namun membutuhkan waktu yang lebih lama sesuai kedalaman pencariannya. Untuk itu masih diperlukan penelitian terhadap algoritma lainnya untuk menyelesaikan permainan 2048.

Algoritma yang diteliti adalah algoritma MTD(f). Berdasarkan dari hasil penelitian, analisis perancangan sistem dan implementasi serta pengujian yang dilakukan dari algoritma MTD(f) untuk menyelesaikan permainan 2048, maka diperoleh kesimpulan bahwa algoritma MTD(f) dapat diterapkan pada permainan 2048 namun untuk mendapatkan tile 2048 agar bisa memenangkan permainan 2048 membutuhkan kedalaman pencarian minimal pencarian level tiga dan membutuhkan waktu sekitar 13 menit 59 detik. Tingkat akurasi pada algoritma MTD(f) pada pencarian dengan kedalaman level nol, satu dan dua adalah 0%, sedangkan pada level tiga adalah 20%, level empat adalah 30% dan level lima adalah 60%.

Kata kunci : Algoritma, MTD(F), minimax, permainan, 2048, pencarian

1. PENDAHULUAN

Permainan 2048 adalah permainan yang diciptakan oleh pengembang web yang berasal dari Italia yaitu Gabriele Cirulli pada bulan Maret 2014. Permainan tersebut cukup mudah dimainkan karena tinggal menggeser ke kiri, kanan, atas atau bawah untuk menggabungkan kotak-kotak bernomor tertentu supaya membentuk hasil akhir 2048 [1]. Permainan 2048 dirilis untuk berbagai platform sehingga banyak orang yang dapat memainkannya. Saat ini banyak orang menggunakan berbagai macam cara untuk menyelesaikan permainan tersebut. Berbagai algoritma sudah diimplementasikan untuk menyelesaikannya, seperti dengan menggunakan algoritma greedy, backtracking [2], dan minimax [3]. Dari hasil implementasi tersebut didapatkan bahwa algoritma greedy kurang optimal dalam menyelesaikan permainan 2048 karena dari 11 kali percobaan tidak bisa mendapatkan angka 2048 namun cepat dalam mengambil langkah sedangkan untuk algoritma backtracking dapat menyelesaikan permainan 2048 dalam 1 kali percobaan namun dengan waktu 23 menit 18 detik. Untuk algoritma minimax hasilnya ditentukan dari kedalaman dalam pencarian, semakin dalam mencari semakin besar kemungkinan untuk dapat menyelesaikan permainan 2048 namun membutuhkan waktu yang lebih lama sesuai kedalaman pencariannya. Untuk itu diperlukan penelitian terhadap algoritma lainnya untuk menyelesaikan permainan 2048.

Algoritma yang akan diteliti adalah algoritma MTD(f). Algoritma MTD(f) merupakan salah satu pengembangan dari algoritma minimax. MTD(f) adalah singkatan dari Memory-enhanced Test Driver with node n and value f. Dalam penelitiannya, Aske Plaat [4] menyatakan bahwa algoritma MTD(f) adalah algoritma minimax paling efisien dibandingkan algoritma-algoritma minimax sebelumnya. Dalam beberapa percobaan permainan komputer seperti catur, othello, dan checkers, algoritma MTD(f) mempunyai performa rata-rata lebih baik daripada algoritma-algoritma optimasi minimax lainnya seperti Alpha-Beta dan negascout [5], sehingga algoritma MTD(f) memungkinkan dapat menyelesaikan permainan 2048.


(40)

Diharapkan dengan mengimplementasikan algoritma MTD(f) dapat diketahui kemampuan algoritma MTD(f) untuk menyelesaikan permainan 2048.

1.1 Permainan 2048

Permainan 2048 merupakan permainan untuk pemain tunggal yang diciptakan pada bulan Maret 2014 oleh seorang programmer asal Italia yang bernama Gabriele Cirulli. Ketika pertama kali dirilisnya permainan ini, permainan ini langsung melesat ke peringkat 1 dunia dalam hanya waktu seminggu dan mencapai lebih dari 4 juta download dan hal tersebut merupakan rekor yang cukup fantastis. Pada kenyataannya, permainan ini

hanyalah sebuah proyek “iseng” yang dikerjakan

oleh programmer Italia tersebut yang hanya ingin mencoba apakah ia mampu membuat sebuah permainan dari awal dan ia berhasil menyelesaikan pembuatannya hanya dalam waktu seminggu. Permainan ini juga bukanlah yang pertama kali diciptakan, sebelumnya juga pernah ada permainan berjudul Three! yang memiliki tampilan serta cara bermain yang mirip, dan juga permainan 1024 yang cara bermainnya sama persis, hanya saja dengan tujuan permainan yang sedikit berbeda [1].

Gambar 1 Permainan 2048 1.2 Aturan Permainan 2048

Untuk aturan cara bermain permainan 2048 adalah sebagai berikut [1]:

1) Permainan 2048 dimainkan di papan abu-abu 4×4.

2) Di atasnya terdapat beberapa kotak dengan warna berbeda yang bergeser ketika pemain menekan empat tombol arah di keyboard. 3) Kotaknya dapat bergerak sejauh mungkin

sampai bertemu kotak lain atau pinggir papan.

4) Apabila dua kotak bernomor sama bergabung saat bergeser, keduanya akan bergabung dan menghasilkan kotak baru yang nomornya merupakan hasil penjumlahan nomor di dua kotak yang bergabung tadi.

5) Misal pada Gambar 2 kotak yang bernilai 2 bisa digabung saat pemain menggeserkan ke arah kiri atau kanan dan akan menghasilkan kotak yang bernilai 4.

baru bernomor 2 atau 4 yang muncul secara acak pada ruang kosong di papan.

8) Pemain baru menang ketika sebuah kotak bernomor 2048 muncul di papan.

9) Saat pemain tidak bisa bergerak lagi maka permainan berakhir.

10)Skor didapatkan dari hasil penggabungan kotak.

1.3 Algoritma Alphabeta Prunning

Dalam algoritma minimax, pencarian dilakukan pada seluruh bagian pohon, sementara sebagian pohon tidak seharusnya diperiksa. Alpha-beta pruning merupakan modifikasi dari algoritma

minimax, yang akan mengurangi jumlah node yang dievaluasi oleh pohon pencarian. Pencarian untuk node berikutnya akan dipikirkan terlebih dahulu. Algoritma ini akan berhenti mengevaluasi langkah ketika terdapat paling tidak satu kemungkinan yang ditemukan dan membuktikan bahwa langkah tersebut lebih buruk jika dibandingkan dengan langkah yang diperiksa sebelumnya. Sehingga, langkah berikutnya tidak perlu dievaluasi lebih jauh. Dengan algoritma ini hasil optimasi dari suatu algoritma tidak akan berubah [5]. Pada algoritma ini, terdapat dua nilai yang diatur, yaitu alpha dan beta, yang merepresentasikan nilai minum dari max yang diyakini dan nilai maksimum dari min yang diyakini. Nilai awal alpha adalah tak hingga negatif dan nilai awal beta adalah tak hingga positif. Sebagai hasil dari proses rekursif, area pencarian akan semakin kecil. Ketika beta menjadi lebih kecil dari alpha, akan berarti posisi saat itu tidak dapat menjadi hasil terbaik permainan untuk kedua pemain dan pencarian tidak perlu dilakukan lebih jauh. Pada Gambar 2 dapat dilihat pseudocode dari algoritma

alphabeta.

function alphabeta(node, depth, α, β, maximizingPlayer) if depth = 0 or node is a terminal node

return the heuristic value of node if maximizingPlayer

v := -∞

for each child of node

v := max(v, alphabeta(child, depth - 1, α, β, FALSE)) α := max(α, v)

if β ≤ α

break (* β cut-off *) return v

else v := ∞

for each child of node

v := min(v, alphabeta(child, depth - 1, α, β, TRUE)) β := min(β, v)

if β ≤ α

break (* α cut-off *) return v

Gambar Error! No text of specified style in document. Pseudocode Algoritma Alphabeta


(41)

optimasi Minimax baru yang lebih sederhana dan lebih sangkil daripada beberapa pendahulunya [4]. Nama dari algoritma ini adalah kependekan dari MTD(n,f), yang disingkat dari Memory-enhanced Test Driver with node n and value f. MTD adalah nama dari sekumpulan driver program yang mencari pohon Minimax menggunakan pemanggilan zero-window AlphaBeta. Dalam beberapa percobaan permainan komputer seperti catur, othello, dan checkers, algoritma ini mempunyai performa rata-rata lebih baik daripada Negascout (variasi dari

AlphaBeta yang diimplementasikan dalam hampir semua permainan catur, checkers, dan othello). Salah satu program catur terkuat, Cilkchess milik MIT yang menggunakan metode komputasi pararel, juga menggunakan MTD(f) sebagai algoritma pencariannya menggantikan Negascout yang digunakan oleh program catur pendahulunya, StarSocrates. Algoritma MTD(f) terdiri dari 10 baris kode saja, yaitu seperti pada Gambar 3.

function MTDF(root, f, d) g := f

upperBound := +∞

lowerBound := -∞

while lowerBound < upperBound if g = lowerBound then β:= g+1

else β := g

g := AlphaBeta (root, β-1, β, d) if g < β then

upperBound := g else

lowerBound := g return g

Gambar 3 Psuedo Code Algoritma MTD(f) Algoritma MTD(f) tersebut memanggil fungsi

Alpha Beta berkali kali dengan metode zero-window

pencarian Alpha-Beta, tidak seperti Negascout yang menggunakan pencarian wide-window. Pemanggilan

Alpha Beta mengembalikan batas dari nilai evaluasi Minimax. Batas dari nilai itu kemudian disimpan dalam upperbound (batas atas) dan lowerbound (batas bawah), membentuk sebuah interval yang melingkupi nilai Minimax yang sebenarnya pada pencarian dengan kedalaman tertentu. Positif dan negatif tak hingga adalah kependekan dari nilai diluar interval pada daun pohon. Ketika batas atas dan batas bawahnya bernilai sama atau batas bawah telah melampaui nilai batas atas, maka nilai Minimax telah ditemukan.

Gambar 4 Pohon Pencarian MTD(F)

2. ISI PENELITIAN

2.1 Analisis Masalah

Berdasarkan penelitian yang dilakukan oleh Stephen dari Institut Teknologi Bandung yang menerapkan algoritma greedy dan backtracking pada permainan 2048 [2] dan Vasilis Vryniotis yang menerapkan algoritma minimax pada permainan 2048 [3], didapatkan bahwa algoritma greedy kurang optimal dalam menyelesaikan permainan 2048 karena dari 11 kali percobaan tidak bisa mendapatkan angka 2048 namun cepat dalam mengambil langkah sedangkan untuk algoritma backtracking dapat menyelesaikan permainan 2048 dalam 1 kali percobaan namun dengan waktu 23 menit 18 detik. Untuk algoritma minimax hasilnya ditentukan dari kedalaman dalam pencarian, semakin dalam mencari semakin besar kemungkinan untuk dapat menyelesaikan permainan 2048 namun membutuhkan waktu yang lebih lama sesuai kedalaman pencariannya. Untuk itu diperlukan penelitian terhadap algoritma lainnya untuk menyelesaikan permainan 2048.

2.2 Analisis Permainan 2048

Permainan 2048 merupakan permainan yang dimainkan sendiri. Pada tugas akhir ini permainan akan dilakukan oleh algoritma yang akan diteliti yaitu MTD(f) untuk menentukan solusi dalam menyelesaikan permaian 2048. Permainan 2048 dimainkan dengan cara digeser ke kiri, kanan, atas dan bawah. Permainan akan berakhir bila tidak ada kotak yang bisa digeser atau digabungkan lagi. Permainan akan dimenangkan bila berhasil mendapatkan kotak yang bernilai 2048. Secara acak angka 2 atau 4 akan muncul bila sudah digeser. Bila ada kotak yang sama nilainya dan posisinya bersebelahan maka nilainya bisa digabungkan. Data masukkan untuk lawan data masukkan berupa angka 2 dan 4 dengan kemungkinan muncul untuk angka 2 adalah 90% dan angka 4 adalah 10%. Sedangkan untuk data masukkan pemain yaitu berupa arah untuk menggeser ke kiri, kanan, atas dan bawah . Bila salah satu arah tidak bisa digeser maka aplikasi tidak akan merespon dan papan permainan tidak berubah.


(42)

dihitung dengan jumlah dari nilai linier pada papan dikalikan dengan nilai dari barisan geometri dengan rasio < 1. Dapat juga ditulis sebagai berikut:

(1)

(2)

Gambar 5 Snaking Tactic 2.4 Analisis Algoritma MTD(f)

Pada bagian ini akan dibahas tentang penyelesaian permainan 2048 dengan menggunakan algoritma MTD(f). Permainan 2048 dimainkan pada sebuah papan permainan dengan ukuran 4x4 sehingga total kotaknya adalah 16. Papan permainan tersebut direpresentasikan dalam matriks 4x4.

0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 2,0 2,1 2,2 2,3 3,0 3,1 3,2 3,3 Gambar 6 Matriks Papan Permainan Algoritma MTD(f) akan diimplementasikan sebagai pemain yang akan memaksimalkan skor yang didapat. Algoritma MTD(f) memanggil algoritma AlphaBeta pruning dalam pencarian solusinya.

1024 512 256 128 2 8 4 128 4 4 2 2 16

Gambar 7 Keadaan awal Papan Permainan Kemudian dicari langkah selanjutnya dengan menggunakan algoritma MTD(f) untuk mendapatkan nilai evaluasi tiap langkah. Tiap langkah yang telah dicari dapat dilihat pada tabel berikut:

1 0 0 -∞ +∞

1170,5 0 1170,5 +∞

2 1170,5 1171,5 1170,5 +∞

1172 1171,5 1172 +∞

3 1172 1172,5 1172 +∞

1172 1172,5 1172,5 1172 Tabel 2 Hasil Pencarian Langkah Kanan Iterasi

Ke- G Beta Lowerbound Upperbound

1 0 0 -∞ +∞

1170,5 0 1170,5 +∞

2 1170,5 1171,5 1170,5 +∞

1172 1171,5 1172 +∞

3 1172 1172,5 1172 +∞

1172 1172,5 1172,5 1172 Tabel 3 Hasil Pencarian Langkah Atas Iterasi

Ke- G Beta Lowerbound Upperbound

1 0 0 -∞ +∞

1184 0 1184 +∞

2 1184 1185 1184 +∞

1184 1185 1184 1184

Tabel 4 Hasil Pencarian Langkah Bawah Iterasi

Ke- G Beta Lowerbound Upperbound

1 0 0 -∞ +∞

1025 0 1025 +∞

2 1025 1026 1025 +∞

1172 1026 1172 +∞

3 1172 1173 1172 +∞

1172 1173 1172 1172

Pada tabel diatas telah dilakukan pencarian menggunakan algoritma MTD(f). Variabel G adalah nilai pencarian dari pemanggilan fungsi alphabeta, variabel beta nilai beta pada MTD(f) untuk nilai upperbound pada fungsi alphabet, sedangkan lowerbound dan upperbound adalah batas atas dan batas bawah dari algoritma MTD(f) dalam melakukan pencarian. Kemudian didapatkan nilai tiap perpindahan sebagai berikut : Kiri = 1172, Kanan = 1172, Atas = 1184 dan Bawah =1172. Dari hasil tersebut didapatkan bahwa langkah selanjutnya adalah ke atas

2.5 Pengujian Sistem

Pengujian algoritma dilakukan untuk menguji tingkat akurasi dan kecepatan dari algoritma MTD(f) yang telah diimplementasikan pada permainan 2048. Permainan 2048 akan dimainkan oleh algoritma MTD(f) sebanyak 10 kali tiap tingkat kedalaman pencarian. Kemudian dihitung jumlah permainan yang bisa mencapai angka 2048 pada tiap tingkat kedalaman pencarian. Sehingga untuk mendapatkan hasil akurasi algoritma MTD(f) dengan membandingkan banyaknya jumlah permainan yang bisa mencapai angka 2048 dengan banyaknya permainan yang telah dilakukan. Pencarian akan


(43)

menyelesaikan permainan 2048.

Tabel 5 Hasil Pengujian Kedalaman Level 0 Percoba

an ke- Status

Tile Paling besar Waktu (HH:mm:ss.SS S) Skor 1 Gagal 256 00:00:05.627 3368 2 Gagal 256 00:00:05.452 3236 3 Gagal 128 00:00:04.053 1932 4 Gagal 256 00:00:04.695 2632 5 Gagal 512 00:00:07.212 5184 6 Gagal 64 00:00:01.734 668 7 Gagal 256 00:00:05.787 3472 8 Gagal 256 00:00:05.761 3364 9 Gagal 256 00:00:06.370 3884 10 Gagal 128 00:00:03.698 1796

Tabel 6 Hasil Pengujian Kedalaman Level 1 Percobaan

ke- Status Tile Paling

besar

Waktu

(HH:mm:ss.SSS) Score 1 Gagal 512 00:00:10.845 8548 2 Gagal 256 00:00:04.725 2928 3 Gagal 256 00:00:05.151 3140 4 Gagal 512 00:00:09.751 7108 5 Gagal 256 00:00:06.577 4200 6 Gagal 512 00:00:08.955 6580 7 Gagal 128 00:00:02.640 1292 8 Gagal 512 00:00:08.136 5728 9 Gagal 256 00:00:07.661 5012 10 Gagal 128 00:00:02.824 1380

Tabel 7 Hasil Pengujian Kedalaman Level 2 Percobaan

ke- Status Tile Paling

besar

Waktu

(HH:mm:ss.SSS) Score 1 Gagal 1024 00:07:50.290 16404 2 Gagal 1024 00:06:03.666 12588 3 Gagal 512 00:01:45.126 9352 4 Gagal 1024 00:04:01.744 14824 5 Gagal 512 00:00:46.471 7272 6 Gagal 512 00:01:18.127 8092 7 Gagal 1024 00:06:11.310 16848 8 Gagal 1024 00:08:14.355 18380 9 Gagal 512 00:01:49.780 9204 10 Gagal 512 00:01:10.856 7464

Tabel 8 Hasil Pengujian Kedalaman Level 3 Percobaan

ke- Status Tile Paling

besar

Waktu

(HH:mm:ss.SSS) Score 1 Berhasil 2048 00:15:20.262 24508 2 Gagal 1024 00:10:42.021 17788 3 Gagal 1024 00:11:36.187 16476 4 Gagal 1024 00:15:19.595 9552 5 Berhasil 2048 00:26:19.731 20176 6 Gagal 1024 00:09:35.158 15620 7 Gagal 512 00:07:35.641 8780 8 Gagal 1024 00:12:23.831 12456 9 Gagal 1024 00:12:21.244 12492 10 Gagal 512 00:09:37.873 7968

besar

1 Gagal 1024 00:31:49.967 16160 2 Gagal 1024 00:28:05.387 17748 3 Gagal 1024 00:39:40.811 12252 4 Berhasil 2048 00:43:53.370 20168 5 Gagal 1024 00:36:10.246 14040 6 Berhasil 2048 00:33:54.834 20256 7 Berhasil 2048 00:29:55.392 21124 8 Gagal 1024 00:34:29.883 15448 9 Gagal 1024 00:37:18.236 15640 10 Gagal 1024 00:42:23.269 10260 Tabel 10 Hasil Pengujian Kedalaman Level 5 Percobaan

ke- Status Tile Paling

besar

Waktu

(HH:mm:ss.SSS) Score 1 Berhasil 2048 00:57:05.272 20472 2 Berhasil 2048 01:11:45.322 21220 3 Gagal 1024 01:08:59.489 15804 4 Berhasil 2048 01:27:40.496 20516 5 Berhasil 2048 01:13:29.821 20304 6 Gagal 1024 01:19:01.814 18708 7 Gagal 1024 01:25:12.240 19948 8 Gagal 1024 01:23:10.546 18412 9 Berhasil 2048 01:32:27.933 20572 10 Berhasil 2048 01:21:23.320 20344 2.6 Hasil Pengujian

Hasil pengujian yang telah dilakukan sepuluh kali pada setiap level kedalaman dapat dilihat pada gambar.

Gambar 8 Hasil Pengujian Berdasarkan Max Tile

Gambar 9 Hasil Pengujian Berdasarkan Score 0 500 1000 1500 2000 2500

1 2 3 4 5 6 7 8 9 10

MAX TILE LEVEL 0 LEVEL 1 LEVEL 2 LEVEL 3 LEVEL 4 LEVEL 5 0 5000 10000 15000 20000 25000 30000

1 2 3 4 5 6 7 8 9 10

Score LEVEL 0 LEVEL 1 LEVEL 2 LEVEL 3 LEVEL 4 LEVEL 5


(44)

Gambar 10 Hasil Pengujian Berdasarkan Waktu

3. PENUTUP

3.1 Kesimpulan

Berdasarkan dari hasil penelitian, analisis perancangan sistem dan implementasi serta pengujian yang dilakukan dari algoritma MTD(f) untuk menyelesaikan permainan 2048, maka diperoleh kesimpulan bahwa algoritma MTD(f) dapat diterapkan pada permainan 2048 namun untuk mendapatkan tile 2048 agar bisa memenangkan permainan 2048 membutuhkan kedalaman pencarian minimal pencarian level tiga dan membutuhkan waktu sekitar 13 menit 59 detik. Tingkat akurasi pada algoritma MTD(f) pada pencarian dengan kedalaman level nol, satu dan dua adalah 0%, sedangkan pada level tiga adalah 20%, level empat adalah 30% dan level lima adalah 60%.

3.2 Saran

Dalam implementasi algoritma MTD(f) pada permainan 2048 ini masih jauh dari sempurna dan masih banyak kekurangan. Oleh karena itu perlu dilakukan analisis yang lebih dalam. Adapun saran yang dapat diberikan oleh peneliti pada penelitian ini adalah menerapkan algoritma lainnya yang dapat diterapkan pada permainan 2048 agar bisa lebih cepat dan akurat untuk menyelesaikan permainan 2048.

DAFTAR PUSTAKA

[1] K. Lu, "Game Theory of 2048," Math 89s: Game Theory and Democracy, 2014.

[2] Stepen, "Perbandingan Algoritma Greedy & Bactracking Dalam Penyelesaian Permainan 2048," Makalah IF2211 Strategi Algoritma ,

2014.

[3] V. Vryniotis, "Using Artificial Intelligence to solve the 2048 Game (JAVA code) | Datumbox," 14 November 2014. [Online]. Available:

http://blog.datumbox.com/using-faster than NegaScout," Erasmus University, Rotterdam, 1997.

[5] M. Shalihin, I. Arwani and E. M. Adam, "Penerapan Algoritma Minimax Dengan Optimasi Mtd(F) Pada Permainan Dam-Daman," Informatika, 2014.

[6] R. S. Pressman, Software Engineering: A

Practitioner’s Approach, Seventh Edition, New

York: McGraw-Hill, 2010.

[7] J. V. Neumann and O. Morgenstern, Theory of Games and Economic Behavior, Third Edition, New Jersey: Princeton, 1953.

[8] S. Russell and P. Norvig, Artificial Intelligence A Modern Approach, Third Edition, New Jersey: Pearson, 2010.

[9] A. Ilman, "Penerapan Algoritma Minimax Dengan Optimasi Mtd(F) Pada Permainan Catur," Makalah IF2251 Strategi Algoritmik,

2008.

[10] J. Lewis and W. Loftus, Java Software Solution Foundations of Programming Design, Sixth Edition, New Jersey: Pearson, 2008.

[11] D. A. Uston, Theory and Problems of Software Engineering, New York: McGraw-Hill, 2002. [12] Microsoft, "Introduction to the C# Language

and the .NET Framework," Microsoft, [Online]. Available: https://msdn.microsoft.com/en-us/library/z1zx9t92.aspx. [Accessed 18 12 2015].

[13] Microsoft, "Visual Studio," Microsoft,

[Online]. Available:

https://msdn.microsoft.com/en-us/vstudio/aa718325.aspx. [Accessed 15 12 2015]. 0 1000 2000 3000 4000 5000 6000

1 2 3 4 5 6 7 8 9 10

LEVEL 0 LEVEL 1 LEVEL 2 LEVEL 3 LEVEL 4 LEVEL 5


(45)

Rizqiana Trinenda

Teknik Informatika – Universitas Komputer Indonesia Jl. Dipatiukur 112-114 Bandung

E-mail : rizqiana.trinenda@yahoo.co.id

ABSTRACT

The 2048 game is a game created by web developers coming from Italy, namely Gabriele Cirulli in March 2014. The game is fairly easy to play because it just move left, right, up or down to merge certain numbered boxes in order to form 2048. Various algorithms have been implemented to solve the game, such as greedy algorithm, backtracking, and minimax. The result of implementation showed that greedy algorithm not optimal at completing the game 2048 because of in the 11 trials could not get the numbers 2048, but quickly in taking the step while backtracking algorithm can finish the game 2048 in the first time trial but with a time of 23 minutes 18 seconds. For minimax algorithm results are determined from the depths in the search, the more searching the more likely to be able to complete the game 2048, but it took much longer appropriate depth search. For that reason, research is still needed on other algorithms to complete the game 2048.

The algorithm that studied is MTD (f) algorithm. Based on the results of the study, analysis of system design and implementation as well as tests performed on the algorithms MTD (f) to finish the 2048 game, it could be concluded that the algorithm MTD (f) can be applied to the 2048 game, but to get the tile in 2048 in order to win the 2048 game requires search the depths of at least level three and takes about 13 minutes 59 seconds. The level of accuracy of the algorithm MTD (f) on a search with a depth of level zero, one and two is 0%, whereas on level three is 20%, level four is 30%, and level five is 60%.

Keywords: algorithm, MTD (F),minimax, game, 2048, searching

1. INTRODUCTION

The 2048 game is a game created by a web developer who comes from Italy, namely Gabriele Cirulli in March 2014. The game is quite easy to play because it just move left, right, up or down to incorporate a specific numbered squares that make up the final result in 2048 [1]. The game was

released in 2048 for various platforms so that many people can play it. Today many people use various ways to finish the game. Various algorithms have been implemented to solve, such as by using a greedy algorithm, backtracking [2], and minimax [3]. The implementation of the results showed that less than optimal greedy algorithm in completing the game in 2048 because of the 11 trials could not get the numbers in 2048, but quickly in taking the step while backtracking algorithm can finish the game in 2048 in the first time trial but with a time of 23 minutes 18 seconds. For minimax algorithm results are determined from the depths in the search, the more in looking the more likely to be able to complete the game in 2048, but it took much longer appropriate depth search. It required a study of other algorithms to complete the game in 2048. The algorithm that will be examined is the algorithm MTD (f). Algorithm MTD (f) development is one of the minimax algorithm. MTD (f) stands for Memory-enhanced Test Driver with node n and value f. In his research, Aske PLAAT [4] states that the algorithm MTD (f) algorithm is the most efficient minimax than previous minimax algorithms. In some experiments computer games such as chess, othello, and checkers, algorithms MTD (f) have average performance is better than the algorithms optimization minimax such as Alpha-Beta and negascout [5], so the algorithm MTD (f) possible can be finishing the game in 2048. From the description, it will be conducted to implement the algorithm MTD (f) in 2048. It is expected to complete the game to implement the algorithm MTD (f) can be determined the ability of the algorithm MTD (f) to finish the game in 2048.

1.1 The 2048 Game

The 2048 game is a game for single player that was created in March 2014 by an Italian programmer named Gabriele Cirulli. When the first release of this game, the game went straight to number 1 of the world in just a week and more than 4 million downloads and it is a record that is quite fantastic. In fact, this game is just a project "fad" that was done by the Italian programmer who just want to try if he could create a game from scratch, and he managed to finish preparation in just one


(46)

1024 that the way to play the game exactly the same, just with a slightly different game goal [1].

Figure 1 The 2048 Game 1.2 Rules Of The Game 2048

For the rules of how to play the game in 2048 is as follows [1]:

1) The game is played on a board 2048 gray 4 × 4.

2) At the top there are several boxes with different colors that shift when the player presses the four directional keys on the keyboard.

3) The box can move as far as possible to meet another box or skirting boards.

4) If the two boxes of the same number to join the current shift, the two will merge and produce a new box number is the sum of the two numbers in the box to join earlier. 5) For example in Figure 2 boxes are worth 2

could be merged when a player shift to the left or right and will generate valuable box 4. 6) The new box is not able to join the other

boxes in the same direction.

7) In every shift there will be a new box numbered 2 or 4 that appear randomly on the empty space on the board.

8) The new player wins when a 2048 numbered boxes appear on the board.

9) When a player can not move anymore, the game ends.

10) Score obtained from the merger of the box.

1.3Alphabeta PrunningAlgorithm

In minimax algorithm, a search is performed on all parts of the tree, while most trees should not be checked. Alpha-beta pruning is a modification of the minimax algorithm, which will reduce the number of nodes that are evaluated by the search tree. The search for the next node will be considered first. This algorithm will stop evaluating steps when there is at least a possibility of being discovered and proved that such a step worse than the measures examined earlier. Thus, the next step does not need to be evaluated further. With this algorithm optimization results of an algorithm will not change [5]. In this algorithm, there are two values that set, namely alpha and beta, which represents the value

positive infinity. As a result of a recursive process, the search area will be smaller. When beta becomes smaller than alpha, will mean that the current position can not be the best outcome for both the game and the players do not need to search further. In Figure 2 can be seen pseudocode of the algorithm Alphabeta.

function alphabeta(node, depth, α, β, maximizingPlayer) if depth = 0 or node is a terminal node

return the heuristic value of node if maximizingPlayer

v := -∞

for each child of node

v := max(v, alphabeta(child, depth - 1, α, β, FALSE)) α := max(α, v)

if β ≤ α

break (* β cut-off *) return v

else v := ∞

for each child of node

v := min(v, alphabeta(child, depth - 1, α, β, TRUE)) β := min(β, v)

if β ≤ α

break (* α cut-off *) return v

Figure 2 Pseudocode Alphabeta Algorithm

1.4 MTD(f) Algorithm

MTD(f) algorithm is a new Minimax optimization algorithm that is simpler and more sangkil than some of its predecessors [4]. The name of the algorithm is short for MTD (n, f), which is abbreviated from Memory-enhanced Test Driver with node n and value f. MTD is the name of a set of drivers looking for a program that uses the calling tree Minimax zero-window Alphabeta. In some experiments computer games such as chess, othello, and checkers, this algorithm has average performance is better than Negascout (variation of Alphabeta implemented in almost all of the game of chess, checkers and othello). One of the strongest chess program, Cilkchess MIT that uses parallel computing method, also using MTD (f) as a search algorithm replaces Negascout used by his predecessor chess program, StarSocrates. Algorithm MTD (f) consists of 10 lines of code alone as in Figure 3.

function MTDF(root, f, d) g := f

upperBound := +∞

lowerBound := -∞

while lowerBound < upperBound if g = lowerBound then β:= g+1

else β := g


(1)

Jurnal Ilmiah Komputer dan Informatika (KOMPUTA)

Edisi. .. Volume. .., Bulan 20.. ISSN : 2089-9033

[5] M. Shalihin, I. Arwani and E. M. Adam, "Penerapan Algoritma Minimax Dengan Optimasi Mtd(F) Pada Permainan Dam-Daman," Informatika, 2014.

[6] R. S. Pressman, Software Engineering: A

Practitioner’s Approach, Seventh Edition, New

York: McGraw-Hill, 2010.

[7] J. V. Neumann and O. Morgenstern, Theory of Games and Economic Behavior, Third Edition, New Jersey: Princeton, 1953.

[8] S. Russell and P. Norvig, Artificial Intelligence A Modern Approach, Third Edition, New Jersey: Pearson, 2010.

[9] A. Ilman, "Penerapan Algoritma Minimax Dengan Optimasi Mtd(F) Pada Permainan Catur," Makalah IF2251 Strategi Algoritmik, 2008.

[10] J. Lewis and W. Loftus, Java Software Solution Foundations of Programming Design, Sixth Edition, New Jersey: Pearson, 2008.

[11] D. A. Uston, Theory and Problems of Software Engineering, New York: McGraw-Hill, 2002. [12] Microsoft, "Introduction to the C# Language

and the .NET Framework," Microsoft, [Online]. Available: https://msdn.microsoft.com/en-us/library/z1zx9t92.aspx. [Accessed 18 12 2015].

[13] Microsoft, "Visual Studio," Microsoft,

[Online]. Available:

https://msdn.microsoft.com/en-us/vstudio/aa718325.aspx. [Accessed 15 12 2015].


(2)

iii

KATA PENGANTAR

Segala puji dan syukur penulis panjatkan kehadirat sang Mahakuasa Allah SWT, karena dengan izin-Nya dan setitik ilmu pengetahuan yang dipinjamkan kepada mahluk-Nya laporan skripsi ini dapat diselesaikan tepat pada waktunya. Shalawat serta salam semoga senantiasa tercurahkan kepada baginda Nabi Besar Muhammad SAW beserta seluruh keluarga dan sahabatnya yang selalu membantu perjuangan beliau dalam menegakkan Dinullah di muka bumi ini.

Laporan skripsi dengan judul “Implementasi Algoritma MTD(F) untuk Menentukan Solusi Pada Board Game 2048” ini disusun guna memenuhi salah

satu syarat dalam menyelesaikan studi jenjang strata satu (S1) di Program Studi Teknik Informatika Universitas Komputer Indonesia. Selama menulis skripsi ini, penulis telah mendapatkan banyak sekali bimbingan dan bantuan dari berbagai pihak yang telah dengan segenap hati dan keikhlasan yang penuh membantu dan membimbing penulis dalam menyelesaikan laporan ini. Dengan kerendahan hati penulis ucapkan terima kasih kepada :

1. Kedua Orang Tua, Bapak Wibawan Abuhanifah dan Ibu Tuti yang selalu berdoa serta memberikan kasih sayang, dukungan, dan bimbingan untuk anaknya.

2. Keluarga Besar yang selalu memberikan doa, nasehat-nasehat, semangat, dan motivasi yang begitu besar.

3. Bapak Galih Hermawan, S.Kom., M.T. selaku dosen pembimbing yang selalu mengarahkan, membimbing dan memberikan saran-sarannya selama melakukan penelitian tugas akhir.

4. Ibu Sufaatin, S.T., M.Kom. Selaku dosen wali IF-10 angkatan 2009.

5. Segenap Dosen Program Studi Teknik Informatika yang senantiasa sabar dalam berbagi ilmu pengetahuan dari awal menjadi mahasiswa hingga sekarang.

6. Teman-teman seperjuangan IF-10 2009 yang selalu ceria bersama-sama dalam menuntut ilmu di kampus yang penuh dengan suka dan duka.


(3)

iv

7. Teman-teman Divisi Service Operation Telkom yang selalu memberi semangat untuk segera menyelesaikan laporan skripsi ini.

Penulis sadar bahwa dalam penulisan skripsi ini masih terdapat banyak kekurangan. Oleh karena itu penulis sangat mengharapkan segala bentuk saran dan kritik dari semua pihak demi penyempurnaan skripsi ini. Akhir kata, semoga Allah SWT senantiasa melimpahkan karunia-Nya dan membalas segala amal budi serta kebaikan pihak-pihak yang telah membantu penulis dalam penyusunan laporan ini dan semoga tulisan ini dapat memberikan manfaat bagi pihak-pihak yang membutuhkan.

Bandung, Februari 2016


(4)

(5)

(6)