DEPARTEMEN ILMU KOMPUTER
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
INSTITUT PERTANIAN BOGOR
BOGOR
2012
PEMODELAN DAN SOLUSI
GAME
MATE IN ONE PUZZLE
DENGAN REPRESENTASI LOGIKA
ANSWER SET
PROGRAMMING
DEPARTEMEN ILMU KOMPUTER
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
INSTITUT PERTANIAN BOGOR
BOGOR
2012
PEMODELAN DAN SOLUSI
GAME
MATE IN ONE PUZZLE
DENGAN REPRESENTASI LOGIKA
ANSWER SET
PROGRAMMING
RAHMAN SUJATMAN
Skripsi
sebagai salah satu syarat untuk memperoleh gelar
Sarjana Komputer pada
ABSTRACT
RAHMAN SUJATMAN. Modeling and Solving Mate In One Puzzles Using Answer Set Programming. Supervised by MUSHTHOFA.
Since the beginning of AI, mind games, such as Chess, have been studied as application fields for AI. Several variation of chess related problems have been shown to be NP-complete. This research deals with the problem of Mate in One Puzzles. We employ Answer Set Programming (ASP) to tackle this problem. ASP has been, in the last decade, the subject of active research in the field of logic programming, knowledge representation, and reasoning. ASP allows for an intuitive representation of computationally hard problems as well as efficient solving using state-of-the-art solvers, such as DLV. In this research, a representation of Mate In One Puzzles has been formulated and a prototype application system written using PHP and DLV has also been implemented. Experimental results show that the system is capable of generating solutions for Mate in One problem efficiently. However, the representation is still not efficient enough to be used for more difficult class of problems such as Mate in Two and Mate in Three.
Judul Skripsi : Pemodelan dan Solusi GameMate In One Puzzledengan Representasi Logika AnswerSet Programming
Nama : Rahman Sujatman
NRP : G64070046
Menyetujui: Pembimbing,
Mushthofa, S.Kom, M.Sc NIP. 19820325 200912 1 003
Mengetahui:
Ketua Departemen Ilmu Komputer,
Dr. Ir. Agus Buono, M.Si, M.Kom NIP. 19660702 199302 1 001
RIWAYAT HIDUP
Penulis dilahirkan di Sukabumi, Jawa Barat pada tanggal 04 Maret 1989 dari ayah yang bernama Oding Solehudin S.Pd dan ibu yang bernama Esin Susilahadiyanti. Penulis merupakan anak pertama dari tiga bersaudara. Anak kedua bernama Isep Wahyudin, dan anak ketiga bernama Dinur Saptiadi.
PRAKATA
Puji dan syukur penulis panjatkan kepada Allah atas segala curahan rahmat dan karunia-Nya sehingga skripsi ini dapat diselesaikan. Skripsi yang berjudul Pemodelan dan Solusi Game Mate In One Puzzles dengan Representasi Logika AnswerSet Programming ini merupakan hasil penelitian yang dilakukan oleh penulis yang dimulai dari bulan Mei 2011 sampai bulan Mei 2012.
Penulis mengucapkan terima kasih kepada Bapak Mushthofa, S.Kom, M.Sc sebagai pembimbing yang telah memberi saran, masukan, dan ide-ide kepada penulis dalam menyusun skripsi ini. Penulis juga mengucapkan terima kasih kepada seluruh staf pengajar Departemen Ilmu Komputer atas ilmu yang telah diberikan, serta tidak lupa kepada staf tata usaha yang membantu administrasi selama kuliah di Institut Pertanian Bogor.
Penulis berterima kasih setulus-tulusnya kepada orang tua yang telah memberikan kasih sayang, perhatian, doa, dan semangat selama kuliah di IPB, serta dukungannya dalam bentuk moral maupun material.
Terima kasih yang sebesar-besarnya kepada teman-teman terbaik dari Ilkomerz 44 yang memberikan dukungan, bantuan, dan saran kepada penulis selama kuliah sampai penulis menyusun skripsi. Kepada semua pihak lainnya yang telah memberikan kontribusi yang besar selama pengerjaan penelitian ini yang tidak dapat disebutkan satu per satu, penulis ucapkan terima kasih banyak.
Semoga penelitian ini dapat memberikan manfaat kepada pembaca sebagai referensi penelitian lanjutan dan pengembangan ilmu pengetahuan.
Bogor, Oktober 2012
v
DAFTAR ISI
Halaman
DAFTAR GAMBAR ... vi
DAFTAR LAMPIRAN ... vii
PENDAHULUAN Latar Belakang ... 1
Tujuan Penelitian ... 1
Ruang Lingkup Penelitian ... 1
TINJAUAN PUSTAKA Logic Programming ... 1
Answer Set Programming ... 2
Syntax ... 2
Answer Set Semantics ... 2
Reasoning Task ... 4
DLV ... 4
METODE PENELITIAN Studi Literatur ... 6
Pengumpulan Kasus ... 6
Identifikasi Kasus ... 6
Identifikasi Aturan Catur ... 6
Representasi Logika ASP dari Game Mate in One Puzzles ... 6
Pembuatan Back-ends ... 6
Pembuatan Front-ends ... 7
Pengujian dan Analisis ... 7
HASIL DAN PEMBAHASAN Identifikasi Aturan Catur ... 7
Representasi Logika ASP dari Game Mate in One Puzzles ... 11
Pembuatan Back-ends ... 11
Pembuatan Front-ends ... 17
Pengujian dan Analisis ... 18
KESIMPULAN DAN SARAN Kesimpulan ... 21
Saran ... 21
DAFTAR PUSTAKA ... 21
DAFTAR TABEL
Halaman
1 Hubungan antara banyak anak catur dan waktu ... 20
2 Hubungan antara ruang gerak anak catur dan waktu ... 20
DAFTAR GAMBAR
Halaman 1 Problem solving in ASP ... 22 Semua interpretasi I terhadap program P ... 3
3 Pewarnaan Peta Australia ... 4
4 4-Queen dan kotak papan catur 4x4 ... 5
5 Ilustrasi answer set pertama pada kasus tambahan pertama. ... 5
6 Ilustrasi answer set pertama pada kasus tambahan kedua. ... 6
7 Diagram proses penyelesaian gameMate In One Puzzles dengan answer set programming ... 6
8 Posisi papan catur awal ... 7
9 Pergerakan Menteri ... 7
10 Pergerakan makan dan terhalang pada Menteri ... 8
11 Pergerakan Benteng... 8
12 Pergerakan Gajah ... 8
13 Pergerakan Kuda ... 8
14 Pergerakan Kuda makan ... 9
15 Pergerakan Bidak ... 9
16 Pergerakan Bidak setelah dijalankan ... 9
17 Pergerakan Bidak makan ... 10
18 Pergerakan Raja ... 10
19 Pergerakan Raja makan dan terhalang ... 10
20 Keadaan sekak ... 10
21 Cara menghindari sekak pertama ... 11
22 Cara menghindari sekak kedua ... 11
23 Cara menghindari sekak ketiga ... 11
24 Papan pergerakan Queen ... 12
25 Papan pergerakan WhiteKnight ... 12
26 Papan pergerakan makan Knight ... 13
27 Papan pergerakan makan Pawn ... 13
28 Kondisi terhalang pada Queen ... 14
29 Posisi BlackKing dalam keadaan disekak oleh White Queen ... 14
30 Arsitektur sistem ... 17
31 Antarmuka halaman utama ... 17
32 Antarmuka halaman kasus ... 17
33 Antarmuka halaman hasil pengkodean ... 18
34 Antarmuka halaman hasil akhir ... 18
35 Grafik hubungan antara banyak anak catur dan waktu ... 19
36 Grafik hubungan antara banyak anak catur dan waktu ... 19
37 Jenis dan ruang gerak anak catur pada kasus 7 ... 19
38 Jenis dan ruang gerak anak catur pada kasus 27 ... 19
39 Jenis dan ruang gerak anak catur pada kasus 47 ... 20
40 Jenis dan ruang gerak anak catur pada kasus 3 ... 20
vii
DAFTAR LAMPIRAN
Halaman
1 Kode rule_utama.dl. ... 23
2 Kode lakukan_langkah.dl ... 27
3 Kode periksa_sekakmate.dl ... 28
4 Tabel hubungan antara banyak anak catur dan waktu ... 29
PENDAHULUAN
Latar Belakang
Catur dikategorikan sebagai permainan dan olahraga mental untuk mengimbangi olahraga fisik. Catur juga merupakan salah satu bidang yang menjadi domain permasalahan dan menjadi tolok ukur dalam bidang AI (Shannon 1950). Salah satucontoh permasalahan permainan catur ialah game Mate In One Puzzles. Mate In One merupakan langkah pertama dalam membuat sebuah permainan catur karena pada dasarnya permainan catur itu adalah Mate in N. Pada permasalahan Mate In One, secara komputasi algoritme yang dapat digunakan untuk memecahkan masalah tersebut cukup sulit karena tetap membutuhkan kaidah-kaidah permainan catur walaupun hanya untuk mematikan satu langkah.
Answer Set Programming merupakan teknik pemrograman dengan paradigma deklaratif. Pemrograman deklaratif lebih singkat untuk mendapatkan penyelesaian suatu permasalahan daripada pemrograman imperatif (Lifschitz 2008). Pemrograman deklaratif hanya perlu memberikan ekpresi logika untuk mendapatkan penyelesaian suatu permasalahan. Ekpresi logika yang diberikan dapat berupa aturan (rule) dan fakta (fact). Pada pemrograman dengan paradigma imperatif harus diberikan perintah-perintah komputasi yang harus dilakukan oleh komputer untuk permasalahan yang sama. Hal ini memungkinkan kompleksitas pemrograman deklaratif menjadi lebih rendah daripada pemrograman imperatif.
Saat ini, Answer Set Programming menjadi sangat marak digunakan. Pada beberapa dekade terakhir, Answer Set Programming (ASP) sendiri berkembang dengan pesat sebagai salah satu metode yang powerful dan menarik untuk menyelesaikan masalah dan representasi pengetahuan deklaratif, sehingga memungkinkan membentuk deklarasi untuk suatu representasi masalah dan penyelesaiannya. ASP memiliki semantics yang mudah dimengerti.
DLV merupakan salah satu sistem yang menerapkan Answer Set Programming. DLV memiliki kinerja yang baik dan populer digunakan sebagai sistem penyelesaian ASP saat ini. DLV mampu memecahkan banyak masalah sulit dalam kehidupan nyata (Leone et al. 2006).
Oleh karena itu, pada penelitian ini akan diterapkan Answer Set Programming untuk merepresentasikan dan menyelesaikan permasalahan Mate In One Puzzle sehingga dapat menjadi rujukan penerapan Answer Set Programming pada domain permasalahan catur.
Tujuan Penelitian
Penelitian ini bertujuan merancang dan mengimplementasikan pengodean permasalahan dan solusi dari Mate In One Puzzles, serta menguji keefektifan dari encoding atau pengkodean yang didapatkan pada beberapa kasus uji game Mate In One Puzzles dengan menggunakan logika Answer Set Programming.
Ruang Lingkup Penelitian
Pada penelitian ini, kasus-kasus yang terdapat dalam game Mate In One Puzzles diperoleh dari sebuah game Kasparov Chessmate dari ebookChess: 5334 Problems, Combinations, and Games serta dari website maetinone.com dengan sedikit modifikasi. Selain itu, beberapa kasus ada yang dibuat sendiri. Total kasus yang diuji ialah 75 kasus. Solver yang digunakan untuk eksekusi Answer Set Programming ini adalah DLV dan kemudian ditampilkan dengan menggunakan bahasa pemrograman PHP. Pengujian yang dilakukan ada 3 jenis: pertama kasus dengan
Logic programming merupakan bagian dari cara pendekatan pemrograman. Teknik pemrograman dengan paradigma deklaratif. tersusun secara jelas perintah-perintah komputasi yang diterima komputer. Namun, terdapat juga paradigma pemrograman komputer yang lain, seperti paradigma imperative programming dan functional programming (Pfenning 2006).
2
dan komponen kontrol C merupakan komponen yang menentukan cara yang digunakan. Secara simbolis, hal tersebut ditulis dengan persamaan berikut:
A = L + C
Kowalski (1979) menambahkan bahwa efisiensi dari sebuah algoritme dapat ditingkatkan dengan meningkatkan efisiensi dari komponen kontrol tanpa mengganti komponen logika dan tanpa mengubah arti algoritme tersebut.
Answer Set Programming
Answer set programming (ASP) merupakan pemrograman dari permasalahan komputasional dan kemudian memberikan sebuah penyelesaian untuk dijadikan solver pencarian solusi permasalahan. Answer Set Programming (ASP) juga diawali dengan diperkenalkannya stable model semantic oleh Gelfond & Lifschitz (1988). ASP membuka paradigma baru terhadap pemrograman logika dengan meningkatkan semantik dari pemrograman berbasis Prolog tradisional. Selanjutnya, terdapat penambahan fitur-fitur baru seperti classical negation dan disjungsi pada bagian head (Gelfond & Lifschitz 1988). ASP menggunakan masalah pencarian untuk komputasi dengan model, stable model, dan answer set solver yang digunakan untuk masalah pencarian (Lifschitz 2000).
Permrograman menggunakan ASP tidak perlu menuliskan algoritme seperti halnya pemrograman imperatif. Hal yang harus dilakukan ialah menuliskan aturan-aturan yang bersesuaian untuk mendapatkan solusi dari masalah yang dikerjakan. Karena seperti yang telah dikemukakan oleh Kowalski (1979), Algoritme = Logika + Kontrol.
Gambar 1 Problem solving in ASP. Telah banyak pengembangan pada Answer Set Programming dibandingkan dengan pemrograman logika berbasis Prolog. Prolog tidaklah murni deklaratif. Semantik pada Prolog masih bergantung pada aspek prosedural, seperti urutan pada body literal
pada sebuah aturan (rule) dan urutan klausa-klausa dalam program tersebut. Adanya operator cutpada Prolog (“!”) juga merupakan bukti properti prosedural Prolog (Mushthofa 2010).
Syntax
Pada Answer Set Programming terdefinisi penggunaan tiga buah simbol yaitu, predikat (p), konstanta (k), dan variabel (ν). Predikat adalah simbol yang diawali dengan huruf kecil sedangkan variabel adalah simbol yang diawali dengan huruf besar. Sebuah simbol konstanta bisa bernilai numerik. Sebuah term bisa berupa konstanta atau variabel. Suatu rule terdiri atas pasangan:
Head ← Body seperti urutan pasangan di atas.
H(r) = {A0},
B(r) = {A1, …, Am, Am+1, not Am+1, …, not An}, B+(r) = {A1, …, Am}
B-(r) = {Am+1,…, An}
Bentuk aturan tanpa kepala (k = 0) disebut integrity constraint atau hard constraint. Aturan dengan minimal satu buah kepala (k = 1) disebut normal rule. Bentuk aturan dengan k > 1 disebut disjunctive rule. Jika bagian tubuh (body) kosong (m = n = 0), aturan disebut fakta (fact). Dalam penulisannya, simbol “ ” biasanya dihilangkan. Himpunan dari aturan-aturan tersebut disebut dengan extended disjunctive logic program (EDLP) atau biasa disebut program P.
Answer Set Semantics
Semantics adalah aturan untuk membentuk stable models dari kumpulan model. Kumpulan model didapatkan dari suatu logika proposional yang dibuat pemodelan berdasarkan aturan-aturan yang telah diberikan sebelumnya, kemudian diperiksa semua kemungkinan dari atom merupakan model atau bukan. Setelah didapatkan model-model dari logika proporsional tersebut, dengan mencari fact dari aturan-aturan tersebut dan dengan cara semantics yaitu menggunakan GL-Transform
akan didapatkan stables model dari formula proposionalnya (Lifschitz 2008).
Semantik dari program didefinisikan untuk program yang telah bebas dari variabel. Program yang sudah tidak mengandung variabel dapat dikatakan sebagai program ground. Dengan demikian, pertama kali dilakukan ground instantiation pada program , yaitu menghilangkan semua variabel di dalam program .
Herbrand Universe dari program yang dinotasikan dengan HUpmerupakan himpunan semua simbol konstanta yang muncul di . Jika tidak terdapat simbol kontanta di maka HUp = {a}, dengan a merupakan simbol
konstanta yang diambil sembarang dari , dengan adalah himpunan semua konstanta. Herbrand Base (HBp) dari program adalah himpunan semua literal ground yang dibangun dari simbol predikat yang muncul di dan
Semantik dari program harus mempertimbangkan program ground positif. Sebuah himpunan dari literal L ⊆ HBp dikatakan konsisten jika dan hanya jika setiap atom a ∈ HBpmemenuhi {a,¬a} ⊈L. Sebuah program merupakan sebuah interpretasi I ⊆ HBpdengan memenuhi . Sebuah answer set
dari program positif ground merupakan merupakan minimal model dari .
Untuk memperluas definisi semantik pada program dengan negasi, dikenal transformasi Gelfond-Lifschitz (transformasi GL) untuk membebaskan negasi pada program . Pada transformasi GL dari program P, interpretasi I adalah atom dari program P. Transformasi GL ini dilambangkan dengan , yang dilakukan dengan:
a Menghapus semua aturan r yang mempunyai literal negatif B- pada tubuh aturan tersebut dengan B ϵ I.
b Menghapus semua literal negatif dari semua aturan yang tersisa.
Sebuah answer set dari program P adalah I (dengan I ⊆ HBp), jika I adalah answer set dari . Semua himpunan answer set dari program dinotasikan dengan ANS(P). Program dikatakan konsisten jika mempunyai paling tidak satu answer set ditemukan dengan mencari fixpoint terhadap program . Fixpoint terhadap disebut juga immediate consequence dan dinotasikan dengan Tp.
didefinisikan sebagai interpretasi dari program definite Horn. Operator immediate consequence didefinisikan sebagai Tp (I) = {H(r) | B(r) ⊆ I, r ∈ P}. Selanjutnya Ii,
Kemungkinan model-model yang sesuai untuk program di atas dapat dilihat dari interpretasi pada Gambar 2 di bawah ini:
a, b, c, p
a,b,c a,b,p a,c,p b,c,p
a,b a,c a,p b,c b,p
4
harus selalu muncul dalam setiap model. Untuk menentukan stable model dilakukan transformasi GL dan mengecek interpretasi I = FP(PI) atau dinotasikan I = Tp(P,I).
Selanjutnya dipilih I1 = {p}, I2 = {a,p}, I3 = {b,p}, I4 = {c,p},I5 = {a,b,p}, I6 = {a,c,p}, I7 = {b,c,p}, dan I8 = {a,b,c,p}. Pada I1 = {p}, dilakukan transformasi GL terhadap program P sehingga diperoleh : merupakan stable model.
Dengan cara yang sama, untuk semua interpretasi I, diperoleh {a,c,p} dan {b,c,p} sebagai stable model dari program P dan juga merupakan answer set dari program P dan juga merupakan answer set dari program P. Reasoning Task
Answer set semantic memiliki reasoning task, di antaranya (Musthofa 2010):
1 Answer set existence: hanya memberikan satu answer set yaitu benar atau salah yang sudah dilakukan stable model.
2 Brave reasoning: untuk menentukan ada 1 answer set yang mengandung suatu konfigurasi yang ditentukan jadi asalkan ada yang menyatakan x itu benar maka x brave reasoning.
3 Cautious reasoning: untuk menentukan terdapat suatu jawaban konfigurasi di semua answer set. Jadi, x benar dalam konfigurasi tersebut jika hasil pemodelan dan answer set x ada di semua konfigurasi. 4 Generateall answer : untuk menghasilkan semua answer set yang diterima rule setelah brave reasoning dan cautious reasoning diketahui.
Contoh penerapan Answer Set dalam Pewarnaan territorial peta Australia pada Gambar 3 berikut:
C(I) vertex(WA) ← edge(WA,NT) ← vertex(NT) ← edge(NT,Q) ← vertex(Q) ← edge(Q,NSW) ← vertex(NSW) ← edge(NSW,V) ←
vertex(V) ← edge(V,SA) ← vertex(SA) ← edge(SA,WA) ←
vertex(T)
set { colored(WA,r), colored(NT,g), colored(Q,r), colored(NSW,g), colored(V,r), colored(SA,b),
colored(T,r)}
Gambar 3 Pewarnaan peta Australia.
DLV
DLV adalah salah satu answer set solver yang mengimplementasikan Disjunctive Logic Program. Berawal dari sebuah penelitian pada 1996 di Austria, DLV hingga kini dikembangkan oleh kerja sama tim dari University of Calabria dan Technical University Wien (Leone et al. 2003).
KRR (Knowledge Representation and Reasoning) yang didasarkan pada Disjunctive Logic Programming (DLP) di bawah stable model semantic (disebut juga Answer Set Programming).
Mengikuti ketentuan Prolog, string yang dimulai dengan huruf besar menunjukkan variabel, sedangkan string yang dimulai dengan huruf kecil adalah konstanta. Selain itu, DLV juga mendukung konstanta bilangan bulat positif dan konstanta string. Sebuah term adalah variabel atau konstanta. Bahasa DLV diperluas dengan adanya weak constraint. Eiter et al. (2006) menyatakan bahwa weak constraint sebagai varian dari integrity constraint. Untuk membedakan secara jelas, weak constraint menggunakan simbol “:~” bukan “:-”.
Sebagai contoh, ASP digunakan untuk menyelesaikan permasalahan n-Queens. Misalnya terdapat empat Queen dan empat Queen tersebut ingin ditempatkan dalam kotak papan catur 4x4 dan penempatan Queen tersebut satu sama lain tidak saling makan. Ilustrasi permasalahan terdapat pada Gambar 4 dan 5,
Gambar 4 4-Queen dan kotak papan catur 4x4
.
Dalam kode DLV, permasalahan tersebut dituliskan seperti di bawah ini:
baris(1..4). :- in(X1,Y1), in(X2,Y2), X2=X1+N, Y2=Y1+N, n(N),baris(X1),kolom(Y1). :- in(X1,Y1), in(X2,Y2), X2=X1+N, Y1=Y2+N, n(N),baris(X1),kolom(Y2).
Answer set yang dibentuk sebanyak 2 answer set. Answer set tersebut sebagai berikut:
{in(1,2), in(2,4), in(3,1), in(4,3), ok}
{in(1,3), in(2,1), in(3,4), in(4,2), ok}
Answer set pertama menunjukkan bahwa Queen pertama terletak pada baris 1 kolom 2, Queen kedua terletak pada baris 2 kolom 4,
Kemudian, kasusnya sekarang yaitu ada delapan Queen yang ingin diletakkan dalam kotak papan catur 8x8. Maka kode program di atas ditambahkan dalam kode DLV seperti di bawah ini: :- in(X1,Y1), in(X2,Y2), X2=X1+N, Y2=Y1+N, n(N),baris(X1),kolom(Y1). :- in(X1,Y1), in(X2,Y2), X2=X1+N, Y1=Y2+N, n(N),baris(X1),kolom(Y2).
Answer set yang sesuai dengan kendala di atas ada sebanyak 92. Answer set tersebut adalah sebagai berikut:
{in(1,7), in(2,3), in(3,8), in(4,2), in(5,5), in(6,1), in(7,6), in(8,4),ok}
. . .
{in(1,4), in(2,1), in(3,5), in(4,8), in(5,6), in(6,3), in(7,7), in(8,2),ok}
6
Gambar 6 Ilustrasi answer set pertama pada kasus tambahan kedua.
METODE PENELITIAN
Pada penelitian ini dilakukan beberapa tahap dalam proses penyelesaian gameChess Puzzles dengan Answer Set Programming pada studi kasus game Mate In one Puzzles. Pada tahap awal, permasalahan direpresentasikan terlebih dahulu ke dalam logika Answer Set Programming untuk kemudian dibuat pengodean menggunakan DLV. Diagram proses penelitian dapat dilihat pada Gambar 7. Aturan Gerak danTerhalang Aturan Makan
Aturan Skak dan Skak-Mat Identifikasi Kasus
Tidak Ada Solusi Satu Solusi Banyak Solusi
Gambar 7 Diagram proses penyelesaian game Mate In One Puzzles dengan answer set programming.
Studi Literatur
Studi literatur dilakukan untuk memperoleh informasi yang dibutuhkan selama penelitian serta memahami tahapan yang harus dilakukan dalam metode penelitian. Informasi yang harus diketahui ialah Chess, Answer Set Programming, dan informasi lainnya yang dibutuhkan dalam penelitian ini.
Pengumpulan Kasus
Pengumpulan kasus dilakukan dengan cara memindai kasus-kasus yang dikumpulkan dari berbagai sumber untuk selanjutnya dilihat dari jumlah anak catur serta kondisi permasalahan catur tersebut. Pada penelitian ini, kasus yang akan dimasukkan hanya kasus-kasus yang tingkat kesulitannya tinggi.
Identifikasi Kasus
Pada tahap identifikasi kasus, setelah kasus dikumpulkan, kasus dibedakan menjadi 3 jenis kategori. Pertama kasus dengan tidak ada solusi sebanyak 25, kedua kasus dengan satu solusi sebanyak 25, dan ketiga kasus dengan solusi lebih dari satu sebanyak 25.
Identifikasi Aturan Catur
Identifikasi aturan peraturan catur mengacu pada aturan internasional permainan catur yang dirilis oleh FIDE. Pada penelitian ini, aturan yang akan diidentifikasi yaitu aturan gerakan masing-masing perwira catur beserta aturan jika pergerakan catur tersebut terhalang, kemudian aturan makan tiap anak catur, serta aturan kondisi sekak (check) dan sekakmat (check-mate).
Representasi Logika ASP dari Game Mate in One Puzzles
Pada tahap ini dituliskan syarat secara logika game Mate in One Puzzles yang kemudian diterjemahkan solver ke dalam sebuah programming. Logika tersebut dituliskan dalam sistem DLV. Tahap ini berguna untuk tahap selanjutnya yaitu merancang back-ends.
Pembuatan Back-ends
pemrograman tertentu. Jadi, back-ends membuat gabungan pemrograman biasa ditambah DLV yang bisa dipanggil langsung dari pemrograman biasa yang pada penelitian ini menggunakan PHP.
Pembuatan Front-ends
Pada tahap pembuatan Front-ends, dirancang arsitektur dan desain tampilan depan dari program yang dibuat berdasarkan back-ends di atas yang telah dipanggil dan diintegrasikan ke dalam bahasa pemrograman PHP.
Pengujian dan Analisis
Tahap pengujian dan analisis dilakukan dengan menjalankan program logika yang telah dibuat untuk 75 percobaan, kemudian dihitung waktunya dan dianalisis jumlah yang benar dan sesuai dan lama waktu komputasinya untuk kemudian dihitung akurasinya terhadap game Mate In One Puzzles.
HASIL DAN PEMBAHASAN
Identifikasi Aturan Catur
Permainan catur yang akan dibahas dalam penelitian ini menggunakan kaidah papan catur seperti pada Gambar 8, yaitu baris papan catur berawal dari 1 sampai dengan 8, sedangkan kolom berawal dari A sampai dengan H.
Gambar 8 Posisi papan catur awal. Aturan permainan catur yang akan dibahas dalam penelitian ini terdiri atas:
1 Menteri(Queen)
Menteri merupakan buah catur yang dapat bergerak ke banyak petak. Gerakan Menteri bisa melangkah secara vertikal, horizontal, dan diagonal. Jika tidak terdapat penghalang,
dari petak d4 Menteri dapat menjangkau 27 petak lain. Representasi pergerakan Menteri pada petak d4 tersebut dapat dilihat pada Gambar 9.
Gambar 9 Pergerakan Menteri.
Posisi Menteri pada Gambar 9 jika diasumsikan dalam baris X dan kolom Y, maka baris posisi Menteri tersebut berada di baris 4 dan kolom 4, sedangkan semua posisi yang dapat dicapai oleh Menteri dirumuskan menjadi:
(X,Y1), dengan:
Y1=Y+K, Menteri bergerak horizontal ke kanan sebanyak K langkah, dan
Y1=Y-K, Menteri bergerak horizontal ke kiri sebanyak K langkah.
(X1,Y), dengan:
X1=X+K, Menteri bergerak vertikal ke atas sebanyak K langkah, dan
X1=X-K, Menteri bergerak vertikal ke bawah sebanyak K langkah.
(X1,Y1), dengan:
X1=X+K, Y1=Y+K, Menteri bergerak diagonal kanan atas sebanyak K langkah, X1=X+K, Y1=Y-K, Menteri bergerak diagonal kiri atas sebanyak K langkah, X1=X-K, Y1=Y-K, Menteri bergerak diagonal kiri bawah sebanyak K langkah, dan X1=X-K, Y1=Y+K, Menteri bergerak diagonal kanan bawah sebanyak K langkah.
8
Gambar 10 Pergerakan makan dan terhalang pada Menteri.
2 Benteng (Rook)
Benteng merupakan anak catur yang dapat bergerak secara vertikal dan horizontal. Jika posisi benteng yang berada pada petak e4 diasumsikan dalam baris X dan kolom Y, benteng berada pada baris 4 dan kolom 5. Semua posisi yang dapat dicapai oleh Menteri dirumuskan menjadi:
(X,Y1), dengan:
Y1=Y+K, Benteng bergerak horizontal ke kanan sebanyak K langkah, dan
Y1=Y-K, Benteng bergerak horizontal ke kiri sebanyak K langkah.
(X1,Y), dengan:
X1=X+K, Benteng bergerak vertikal ke atas sebanyak K langkah, dan
X1=X-K, Benteng gerak vertikal ke bawah sebanyak K langkah.
Representasi pergerakan Benteng pada petak e4 tersebut dapat dilihat pada Gambar 11.
Gambar 11 Pergerakan Benteng. Cara memakan buah catur lawan pada Benteng sama dengan Menteri, tetapi terbatas sepanjang kolom dan baris yang dikuasainya. Terdapat 14 petak yang dapat dikuasai Benteng jika Benteng dalam keadaan terbuka tanpa terhalang anak catur lain.
3 Gajah (Bishop)
Gajah merupakan anak catur yang dapat bergerak secara diagonal. Gajah yang berada
di petak putih tidak mungkin beralih ke petak hitam. Sebaliknya, Gajah pada petak hitam tidak bisa melangkah ke petak putih Representasi pergerakan Gajah tersebut dapat dilihat pada Gambar 12.
Gambar 12 Pergerakan Gajah.
Pada Gambar 12, jika posisi Gajah tersebut diasumsikan dalam baris X dan Y, Gajah putih berada pada baris 4 dan kolom 5. Semua posisi yang dapat dicapai oleh Gajah dirumuskan menjadi:
(X1,Y1), dengan:
X1=X+K, Y1=Y+K, Gajah putih bergerak diagonal kanan atas sebanyak K langkah, X1=X+K, Y1=Y-K, Gajah putih bergerak diagonal kiri atas sebanyak K langkah, X1=X-K, Y1=Y-K, Gajah putih bergerak diagonal kiri bawah sebanyak K langkah, dan X1=X-K, Y1=Y+K, Gajah putih bergerak diagonal kanan bawah sebanyak K langkah.
Cara memakan anak catur lawan juga sama dengan Menteri, tetapi terbatas sepanjang diagonal saja. Jika tidak terdapat penghalang, maka Gajah dapat menjangkau 13 petak lain.
4 Kuda (Knight)
Pada pergerakan Kuda, Kuda bergerak sebanyak dua petak menurut kolom dan kemudian satu petak lagi ke samping kolom atau baris sehingga membentuk huruf L. Representasi pergerakan Kuda tersebut dapat dilihat pada Gambar 13.
Kuda yang berada di petak hitam hanya dapat bergerak atau memakan buah lawan pada petak putih. Sebaliknya, jika Kuda itu berada di petak putih, Kuda tersebut hanya bisa bergerak atau memakan ke petak hitam. Posisi kuda pada Gambar 13 jika diasumsikan dalam baris X dan kolom Y, Kuda tersebut atas, baris bertambah 1 dan kolom bertambah 2,
X1=X-1, Y1=Y-2. Kuda bergerak ke kiri bawah baris berkurang 1 dan kolom bekurang 2,
X1=X-1, Y1=Y+2. Kuda bergerak ke kanan bawah baris berkurang 1 dan kolom bertambah 2,
X1=X+2, Y1=Y-1. Kuda bergerak ke kiri atas baris bertambah 2 dan kolom berkurang 1, X1=X+2, Y1=Y+1. Kuda bergerak ke kanan atas, baris bertambah 2 dan kolom bertambah 1,
X1=X-2, Y1=Y-1. Kuda bergerak ke kiri bawah baris berkurang 2 dan kolom berkurang 1, dan
X1=X-2, Y1=Y+1. Kuda bergerak ke kanan bawah baris berkurang 2 dan kolom bertambah 1.
Kuda dapat bergerak melompati buah catur lain yang ada di sekelilingnya sehingga Kuda tidak dapat dihalangi baik oleh buah lawan ataupun buah sendiri. Representasi pergerakan Kuda dalam keadaan terhalang dapat dilihat pada Gambar 14.
Gambar 14 Pergerakan Kuda makan.
5 Bidak atau Pion (Pawn)
Bidak atau pion merupakan buah catur yang pergerakannya hanya bergerak maju dan tidak boleh mundur. Jika kedudukan bidak
masih pada posisi asalnya, setiap bidak boleh melangkah maju ke depan sejauh dua petak atau satu petak. Representasi petak pergerakan Bidak tersebut dapat dilihat pada Gambar 15.
Gambar 15 Pergerakan Bidak.
Gambar 15 memperlihatkan kedudukan asal semua bidak. Dari kedudukan ini, setiap bidak boleh dimajukan satu petak atau dua petak sekaligus. Posisi kedua bidak tersebut jika diasumsikan dalam baris X dan kolom Y, bidak putih berada pada baris 2 dan kolom 1 sampai dengan 8, sedangkan bidak hitam berada pada baris 7, kolom 1 sampai dengan 8. Semua posisi yang dapat dicapai oleh Bidak dirumuskan menjadi:
(X1,Y), dengan:
X1=X+1. Bidak putih maju satu langkah, X1=X+2,X=2. Bidak putih maju dua langkah, X1=X-1. Bidak hitam maju satu langkah, dan X1=X-2,X=7. Bidak hitam maju dua langkah.
Gambar 16 Pergerakan Bidak setelah dijalankan
Gambar 16 memperlihatkan bidak putih maupun hitam yang sebagian sudah dijalankan. Bidak yang sudah bergerak dari kedudukan asal hanya boleh melangkah maju satu petak saja. Jika di depan bidak ada buah sendiri atau buah lawan, bidak itu tidak bisa maju atau terhalang.
10
makan Bidak tersebut dapat dilihat pada Gambar 17.
Gambar 17 Pergerakan Bidak Makan.
6 Raja (King)
Raja merupakan anak catur terpenting dalam sebuah permainan catur. Jika Raja sudah dalam keadaan sekakmat, permainan dianggap sudah berakhir. Cara Raja melangkah atau memakan sama seperti Menteri, tetapi terbatas hanya satu petak. Representasi petak pergerakan Raja dapat dilihat pada Gambar 18.
Gambar 18 Pergerakan Raja.
Raja putih di e4 tersebut dapat bergerak ke semua petak yang mengelilinginya. Jumlah petak yang dapat dicapai sebanyak delapan petak. Posisi Raja tersebut jika diasumsikan dalam baris X dan kolom Y, Raja tersebut berada di baris 4 dan kolom 5. Semua posisi yang dapat dicapai oleh Raja dirumuskan menjadi:
(X,Y1), dengan:
Y1=Y+1, Raja bergerak horizontal ke kanan satu langkah, dan
Y1=Y-1, Raja bergerak horizontal ke kiri satu langkah,
(X1,Y), dengan:
X1=X+1, Raja bergerak vertikal ke atas satu langkah, dan
X1=X-1, Raja bergerak vertikal ke bawah satu langkah.
(X1,Y1), dengan:
X1=X+1, Y1=Y+1, Raja bergerak diagonal ke kanan atas satu langkah,
X1=X+1, Y1=Y-1, Raja bergerak diagonal ke kiri atas satu langkah,
X1=X-1, Y1=Y-1, Raja bergerak diagonal ke kiri bawah satu langkah, dan
X1=X-1, Y1=Y+1, Raja gerak diagonal ke kanan bawah satu langkah.
Representasi petak pergerakan makan Raja dapat dilihat pada Gambar 19.
Gambar 19 Pergerakan Raja makan dan terhalang.
Raja dapat memakan anak catur lawan jika anak catur lawan tersebut tidak dalam keadaan dilindungi oleh anak catur lawan yang lain. Raja pada Gambar 19 dapat memakan Kuda di f5, tetapi tidak dapat memakan bidak di d4 dan f4. Bidak d4 dipertahankan oleh Gajah e5 dan Kuda f5, sedangkan bidak f4 dijaga oleh Gajah e5 dan Kuda d5.
7 Sekak (Check)
Sekak merupakan peringatan bahwa Raja dalam keadaan diserang. Agar Raja tersebut tidak terkena sekakmat, Raja harus menghindari sekak tersebut. Misalkan Raja Putih terkena sekak, maka ada tiga cara untuk menghindari sekak terhadap Raja Putih, yaitu:
Anak catur putih memakan anak catur hitam yang menyebabkan sekak.
Raja putih bergerak untuk menghindari arah serangan anak catur hitam.
Anak catur putih menutup arah serangan anak catur hitam.
Representasi petak kondisi sekak terhadap Raja Putih dapat dilihat pada Gambar 20.
Raja putih dalam posisi sekak oleh Benteng hitam dari g7. Untuk menghindarinya, dapat dilakukan dengan cara memakan anak lawan yang melakukan sekak itu dengan anak catur sendiri. Representasi cara menghindari sekak pertama dapat dilihat pada Gambar 21.
Gambar 21 Cara menghindari sekak pertama. Pada Gambar 21 ditunjukkan cara mengindari sekak, yaitu Gajah putih memakan Benteng hitam yang melakukan sekak terhadap Raja Putih.
Gambar 22 Cara menghindari sekak kedua. Pada Gambar 22 ditunjukkan cara menghindari sekak, yang kedua yaitu Raja putih bergerak untuk menghindari arah serangan Benteng hitam.
Gambar 23 Cara menghindari sekak ketiga. Pada Gambar 23 ditunjukkan cara menghindari sekak yang ketiga, yaitu Benteng putih menutup arah serangan Benteng hitam sehingga arah serangan Benteng hitam terhadap Raja Putih tertutup oleh Benteng putih tersebut.
Representasi Logika ASP dari Game Mate in One Puzzles
Vocabulary adalah predikat-predikat atau atoms yang terdapat dalam merepresentasikan logika permasalahan Mate in One Puzzles ke dalam logika ASP. Vocabulary ini terdiri atas posisi dan gerakan-gerakan anak catur yaitu Pawn (Bidak), Rook (Benteng), Knight (Kuda), Bishop (Gajah), Queen (Menteri), dan King (Raja), kondisi terhalang, Check (Sekak), dan Check-Mate (Sekakmat). Pada penjelasan pergerakan akan dicontohkan dengan Queen dan Knight. Untuk lebih lengkapnya, logika pergerakan setiap anak catur terdapat pada Lampiran 1.
1 posisi(queen,putih,0,4,4).
Predikat posisi merupakan predikat yang digunakan untuk merepresentasikan posisi setiap anak catur yang dimasukkan dalam setiap kasus. Predikat ini mempunyai 5 argumen. Argumen pertama adalah jenis anak catur yang dicontohkan dengan queen, argumen kedua yaitu warna anak catur yang dicontohkan dengan warna putih, argumen ketiga yaitu waktu dengan contoh waktu di sini 0 karena queen belum melakukan pergerakan, argumen keempat adalah baris yaitu pada logika diatas berada pada baris 4, dan argumen terakhir adalah kolom. Pada contoh lain, misalkan terdapat white knight yang berada f6, maka representasi logikanya
posisi(kuda, putih1,0,6,6). Argumen
putih1 tersebut digunakan untuk membedakan antara kuda pertama dan kedua, sedangkan argumen lain sama seperti penjelasan posisi queen sebelumnya.
2 gerak_queen_putih(queen,
putih,T1,X1,Y1).
Predikat gerak_queen_putih merupakan predikat untuk mendapatkan petak pergerakan yang dapat dicapai oleh queen. Predikat tersebut mempunyai 5 argumen, yang pertama yaitu jenis anak catur, kedua warna, ketiga adalah variabel T1 yang berarti waktu, keempat X1 yang berarti baris, dan kelima Y1 yang berarti kolom.
3 terhalang_queen_putih(queen,puti
h,T,X1,Y1).
12
yang berarti baris, dan kelima Y1 yang berarti kolom.
4 sekak_raja_hitam_oleh_1langkah(b
enteng,putih1,1,X,Y).
Predikat yang keempat yaitu sekak_raja_hitam_oleh_1langkah, artinya kondisi saat king sedang dalam keadaan disekak oleh rook, predikat tersebut mempunyai 5 argumen, yang pertama yaitu jenis anak catur yang membuat sekak, kedua warna, ketiga adalah konstanta 1 yang berarti waktu kesatu, keempat X yang berarti baris
Predikat sekakmate tersebut merupakan predikat yang digunakan untuk memeriksa keadaan permasalahan sebuah kasus sekakmat atau tidak. Untuk memeriksa keadaan tersebut, perlu ada tambahan query yaitu dengan menggunakan cautious reasoning yang akan dijelaskan lebih lanjut pada pembahasan aturan sekakmat (Check-Mate).
Pembuatan Back-ends
Pembentukan kode DLV pada penelitian ini sesuai dengan aturan kode DLV oleh Eiter et al. (2006). Program DLV terdiri atas fakta-fakta (facts), aturan-aturan (rules) dan kendala-kendala (constraints). Data yang sudah dibentuk akan dilanjutkan dengan pembentukan fakta-fakta dan aturan-aturan. Selanjutnya dibentuk kendala-kendala yang diperoleh dari persyaratan permainan catur. Semua logika yang berupa fakta, aturan, dan kendala-kendala yang dibentuk dalam penelitian ini terdapat dalam Lampiran 1, Lampiran 2, dan Lampiran 3.
Aturan pergerakan catur yang direpresentasikan hanya terdiri atas aturan dasar, yaitu gerak, makan, terhalang, sekak (check), dan sekakmat (check-mate). Aturan-aturan istimewa seperti promosi bidak (pawn promotion), tusuk silang (en passant), dan rokade (castling) tidak dimasukkan karena batasan permasalahan hanya pada kasus Mate in One. Dengan demikian, aturan-aturan tersebut belum diperlukan karena hanya akan menambah waktu komputasi tanpa bisa terpakai.
Aturan Gerak
Aturan gerak akan dicontohkan dengan pergerakan queen dan knight karena
pergerakan anak catur lain hampir sama dengan pergerakan queen, hanya saja petak pencapaiannya lebih sedikit dan terbatas. Ilustrasipergerakan Queen dapat dilihat pada Gambar 24.
Gambar 24 Papan pergerakan Queen.
Logika pergerakan queen
direpresentasikan dalam kode DLV seperti berikut: Y1=Y+K,k(K).%queen geser ke kanan satu s/d tujuh delapan langkah
. . .
tetangga_queen(X1,Y1,X,Y):-baris(X),baris(X1),kolom(Y1),kolom(Y), X1=X-K, Y1=Y+K,k(K).%queen geser diagonal kanan bawah satu s/d tujuh langkah
Logika pergerakan queen sebagai berikut. Jika terdapat posisi posisi queen pada baris X dan kolom Y dan mempunyai tetangga baris X1 dan kolom Y1, queen dapat bergerak ke petak X1, Y1. Predikat tetangga_queen artinya predikat yang merepresentasikan semua petak yang dapat dijangkau oleh pergerakan queen.
Knight mempunyai pergerakan yang berbeda dengan anak catur yang lainnya. Pergerakannya dapat dilihat pada Gambar 25.
Logika pergerakan knight direpresentasikan dalam kode DLV seperti berikut: X1=X+1, Y1=Y-2.%kuda geser kiri atas membentuk huruf L
tetangga_kuda(X1,Y1,X,Y):-baris(X),baris(X1),kolom(Y),kolom(Y1), X1=X-2, Y1=Y+1.%kuda geser kanan bawah membentuk huruf L
Logika pencarian pergerakan knight sama halnya dengan queen, yaitu jika terdapat posisi posisi knight pada baris X kolom Y dan mempunyai tetangga baris X1 kolom Y1 maka knight dapat bergerak ke petak X1, Y1. Predikat tetangga_kuda artinya predikat yang merepresentasikan semua petak yang dapat dijangkau oleh pergerakan knight.
AturanMakan
Aturan makan akan dicontohkan dengan aturan makan knight dan pawn. Pada dasarnya, setiap anak catur hanya memakan anak catur lawannya. Ketika sebuah anak catur memakan anak catur lawan maka anak catur tersebut bergerak ke tempat anak catur tersebut memakan anak catur lawannya, sedangkan anak catur yang dimakan akan bergerak dan makan berbeda. Ilustrasi pergerakan makan anak catur dapat dilihat pada Gambar 26.
Gambar 26 Papan pergerakan makan Knight. Logika pergerakan makan knight direpresentasikan dalam kode DLV seperti berikut:
Logika knight makan yaitu jika pergerakan knight putih pada waktu T1 ke baris X kolom Y dan posisi pawn pada waktu T berada pada baris X kolom Y, knight dapat memakan pawn tersebut pada baris XM kolom YM, XM sama dengan X dan YM sama dengan Y.
Pawn mempunyai cara makan yang berbeda dengan pergerakan makan anak catur yang lain, yaitu pergerakan makan pada pawn yaitu satu langkah diagonal kiri dan kanan depan pawn tersebut. Ilustrasi pergerakan makan pawn yaitu seperti pada Gambar 27.
Gambar 27 Papan pergerakan makan Pawn. Logika pergerakan makan pawn direpresentasikan dalam kode DLV seperti berikut: X1=X+1, Y1=Y+1.%pion geser satu langkah ke diagonal kanan atas .
14
tetangga_pion_putihmakan(X1,Y1,X,Y):-baris(X),baris(X1),kolom(Y),kolom(Y1),
X1=X+1, Y1=Y-1.%pion geser satu
langkah ke diagonal kiri atas
Pawn putih dapat memakan pawn hitam jika pergerakan makan pawn putih pada waktu T1 ke baris X kolom Y dan posisi pawn hitam pada waktu T berada pada baris X kolom Y, pawn putih dapat memakan pawn hitam tersebut pada baris XM dan kolom YM, XM sama dengan X dan YM sama dengan Y.
AturanTerhalang
Aturan terhalang merupakan aturan yang merepresentasikan keadaan sebuah anak catur jika pergerakannya terhalang oleh anak catur lain. Semua anak catur mempunyai kemungkinan terhalang kecuali knight. Misalkan posisi queen berada pada d4, maka queen akan terhalang jika terdapat anak catur lain di petak pergerakan queen tersebut. Jika anak catur tersebut mempunyai warna yang sama dengan queen, petak yang ditempati anak catur tersebut dan setelahnya tidak dapat ditempati queen. Sementara itu, untuk warna yang berbeda hanya petak setelahnya saja yang dapat ditempati queen, karena petak yang ditempati anak catur lawan bisa dikuasai dengan memakannya. Ilustrasi aturan terhalang pada queen dapat dilihat seperti pada Gambar 28.
Gambar 28 Kondisi terhalang pada Queen. Logika aturan terhalang queen direpresentasikan dalam kode DLV seperti berikut:
Queen putih terhalang horizontal kanan jika terdapat posisi anak catur apapun pada baris yang sama dengan queen dengan kolom yang lebih besar daripada kolom tempat queen tersebut. Pada Gambar 28, posisi queen pada d4 sedangkan white pawn pada f4. Dengan demikian, dari f4 sampai h4 queen terhalang dan tidak dapat ditempati queen tersebut.
Pada predikat terhalang makan diartikan seperti pada posisi queen dan black pawn, sehingga kondisi tersebut dapat tertangani. Hal yang membedakan dengan predikat sebelumnya hanya pada variabel M dan N yang berarti jarak baris atau kolom anak catur yang menghalangi pergerakan anak catur yang terhalang. Untuk predikat terhalang, M lebih besar sama dengan N, sedangkan terhalang makan M lebih dari N karena untuk M sama dengan N masih dapat dijangkau dengan memakan anak catur yang menghalanginya tersebut. Dengan demikian, pada kasus ketika queen terhalang di vertikal atas oleh black pawn maka petak pergerakan queen termasuk petak black pawn tersebut.
Aturan Sekak (Check)
Pada aturan sekak, logikanya sama seperti pergerakan makan karena pada dasarnya sekak terjadi jika terdapat king di petak pergerakan lawan dari king tersebut, kecuali oleh king yang lain yang berlawanan karena tidak mungkin king melakukan sekak terhadap king. Sebagai contoh, misalkan terdapat black king di d7 dan white queen di d4, maka black king tersebut dalam keadaan sekak (check) oleh white queen seperti pada Gambar 29.
Gambar 29 Posisi Black King dalam keadaan di sekak oleh White Queen. Logika sekak (check) direpresentasikan dalam kode DLV seperti berikut:
,XM,YM),XM=X,YM=Y,T1>0,T=T1-Aturan Sekakmat (Check-Mate)
Sekakmat (Check-Mate) merupakan tujuan utama dalam sebuah permainan catur, karena jika itu terjadi maka artinya permainan berakhir. Check-Mate yaitu kondisi king dalam keadaan diserang atau terancam oleh sekak (check) dan tidak ada jalan atau langkah yang dapat membebaskan king tersebut baik langkah king itu sendiri atau anak catur lain yang dapat menutup atau memakan anak catur lawan yang membuat sekak tersebut. Untuk mendapatkan langkah yang menyebabkan check-mate, dalam sistem ini harus dilalui beberapa alur logika.
Pertama, karena pada batasan masalah hanya ada satu gerakan anak catur putih untuk menghasilkan check-mate, maka sistem akan mencari pergerakan anak catur putih yang menyebabkan sekak terhadap black king. Logika untuk mendapatkan pergerakan tersebut direpresentasikan dalam Kode DLV seperti berikut:
Pada kode tersebut dijelaskan bahwa predikat lakukan_gerak hanya diambil satu.
lakukan_gerak didapatkan dari setiap
pergerakan anak catur putih yang pada kode tersebut dicontohkan dengan lakukan gerak queen. Kemudian, pada logika pencarian
lakukan_gerak tersebut terdapat dua
constraint atau kendala yang artinya lakukan_gerak hanya satu kali untuk setiap setiap answer set.
Dengan demikian, pada satu lakukan_gerak itu terdapat satu gerakan rook, knight, bishop, queen, atau pawn, bergantung pada anak catur yang ada dalam kasus, sedangkan king tidak dihitung karena dalam Mate In One Puzzles tidak ada gerakan raja yang membuat satu langkah mati. Semua lakukan gerak tersebut menjadi satu kesatuan dalam sebuah answer set. Setelah itu, terdapat predikat sekak yang artinya gerakan anak catur putih menyebabkan sekak raja hitam setelah melangkah satu langkah. Sementara itu, predikat tidaksekak yaitu jika gerakan anak catur putih tersebut tidak menyebabkan sekak.
Kemudian jika diketahui lakukan_gerak putih dan tidaksekak maka dibuang lakukan_gerak anak catur putih tersebut melalui predikat atau constraint
lakukan_gerak dan tidaksekak. Setelah
semua aturan itu dijalankan maka akan terjadi perubahan posisi untuk anak catur yang bergerak dan atau yang dimakan. dalam kode DLV, aturan tersebut seperti berikut:
16
dilakukan oleh benteng (rook) tersebut, sedangkan jika terjadi pergerakan akan berubah posisi menjadi baris X1, Y1 yang didapat dari predikat lakukan_gerak. Pengecekan ini dilakukan dengan menggunakan frame axiom. Frame axiom ini digunakan karena dalam hasil posisi yang baru tidak semua berubah (hanya yang ada gerakan) serta yang dimakan yang posisinya berubah, sedangkan selain keduanya maka posisi tetap.
Kedua, setelah pergerakan putih dilakukan maka sekak yang dilakukan putih belum bisa dipastikan menimbulkan sekakmat ( check-mate) atau tidak. Oleh karena itu, perlu dilakukan percobaan berbagai kombinasi gerakan dengan anak catur hitam untuk memeriksa pergerakan hitam yang dapat mencegah terjadinya sekakmat dengan tiga cara mencegah sekak yang sudah dijelaskan pada bahasan sebelumnya. Keadaan tersebut dapat direpresentasikan dalam kode DLV seperti berikut: keadaan sebelumnya sudah terjadi sekak atau belum. Hal ini terlihat dari predikat sekak_raja_hitam_oleh. Setelah diketahui dalam keadaan sekak, dilakukan percobaan gerakan melalui predikat coba_gerak, sama halnya dengan lakukan_gerak hanya ada satu coba_gerak yang diujikan dalam setiap
answer set. Setelah percobaan gerak dilakukan maka diperiksa kembali agar dapat diketahui kondisi selanjutnya tetap dalam keadaan sekak atau tidak, yaitu pada predikat coba_sekak_raja_hitam_oleh.
Tahap berikutnya yaitu melakukan percobaan posisi untuk memeriksa posisi selanjutnya masih dalam keadaan sekak atau tidak, sehingga dari semua percobaan posisi tersebut dapat ditemukan percobaan posisi yang dalam keadaan sekakmat. Jika percobaan posisi yang sekakmat sudah diketahui, dapat diketahui lakukan_gerak yang menyebabkan percobaan posisi tersebut, sehingga gerakan anak catur putih yang menyebabkan satu langkah mati terhadap anak catur hitam dapat didapatkan. Logika tersebut direpresentasikan dalam kode DLV seperti berikut:
posisi(benteng,putih1,1,X,Y):-percobaan posisi yang berbeda-beda. Oleh karena itu, dibuat predikat percobaan posisi dengan menggunakan metode frame axiom. Jadi, posisi anak catur hitam akan berubah jika ada pergerakan tetapi anak catur hitam yang tidak bergerak akan tetap pada posisi semula. Sementara itu, putih akan tetap pada posisi semula jika tidak dimakan oleh anak catur yang hitam.
Predikat aman_gerak atau
tidakaman_gerak dilakukan untuk
mendapatkan pergerakan putih yang menyebabkan sekakmat. tidak_aman_gerak terjadi jika coba_gerak anak catur hitam pada waktu ke-1 dan terdapat percobaan sekak terhadap raja hitam pada waktu ke-1, serta terdapat sekak terhadap raja hitam pada waktu ke-0. Sementara itu, aman_gerak jika tidak terdapat tidakaman_gerak. Predikat terakhir yaitu sekakmate terjadi jika tidakaman_gerak dan untuk memastikan dalam setiap answer set dalam satu kali eksekusi kode DLV semua terdapat tidakaman_gerak. Perhitungan ini dilakukan dengan menggunakan query yaitu cautious reasoning.
Pembuatan Front-ends
1 Arsitektur
Arsitektur atau diagram alir yang digunakan dalam penelitian ini tercantum pada Gambar 30.
Mulai
Sistem
Kode DLV
Eksekusi Kode DLV Input/ Output
Data
Gambar 30 Arsitektur system. Alur dari proses pencarian langkah anak catur putih ini dimulai dengan memasukan kasus ke dalam sistem. Kemudian, sistem diterjemahkan ke dalam kode DLV serta ditampilkan menjadi sebuah kasus yang terdapat tampilan gambar dari kasus tersebut. Setelah masukan kasus tersebut menjadi kode DLV, masukan akan dieksekusi dengan kode DLV untuk mencari langkah yang putih untuk kemudian diperiksa langkah tersebut agar bisa ditemukan terdapat solusi dari masukan kasus tersebut atau tidak. Setelah eksekusi selesai, hasil akan keluar sebagai kode DLV kembali dan kemudian dikirim ke sistem untuk
ditampilkan hasil eksekusi dari masukan kasus tersebut sehingga didapatkan tampilan hasil eksekusi permasalahan tersebut. Keluaran sistem ini bisa terdapat satu solusi, banyak solusi, tetapi bisa juga tidak terdapat solusi.
2 Tampilan
Tampilan pertama yaitu halaman utama seperti pada Gambar 31. Pada halaman ini, terdapat dua buah jenis masukan serta papan catur yang masih tersusun rapi sesuai posisi awal permainan catur. Dua buah masukan ini terdiri atas masukan manual yang berarti kasus yang ingin dimasukkan diketikkan terlebih dahulu dengan format posisi (anak catur, warna, waktu, baris, kolom) dan diakhiri tanda titik kemudian posisi berikutnya dituliskan pada basris selanjutnya. Sementara itu masukan kedua dari pilihan scroll bar yang terdiri atas kasus-kasus yang pernah dimasukkan.
Gambar 31 Antarmuka halaman utama. Kasus yang dimasukkan manual akan masuk ke dalam scroll bar dan jumlah kasus pada scroll bar bertambah, sedangkan jika dipilih dari scroll bar maka jumlah kasus tetap. Setelah itu, akan ditampilkan halaman tampilan kasus pada Gambar 32.
18
Halaman tampilan kasus ini merupakan gambaran kasus sesuai yang dimasukkan pada halaman utama baik kasus yang dimasukkan manual ataupun dari scroll bar. Pada halaman ini terdapat button cari solusi yaitu untuk mendapatkan hasil pengodean DLV. Sistem akan menjalankan kode DLV yang sudah dimasukkan atau dipilih untuk kemudian dieksekusi dengan solver DLV. Setelah eksekusi selesai, akan ditampilkan halaman hasil pengodean pada Gambar 33.
Gambar 33 Antarmuka halaman hasil pengkodean.
Pada halaman ini terdapat papan catur sesuai dengan kasus yang dimasukkan dan di sebelah kanan terdapat pengodean DLV yang berisi posisi-posisi anak catur sesuai dengan kaidah pengkodean DLV. Di bawah pengodean terdapat answer set, yaitu solusi permasalahan setelah eksekusi namun masih dalam format kode DLV. Selain itu, terdapat waktu komputasi yaitu menghitung lama proses pencarian gerakan sampai ditemukan answer set yang diinginkan. Kemungkinan sekak yaitu semua gerakan anak catur putih yang menyebabkan sekak raja hitam untuk melihat kemungkinan yang menjadi answer set kasus tersebut, dan yang terakhir solusi sekakmat (check-mate) yaitu hasil gerakan yang diinginkan. Namun, disesuaikan dengan notasi catur internasional yang dirilis FIDE (Fédération Internationale Des Éches). Dalam aturan catur internasional terdapat dua notasi yaitu notasi panjang dan notasi pendek. Notasi
yang dipakai dalam sistem ini yaitu notasi pendek karena sistem permainan catur pada umumnya banyak menggunakan notasi pendek. Ilustrasi dapat dilihat pada Gambar 34.
Gambar 34 Antarmuka halaman hasil akhir. Halaman terakhir menampilkan papan catur hasil akhir dari semua proses dalam sistem. Pada bagian solusi sekakmat bisa dipilih solusi yang muncul untuk melihat pergerakannya. Pergerakan solusi di-highlight dengan blur warna kuning.
Pengujian dan Analisis
Proses pengujian pada setiap kasus dengan menggunakan 75 kasus. Penyelesaian dengan answer set programming ini dilakukan untuk mendapatkan waktu komputasi serta parameter-parameter yang memengaruhi waktu komputasi tersebut yang terdapat pada Lampiran 4. Banyak solusi dari masing-masing kasus ini terbagi menjadi 3, yaitu: 1 Tidak ada solusi
2 Satu solusi
Kasus yang menghasilkan solusi sama dengan satu answer set ini berjumlah 25 kasus. Pada masing-masing kasus terdapat satu langkah yang menyebabkan checkmate. Pada kasus seperti ini, kemungkinan sekak bisa banyak. Namun, dari semua kemungkinan sekak tersebut, hanya ada satu yang membuat anak catur hitam checkmate. 3 Lebih dari satu solusi
Kasus yang menghasilkan solusi lebih satu answer set ini berjumlah 25 kasus. Pada masing-masing kasus terdapat banyak solusi langkah yang dapat menyebabkan checkmate. Pada kasus seperti ini, kemungkinan sekak selalu lebih dari satu. Dari semua kemungkinan sekak tersebut, ada lebih dari satu kemungkinan yang dapat membuat anak catur hitam checkmate.
Hubungan antara banyaknya anak catur dan lama waktu pencarian solusi dapat dilihat pada Gambar 35, sedangkan ilustrasi hubungan antara banyaknya anak catur dengan lama waktu pencarian dapat dilihat pada Gambar 35. Perhitungan lama waktu terhadap banyak anak catur untuk setiap kasus permasalahan Mate In One lebih lengkapnya terdapat pada Lampiran 4.
Gambar 35 Grafik hubungan antara banyak anak catur dengan waktu. Pada Gambar 35 dapat dilihat bahwa dengan jumlah anak catur yang sama bisa didapatkan waktu yang berbeda jauh. Pada grafik tersebut terlihat pada kasus 7 dan 47 memiliki banyak anak catur masing-masing hanya 13 dan 18, tetapi waktu pencarian paling lama. Sementara itu, pada kasus 27 dengan banyak anak catur 13, didapatkan waktu pencarian sangat cepat, sehingga dapat diketahui bahwa banyaknya anak catur dalam sebuah kasus permasalahan Mate In One tidak memengaruhi lama pencarian solusi permasalahan.
Gambar 36 Grafik hubungan antara banyak anak catur dengan waktu.
Pada Gambar 36 terlihat bahwa untuk kasus dengan ruang gerak yang sedikit, didapatkan waktu pencarian sangat cepat, sedangkan untuk kasus dengan ruang gerak yang sangat banyak maka waktu pencariannya sangat lama. Pada kasus 3 dengan ruang gerak sebanyak 15, waktu pencariannya hanya membutuhkan 0.85 detik, sedangkan pada kasus 7 dengan ruang gerak sebanyak 802 memiliki waktu pencarian selama 59.96 detik. Perhitungan lama waktu terhadap ruang gerak anak catur untuk setiap kasus permasalahan Mate In One terdapat pada Lampiran 5.
Gambar 37 Jenis dan ruang gerak anak catur pada kasus 7.
Pada Gambar 37 dapat dilihat bahwa kasus 7 untuk anak catur putih terdapat Rook, Knight, Bishop, Queen, dan tidak ada Pawn pada kasus tersebut. Begitu pula anak catur hitam dengan perwira Rook, Bishop, dan Queen, sehingga pada kasus ini walaupun anak caturnya hanya 13 tetapi memiliki waktu pencarian paling lama karena ruang geraknya sangat banyak, yaitu sebesar 802.
20
Pada kasus 27 seperti pada Gambar 38 dapat dilihat kasus tersebut walaupun mempunyai anak catur sama dengan kasus 7 ruang gerak terbatas karena banyak terhalang oleh perwira yang lain.
Gambar 39 Jenis dan ruang gerak anak catur pada kasus 47.
Kasus 47 merupakan kasus dengan waktu pencarian solusi terlama kedua. Pada kasus 47 seperti pada Gambar 39 terlihat jenis anak catur yang terdapat pada kasus tersebut mempunyai perwira dengan ruang gerak sangat banyak dan juga mempunyai kemungkinan sekak sangat banyak yaitu sebanyak 16 serta mempunyai solusi terbanyak yaitu sebanyak 9. Kombinasi gerakan anak catur hitam untuk menghindari serangan anak catur putih sangat banyak, sehingga ruang gerak kasus tersebut sangat banyak yaitu sebanyak 729.
Gambar 40 Jenis dan ruang gerak anak catur pada kasus 3.
Kasus 3 seperti pada Gambar 40 merupakan kasus dengan waktu pencarian solusi tercepat. Hal ini disebabkan pada kasus 3 hanya ada 9 perwira, dan setiap perwira mempunyai ruang gerak terbatas yaitu White Rook, White Knight, dan White Pawn, tetapi ruang geraknya hanya sedikit. Selain itu, ruang gerak White Rook juga terbatas atau terhalang oleh perwira lain. Selain itu, perwira
hitam tidak perlu ada percobaan gerakan karena tidak gerakan anak catur putih yang menyebabkan sekak, sehingga tidak perlu ada percobaan gerak dari anak catur hitam. Dengan demikian, waktu pencariannya juga berjalan sangat cepat.
Tabel 1 Hubungan antara banyak anak catur dengan waktu merupakan kasus dengan pencarian solusi tercepat yaitu dengan lama waktu 0,85 detik, sedangkan kasus 7 merupakan kasus dengan pencarian solusi terlama yaitu dengan lama waktu 59,96 detik. Dapat dilihat bahwa banyak anak catur tidak berpengaruh terhadap lama waktu pencarian. Kasus 7 dan 62 mempunyai banyak anak catur yang sama tetapi waktu pencarian solusi sangat berbeda jauh.
Tabel 2 Hubungan ruang gerak anak catur dengan waktu
No
Kasus Ruang Gerak Banyak Waktu (detik)
berpengaruh terhadap lama pencarian solusi. Pada kasus 3 dengan ruang gerak hanya 15, waktu pencariaannya hanya membutuhkan waktu 0.85 detik, sedangkan kasus 7 dengan ruang gerak sebanyak 802 memiliki waktu pencarian 59.96 detik. Jadi, semakin banyak ruang gerak anak catur dalam sebuah kasus permasalahan Mate In One, maka akan semakin lama waktu pencarian solusi permasalahan kasus Mate In One tersebut.
KESIMPULAN DAN SARAN
Kesimpulan
1 Telah dibuat sebuah representasi atau encoding dalam sebuah aturan-aturan permainan catur dari permasalahan Answer Set Programming dengan menggunakan syntax DLV.
2 Semua kasus uji pengodean tersebut mampu menemukan semua solusi dari permasalahan yang telah dimasukkan baik yang tidak terdapat solusi, satu solusi, atau yang memiliki lebih dari satu solusi. 3 Waktu pengujian tercepat sampai
ditemukannya solusi dari permasalahan Mate In One yaitu 0.85 detik pada kasus 3, sedangkan waktu terlama yaitu pada kasus 47 dengan waktu eksekusi 59.96 detik.
Saran
Beberapa hal yang dapat dikembangkan dalam penelitian selanjutnya yaitu:
1 Penambahan ruang lingkup permasalahan menjadi dua, tiga, atau lebih langkah dalam pencarian langkah yang bisa menjadi solusi, karena pada penelitian ini hanya terbatas pada Mate In One.
2 Pengembangan untuk membuat sebuah permainan catur lengkap yaitu dari mulai permainan awal sampai akhir.
DAFTAR PUSTAKA
Baral C. 2004. Answer Set Programming: Knowledge Representation, Reasoning, and Declarative Problem Solving Using AnsProlog. Arizona: Departement of Computer Science and Engg, Arizona State University.
Eiter T, Faber W, Gottlob G, Leone N, Perri S et al. 2006. The DLV System for Knowledge Representation and Reasoning. Calabria: Departement of Matematics, University of Calabria.
Gelfond M, Lifschitz V. 1988. The Stable Model Semantic for Logic Programming. El Paso: University of Texas.
Hauptman A. 2007. Evolution of an Efficient Search Algorithm for the Mate-In-N Problem in Chess. Beer-Sheva: Departement of Computer Science, Ben-Gurion University.
Kendal G, Parkes A, Spoerer K. 2004. A Survey of NP-Complete Puzzles. Nottingham: University of Nottingham. Kowalski R. 1979. Algorithm = Logic +
Control. London: Imperial College. Laszlo P. 1995. Chess: 5334 Problems,
Combinations, and Games. Leventhal: Black Dog and Leventhal Publishers. Lifschitz V. 1988. The Stable Model for Logic
Programming. Austin: University of Texas.
Lifschitz V. 2000. Answer Set Programming and Plan Generation. Austin: University of Texas.
Lifschitz V. 2008. What is Answer Set Programming. Austin: University of Texas.
Musthofa. 2010. Evaluations of answer set programs with bounded predicate arities [tesis]. Vienna: Faculty of Informatics, Departement of Knowledge Based Systems, Vienna University of Technology, Austria.
Pfenning F. 2006. Logic Programming. Carnegie: Carnegie Mellon University. Russell SJ, Norvig P. 1995. Artificial
Intelligence: A Modern Approach. Englewood Cliffs: Prentice-Hall.
22
Lampiran 1 rule_utama.dl baris(1..8).
kolom(1..8). waktu(0..4). k(1..7). m(1..7). n(1..7).
%GERAK BENTENG
%gerak benteng putih satu
gerak_benteng_putih1(benteng,putih1,T1,X1,Y1):-gerak_benteng_p1(benteng,putih1,T1,X1,Y1),T1>0,T=T1-1,waktu(T1).
gerak_benteng_putih1(benteng,putih1,T1,X1,Y1):-benteng_putih1_makan(_,_,T1,X1,Y1),T1>0,T=T1-1,waktu(T1).
gerak_benteng_p1(benteng,putih1,T1,X1,Y1):-gerak_benteng_putih1tanpapenghalang(benteng,putih1,T1,X1,Y1),not
terhalang_benteng_putih1(benteng,putih1,T,X1,Y1),T1>0,T=T1-1,waktu(T1).
gerak_benteng_putih1tanpapenghalang(benteng,putih1,T1,X1,Y1):-posisi(benteng,putih1,T,X,Y), tetangga_benteng(X1,Y1,X,Y),T1>0,T=T1-1,waktu(T1). %benteng makan
benteng_putih1_makan(benteng,hitam1,T1,XM,YM):-gerak_benteng_putih1tanpapenghalang(benteng,putih1,T1,X,Y),posisi(benteng,hitam1,T ,X,Y),not benteng_putih1_jangan_makan(benteng,putih1,T,XM,YM),XM=X,YM=Y,T1>0,T=T1-1,waktu(T1),baris(XM),kolom(YM).
. . .
benteng_putih1_jangan_makan(benteng,putih1,T,XN,YN):-posisi(benteng,putih1,T,X,Y),posisi(_,_,T,X,YK),YK=Y+N,YN=Y+M,M>N,m(M),n(N),baris( XN),kolom(YN),T<2,waktu(T).
. . .
terhalang_benteng_putih1(benteng,putih1,T,XP,YP):-terhalang_horizontal_kanan_bentengputih1(benteng,putih1,T,X,YP),XP=X,baris(XP),kol om(YP),T<2,waktu(T).
. . .
%GERAK KUDA
%gerak kuda putih satu
gerak_kuda_putih1(kuda,putih1,T1,X1,Y1):-gerak_kuda_p1(kuda,putih1,T1,X1,Y1). gerak_kuda_putih1(kuda,putih1,T1,X1,Y1):-kuda_putih1_makan(_,_,T1,X1,Y1).
gerak_kuda_p1(kuda,putih1,T1,X1,Y1):-gerak_kuda_putih1tanpapenghalang(kuda,putih1,T1,X1,Y1),not terhalang_kuda_putih1(kuda,putih1,T,X1,Y1),T1>0,T=T1-1,waktu(T1).
gerak_kuda_putih1tanpapenghalang(kuda,putih1,T1,X1,Y1):-posisi(kuda,putih1,T,X,Y), tetangga_kuda(X1,Y1,X,Y),T1>0,T=T1-1,waktu(T1).
terhalang_kuda_putih1(kuda,putih1,T,X1,Y1):-gerak_kuda_putih1tanpapenghalang(kuda,putih1,T1,X1,Y1),posisi(_,putih,T,X1,Y1),T1> 0,T=T1-1,waktu(T1),baris(XP),kolom(YP).
. . .
%kuda makan
kuda_putih1_makan(benteng,hitam1,T1,XM,YM):-gerak_kuda_p1(kuda,putih1,T1,X,Y),posisi(benteng,hitam1,T,X,Y),XM=X,YM=Y,T1>0,T=T1 -1,waktu(T1),baris(XM),kolom(YM).
. . .
%GERAK PLUNCUR
%gerak pluncur putih satu
gerak_pluncur_putih1(pluncur,putih1,T1,X1,Y1):-gerak_pluncur_p1(pluncur,putih1,T1,X1,Y1).