Pembangkitan dan penyelesaian sliher link dengan answer set programming dan procedural programming

ABSTRAK
SALMAN FARIZI. Application of Generator and Solver Slither Link with Answer Set Programming
and Procedural Programming. Supervised by MUSHTHOFA.
Slither Link is a popular pencil-based puzzle game similar to Sudoku. This problem has been shown
to be NP-Complete. The goal of the game is to link grid segments forming a loop such that the number
of lines adjacent to a cell is equal to the number written on the cell. In this research, we investigate the
use of Answer Set Programming as a formal representation of the game, and to prove an alternative
solving method, as opposed to the procedural method. We then perform experiment to test the
efficiency of Answer Set Programming compared to the procedural method in solving Slither Link.
For the Anser Set Programming method, we use DLV as the solver, whereas for the procedural
method we write a program in C++ to solve Slither Link in a procedural manner. The result shows that
ASP performed consistently better than the procedural method we use.
Keywords : Slither Link, Answer Set Programming, Logic Programming.

PEMBANGKITAN DAN PENYELESAIAN SLITHER LINK DENGAN
ANSWER SET PROGRAMMING DAN PROCEDURAL PROGRAMMING

SALMAN FARIZI

DEPARTEMEN ILMU KOMPUTER
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM

INSTITUT PERTANIAN BOGOR
BOGOR
2011

ABSTRAK
SALMAN FARIZI. Application of Generator and Solver Slither Link with Answer Set Programming
and Procedural Programming. Supervised by MUSHTHOFA.
Slither Link is a popular pencil-based puzzle game similar to Sudoku. This problem has been shown
to be NP-Complete. The goal of the game is to link grid segments forming a loop such that the number
of lines adjacent to a cell is equal to the number written on the cell. In this research, we investigate the
use of Answer Set Programming as a formal representation of the game, and to prove an alternative
solving method, as opposed to the procedural method. We then perform experiment to test the
efficiency of Answer Set Programming compared to the procedural method in solving Slither Link.
For the Anser Set Programming method, we use DLV as the solver, whereas for the procedural
method we write a program in C++ to solve Slither Link in a procedural manner. The result shows that
ASP performed consistently better than the procedural method we use.
Keywords : Slither Link, Answer Set Programming, Logic Programming.

PEMBANGKITAN DAN PENYELESAIAN SLITHER LINK DENGAN
ANSWER SET PROGRAMMING DAN PROCEDURAL PROGRAMMING


SALMAN FARIZI

Skripsi
Sebagai salah suatu syarat untuk memperoleh gelar
Sarjana Komputer pada
Program Studi Ilmu Komputer

DEPARTEMEN ILMU KOMPUTER
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
INSTITUT PERTANIAN BOGOR
BOGOR
2011

Judul Skripsi
Nama
NIM

: Pembangkitan dan Penyelesaian Sliher Link dengan Answer Set Programming dan
Procedural Programming

: Salman Farizi
: G64086006

Menyetujui:

Pembimbing

Mushthofa, S.Kom., M.Sc.
NIP. 19820325 200912 1 003

Mengetahui:
Ketua Departemen Ilmu Komputer
Institut Pertanian Bogor

Dr. Ir. Sri Nurdiati, M.Sc
NIP. 19601126 198601 2 001

Tanggal Lulus:

RIWAYAT HIDUP

Penulis dilahirkan pada tanggal 10 Desember 1986 di Jakarta sebagai anak pertama dari dua
bersaudara dari pasangan Hifni Machmud dan Esty Dianingsih. Penulis menyelesaikan pendidikan
menengah atas pada tahun 2004 dari SMU Negeri 3 Bogor dan lulus program Diploma
Manajemen Informatika Politeknik Manufaktur Astra di Jakarta pada tahun 2007. Selama tiga
bulan penulis melaksanakan praktek kerja lapang di PT Gajah Tunggal tbk.
Pada tahun 2007 sampai 2008 penulis bekerja pada salah satu perusahaan otomotif di Jakarta,
kemudian penulis melanjutkan studi Sarjana di Departemen Ilmu Komputer jurusan Ilmu
Komputer, Institut Pertanian Bogor pada tahun 2008.

PRAKATA
Segala puji bagi Allah dan salawat serta salam atas Rasul Allah, Nabi Muhammad shalallahu
alaihi wa salam serta kepada keluarga dan sahabat-sahabatnya.
Melalui lembar ini penulis ingin menyampaikan terima kasih kepada Bapak Mushthofa
S.Kom., M.Sc. selaku pembimbing yang telah meluangkan waktu dan tenaganya untuk
membimbing penulis, memberikan ilmu-ilmu yang sangat berharga, serta dukungan selama
penelitian ini berjalan. Bapak Dr. Ir. Agus Buono M.Si, M.Kom. dan Bapak Ahmad Ridha
S.Kom., MS. yang telah bersedia menjadi penguji dalam pelaksanaan seminar dan sidang.
Penulis juga mengucapkan terima kasih kepada seluruh keluarga, terutama Mama dan Bapak
yang telah memberikan dukungannya, kasih sayang, pengorbanan, dan kesabarannya selama ini.
Abang Sandi, Teteh Etsa, Syalfa, Uwa, Paman, serta Bibi yang selalu mengingatkan penulis untuk

berdoa, berusaha, dan memberikan semangat untuk terus menyelesaikan tugas akhir.
Teguh yang selalu membantu, memberi dukungan, pendapat, dan teman satu bimbingan selama
ini. Teman-teman Badminton ilkom dan teman-teman acara nonton bareng yang selalu memberi
keceriaan dan wawasan baru pada penulis. Abdul Rahmat Ramdhan yang tanpa lelah selalu
memberi dukungan pada seminar dan sidang, serta teman-teman Ilkom Ekstensi angkatan 3 terima
kasih untuk kebersamaan selama kuliah di Ilmu Komputer IPB.
Seluruh staf pengajar yang telah memberikan ilmu yang berharga selama penulis menuntut
ilmu di Departemen Ilmu Komputer. Seluruh staf administrasi dan perpustakaan Departemen Ilmu
Komputer yang selalu memberikan kemudahan dalam mengurus segala macam hal berkaitan
dengan perkuliahan, serta pihak lain yang tidak bisa disebutkan satu-persatu.
Sebagaimana manusia yang tidak luput dari kesalahan, penulis menyadari bahwa karya ilmiah
ini jauh dari sempurna. Namun penulis berharap semoga karya ini bisa berguna untuk siapapun
yang membacanya.

Bogor, Mei 2011

Salman Farizi

DAFTAR ISI
Halaman


DAFTAR GAMBAR ................................................................................................................... v
DAFTAR LAMPIRAN .............................................................................................................. vi
PENDAHULUAN ....................................................................................................................... 1
Latar Belakang ........................................................................................................................ 1
Tujuan Penelitian .................................................................................................................... 1
Ruang Lingkup Penelitian ...................................................................................................... 1
Manfaat Penelitian .................................................................................................................. 1
TINJAUAN PUSTAKA .............................................................................................................. 1
NP-Complete........................................................................................................................... 1
Logic Programming ................................................................................................................ 2
Answer set programming ........................................................................................................ 2
DLV (datalog with disjunction) .............................................................................................. 4
Slither link ............................................................................................................................... 5
METODOLOGI .......................................................................................................................... 5
Formulasi aturan pembangkitan slither link ............................................................................ 5
Formulasi aturan penyelesaian ................................................................................................ 6
Pembangunan front end .......................................................................................................... 7
Arsitektur sistem ..................................................................................................................... 8
HASIL DAN PEMBAHASAN ................................................................................................... 8

Domain masalah dalam DLV .................................................................................................. 8
Encoding dengan DLV ........................................................................................................... 9
Menjalankan model penyelesaian slither link ....................................................................... 12
Implementasi dengan Procedural Programming .................................................................. 13
Struktur data.......................................................................................................................... 13
Hasil Pengujian ..................................................................................................................... 14
KESIMPULAN DAN SARAN ................................................................................................. 15
Kesimpulan ........................................................................................................................... 15
Saran ..................................................................................................................................... 15
DAFTAR PUSTAKA ................................................................................................................ 15
LAMPIRAN .............................................................................................................................. 16

iv

DAFTAR GAMBAR
Halaman
1 Hubungan antara P, NP, dan NPC (Cormen et al 2001). ............................................................... 2
2 Graf tujuh kota. .............................................................................................................................. 5
3 Masalah slither link dan solusinya (Yato 2003). ............................................................................ 5
4 Formulasi pembangkitan. ............................................................................................................... 5

5 Grafik tingkat kesulitan puzzle berbanding dengan constraint puzzle. ........................................... 6
6 Formulasi Penyelesaian. ................................................................................................................. 6
7 Cell dengan nilai 0 (Conceptis puzzle 1997). ................................................................................. 6
8 Cell bernilai 0 dan 3 yang bertetangga (Conceptis puzzle 1997). .................................................. 7
9 Cell bernilai 0 dan 3 diagonal (Conceptis puzzle 1997). ................................................................ 7
10 Dua cell bernilai 3 yang bertetangga (Conceptis puzzle 1997). ................................................... 7
11 Dua cell bernilai 3 dan diagonal (Conceptis puzzle 1997). .......................................................... 7
12 Angka apapun pada pojok cell (Conceptis puzzle 1997). ............................................................ 7
13 Arsitektur sistem. ......................................................................................................................... 8
14 Diagram alur proses solver slither link. ........................................................................................ 8
15 Representasi dari fakta slither link. .............................................................................................. 8
16 Representasi status garis di sekeliling cell arc(X,Y,0,0,0,1). ........................................... 9
17 Cell dengan predikat arc(X,Y,1,0,0,0). ........................................................................... 9
18 Cell dengan predikat arc(X,Y,1,0,0,0). ........................................................................... 9
19 Cell dengan predikat arc(X,Y,0,0,1,0). ........................................................................... 9
20 Cell dengan predikat arc(X,Y,0,0,0,1). ........................................................................... 9
21 Cell dengan nilai 0. ...................................................................................................................... 9
22 Cell dengan nilai 1. .................................................................................................................... 10
23 Cell dengan nilai 2. .................................................................................................................... 10
24 Cell dengan nilai 3. .................................................................................................................... 10

25 Local loop pada cell bernilai 3. .................................................................................................. 10
26 Constraint pada posisi pojok kiri atas. ....................................................................................... 11
27 Constraint pada posisi pojok kanan atas .................................................................................... 11
28 Constraint pada posisi pojok kiri bawah. ................................................................................... 11
29 Constraint pada posisi pojok kanan bawah. ............................................................................... 11
30 Antisipasi cabang. ...................................................................................................................... 12
31 Ketersambungan dari garis. ........................................................................................................ 12
32 Local loop dengan 2 cell bernilai 3. ........................................................................................... 12
33 Cell bernilai 2 yang bersebelah dengan 0. .................................................................................. 12
34 Slither link hasil pembangkitan. ................................................................................................. 13
35 Solusi slither link........................................................................................................................ 13
36 Ilustrasi penomoran sisi pada grid.............................................................................................. 13
37 Grafik perbandingan waktu eksekusi dan ukuran slither link. ................................................... 15

v

DAFTAR LAMPIRAN
Halaman
1 Program DLV, modul pembangkitan. ................................................................................................ 17
2 Program DLV, constraint cell dengan nilai 0, 1, 2, dan 3. ................................................................ 18

3 Program DLV, constraint mencegah local loop. ............................................................................... 19
4 Program DLV, constraint pada cell dengan posisi di pojok grid....................................................... 20
5 Program DLV, constraint untuk mengantisipasi cabang dan ketersambungan garis. ........................ 21
6 Program DLV, constraint dari cell bernilai 2 yang bersebelahan dengan cell bernilai 0. .................. 22
7 Pseudo code program C++ untuk membaca fakta slither link. .......................................................... 23
8 Pseudo code program C++, modul basic_rule . ................................................................................. 24
9 Pseudo code program C++, modul advance_rule . ............................................................................ 25
10 Pseudo code program C++, modul cek_garis_cell . ........................................................................ 26
11 Pseudo code program C++, modul sambung_garis dan modul cek_cabang. ................................... 27
12 Pseudo code program C++, modul cek_logic dan fungsi sambung. ................................................ 28

vi

PENDAHULUAN
Latar Belakang
Slither link adalah salah satu permainan
kertas terkenal yang sulit untuk dipecahkan
secara konvensional. Tujuan dari slither link
adalah membentuk loop, yaitu sebuah putaran
garis yang tidak bercabang dan kembali ke

titik awal tetapi harus memenuhi aturan slither
link yaitu jumlah garis yang mengelilingi cell
harus sama dengan angka di dalam cell.
Penyelesaian untuk persoalan ini harus
melibatkan
algoritme
yang
mencari
kemungkinan
semua
solusi.
Hal
ini
menyebabkan kompleksitas dari eksekusi
algoritme ini akan menjadi eksponensial
terhadap ukuran masukan yang diberikan.
Permasalahan ini lebih dikenal sebagai
Nondeterministic Polynomial-time Complete
(NP-Complete).
Teknik pemrograman komputer mempunyai
banyak paradigma atau teknik untuk
menyelesaikan sebuah masalah, pemilihan
teknik pemrograman yang tepat akan
memberikan cara paling efektif untuk
mendapatkan solusi dari masalah ini. Salah
satunya adalah teknik procedural programming.
Teknik ini akan memberi sekumpulan instruksi
untuk komputer berupa langkah-langkah, dan
perintahnya bersifat linear untuk menyelesaikan
sebuah masalah dengan menggunakan loop dan
percabangan.
Teknik lain yang digunakan dalam
pemrograman
komputer
adalah
logic
programming yang bersifat deklaratif, teknik ini
akan mengubah masalah menjadi sekumpulan
fakta dan aturan. Dengan melakukan
pendekatan secara logika, sebuah model
penyelesaian akan menyelesaikan slither link
mirip dengan logika manusia. Metode ini akan
memberikan cara yang lebih efisien dalam
menemukan solusi dari slither link, salah
satunya adalah dengan menggunakan answer set
programming.
Tujuan Penelitian
Tujuan dari penelitian ini adalah untuk
membuat model penyelesaian game slither link
menggunakan answer set programming dengan
tool DLV (datalog with disjunction) dan
procedural programming menggunakan C++
kemudian membandingkan kinerja dari kedua
metode tersebut.

Ruang Lingkup Penelitian
Ruang lingkup permasalahan pada tugas ini
adalah :
1

2
3

Membuat model penyelesaian game slither
link. dengan menggunakan answer set
programming
dan
procedural
programming.
Ukuran pembanding adalah rata-rata waktu
eksekusi dari setiap model solver.
Software yang digunakan adalah PHP
sebagai front end dan DLV serta C++
sebagai back end.

Manfaat Penelitian
Penelitian
ini
diharapkan
dapat
menunjukkan bahwa answer set programming
bisa menyelesaikan masalah game slither link
NP-Complete
sebagaimana
procedural
programming melakukannya.

TINJAUAN PUSTAKA
NP-Complete
Setiap masalah bisa diselesaikan dengan
berbagai jenis algoritme, tapi algoritme yang
disebut efisien adalah algoritme yang bisa
menyelesaikan
masalah
dalam
waktu
polinomial untuk semua input. Algoritme yang
disebut tidak efisien adalah algoritme yang
menyelesaikan
masalah
dalam
waktu
eksponensial untuk beberapa input. Ada tiga
kelas masalah yaitu P, NP, dan NPC.
Kelas P (polinomial)
berisi masalahmasalah yang bisa dalam waktu polinomial,
sebuah fungsi f(n) dikatakan P jika f(n) = O(nk)
dengan k bernilai konstan dan n adalah ukuran
dari input. Contoh masalah yang bisa
diselesaikan dengan waktu polinomial adalah
masalah sorting, dari semua algoritme sorting
kompleksitas terbaiknya untuk kasus worst case
adalah O(n2) dan O(n log n) untuk kasus best
case (Cormen et al. 2001).
Kelas NP (non deterministic polynomial)
berisi masalah-masalah yang bisa diverifikasi
dalam waktu polinomial. Maksud dari kalimat
tersebut adalah jika kita mempunyai kandidat
solusi dari masalah NP, maka kita bisa
melakukan verifikasi apakah solusi tersebut
benar dalam waktu polinomial. Setiap masalah
dalam P adalah NP, karena untuk setiap
masalah dalam P bisa kita selesaikan dalam
waktu polinomial tanpa memerlukan kandidat
solusi. Contoh masalah yang masuk dalam kelas
NP adalah TSP (travelling salesman problem)
(Cormen et al. 2001).

1

Kelas NPC atau NP-Complete (non
deterministic polynomial complete) adalah
persoalan NP yang paling sulit. Sebuah masalah
X dikatakan NP-Complete jika :
1 X termasuk ke dalam kelas NP.
2 Setiap persoalan di dalam NP dapat
ditransformasi dalam waktu
polinomial
menjadi X.
Jika sebuah masalah X hanya memenuhi
kondisi nomor dua, maka masalah tersebut
dikatakan NP-hard. Jika salah satu masalah NPComplete bisa diselesaikan dengan waktu
polinomial, maka semua masalah NP-Complete
bisa diselesaikan dalam waktu polinomial.
Beberapa masalah NP-Complete yang terkenal
adalah Hamiltonian Cycle Problem dan Subset
Sum. Masalah NP-Complete pertama yang
berhasil dipecahkan adalah SATISFIABILITY
(SAT) oleh Stephen Cook yang disebut teorema
Cook (Garey et al 1979).
Semua persoalan P (polinomial) juga adalah
NP (non deterministic poyinomial), P adalah
himpunan bagian dari NP. Namun belum ada
yang bisa membuktikan apakah masalah
P ≠ NP atau P = NP sehingga P NPC = ∅ .
Gambar 1 adalah ilustrasi hubungan antara P,
NPC, dan NP.

Gambar 1 Hubungan antara P, NP, dan NPC
(Cormen et al 2001).
Logic Programming
Logic (declarative) programming muncul
sebagai paradigma berbeda pada tahun 1970-an,
karena logic programming mengharuskan
programmer untuk mendeklarasikan tujuan
(goal) dari komputasi. Goal diekspresikan
sebagai kumpulan dari aturan tentang hasil dan
constraint (pembatas) dari komputasi. Logic
programming disebut juga sebagai rule-based
programming (Tucker et al 2002).
Secara
umum,
logic
programming
merepresentasikan masalah dalam bentuk aturan
dan fakta. Sebuah aturan ditulis sebagai :
h ← p1, p2, ..., pn.

Sebagai contoh, misalnya kita mendapatkan
fakta bahwa Allen dan Mary berbicara bahasa
Rusia, Bob berbicara bahasa Inggris. Sedangkan
aturannya adalah seseorang bisa berbicara
dengan orang lain yang bernilai benar ketika
mereka berbicara dalam bahasa yang sama.
Maka kita bisa menulisnya sebagai fakta dan
aturan berikut:
speaks(allen,russian).
speaks(bob,english).
speaks(mary,russian).
talkswith(P1, P2) :- speaks(P1,L),
speaks(P2,L), P1\=P2.

Contoh eksekusi program :
?- speaks(alen,russian).
true.
?- talkswith(X,allen).
returns X = mary.

Answer set programming
Answer set programming (ASP) adalah
sebuah bentuk pemrograman berorientasi
deklaratif untuk menyelesaikan masalah
pencarian solusi yang sulit terutama masalah
dengan kompleksitas tinggi (diatas ∑�2 ) Answer
Set Programming adalah pengembangan dari
Logic Programming dan telah diaplikasikan di
banyak bidang ilmu pengetahuan.
Answer set semantics adalah salah satu
formalisme yang paling populer dan semantik
yang paling umum diterima
dalam
pemrograman
logika,
semantik
ini
mendefinisikan
stable
model
yang
memperbolehkan negasi dan disjungsi dalam
aturan.
Kelebihan
ASP
dibandingkan
pemrograman berbasis Prolog adalah semantik
yang jelas menjamin program bisa berhenti.
Pemrograman berbasis Prolog tidak murni
deklaratif karena semantik yang disediakan oleh
Prolog masih bergantung pada aspek prosedural
dari program, seperti urutan dari bagian body
pada aturan.
Penyempurnaan lain yang ditawarkan ASP
adalah semantik yang jelas untuk menangani
program tidak stratified yang tidak bisa
dilakukan oleh Prolog. Misalnya kita
mempunyai pernyataan : “jika seseorang bisa
diasumsikan bukan laki-laki maka orang
tersebut pasti seorang wanita”, dalam ASP
pernyataan tersebut ditulis sebagai berikut :
female(X) ← person(X), not male(X).
male(X) ← person(X), not female(X).

Untuk setiap fakta dari person(a), answer set
semantics menghitung satu himpunan jawaban
(answer set) yang berisi female(a) dan satu

2

himpunan jawaban berisi male(a). Fitur
penting lain dari ASP adalah kemampuannya
untuk menggunakan ekspresi disjungsi (“V”)
pada head dari aturan. ASP menjadi sangat
deklaratif untuk berbagai masalah. Sebagai
contoh, program sebelumnya bisa ditulis
menggunakan satu aturan seperti berikut :
female(X) V male(X) ← person(X).

Penggunaan disjungsi pada head akan
meningkatkan kekuatan ekspresif dari ASP .
Syntax ASP

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. Dalam sebuah simbol
predikat p, sebuah atom didefinisikan sebagai
�1 , … , �� dimana untuk setiap �� , 1 ≤ � ≤ �
adalah sebuah term yang bisa berupa konstanta
atau variabel, k disebut aritas dari p. Atom
dengan aritas () disebut atom proporsional.
Sebuah classical literal l bisa berupa sebuah
atom p (positif), atau sebuah negasi atom ¬p
(negatif).
Dua tipe negasi dalam ASP yaitu, default
negation dengan bentuk “not b” yang berarti
tidak ada bukti yang menunjukkan bahwa b
berniali benar maupun b bernilai salah. Explicit
negation dengan bentuk “¬b” yang berarti kita
mempunyai bukti bahwa b bernilai salah.
Sebuah rule (r) dalam ASP mempunyai
bentuk :
1







1, … ,

,



+1 , … ,



Himpunan dari

adalah head
1

dari
aturan
r,
dinotasikan
dengan
(�),
sedangkan
himpunan
dari
adalah body
, � +1 , … , �
1, … ,
dari r dan dinotasikan dengan � . Ada dua
tipe body yaitu positive body literal yang
+
dinotasikan
sebagai

dimana
+
, dan negative body literal
� = 1, … ,

� dimana − � =
� +1 , … , �

sehingga � = + �
� .

Sebuah rule r tanpa head � = 0 disebut
sebagai hard constraint, sebuah rule dengan
tepat satu head � = 1 disebut sebagai normal
rule, sedangkan sebuah rule dengan k > 1
disebut sebagai disjunctive rule. Jika body dari
rule kosong � = = 0 maka rule tersebut
disebut sebagai fact atau dengan kata lain kita

tidak menggunakan tanda “←”. Sebuah rule
dikatakan positif jika n = m atau dengan kata
lain dalam bahasa matematika ∀ � ∈ � ∶

� = ∅ , dan disebut juga sebagai horn
rule.
Answer Set Semantics

Semantics dari program P adalah program
yang bebas dari variabel, maka kita harus
mendefinisikan ground instantiation dari
program yang akan mensubstitusi semua
variabel dari program dengan konstanta.
Herbrand Universe dari P (Program) atau
kita sebut � , adalah himpunan semua simbol
yang dibentuk dari konstanta dalam P.

Herbrand Literal Base berarti untuk setiap
program P,
adalah himpunan dari semua
ground (classical) literal yang dibangun dari
simbol predikat yang muncul pada P dan
konstanta dari � .

Ground Instantiation berarti untuk setiap
rule r, Ground(r) menotasikan himpunan rule
yang didapatkan dengan mengganti setiap
variabel yang muncul di r dengan simbol
konstanta dalam
� . Dinotasikan dengan
Ground(P) yaitu himpunan dari semua ground
instances dari rule pada P.

Semantics dari program P didefinisikan
dengan mencari positive ground program.
Sebuah interpretasi I adalah subset dari
.
Sebuah himpunan dari literals S memenuhi
sebuah rule r jika dan hanya jika �
� ≠
�=∅.
∅ kapanpun + � ⊆ � dan − �
Himpunan dari literal S memenuhi sebuah
program P jika memenuhi seluruh rule pada P.
Sebuah model dari program P adalah sebuah
interpretasi ⊆
dimana I harus memenuhi
P. Sebuah answer set dari ground program yang
positif adalah model minimal dari P.
Hasil reduksi atau Gelfond-Lifschitz
transform (GL-transform) adalah program
ground positive yang didapatkan dari
Ground(P) dengan cara :
1 Menghapus semua rule r ∈ Ground(P)
sehingga − �
≠ ∅.
2 Menghapus literal body negatif dari rule
yang tersisa.
Sebuah answer set dari sebuah program P
adalah sebuah interpretasi ⊆
sehingga I
adalah answer set dari P. Program P dikatakan
konsisten jika memiliki minimal satu buah
answer set (ANS(P) ≠ ∅). Sebuah ground
classical literal a dikatakan bravely true jika
3

ada minimal satu answer set A ∈ ANS(P),
dimana
∈ . Sedangkan sebuah ground
classical literal a dikatakan cautiously true jika
setiap answer set A ∈ ANS(P), dimana ∈ .
Jika terjadi kasus spesial dimana program P
definite-horn, dalam kasus ini P memiliki tepat
satu answer set dan dinotasikan dengan Tp atau
immediate consequence (Gelfond et al 1991).
Berdasarkan answer set semantics , maka
terdefinisi reasoning task sebagai berikut :
1 Answer set existence, buktikan program P
memiliki paling sedikit satu buah answer set
(selain itu maka program dikatakan tidak
konsisten).
2 Brave reasoning, diberikan program P dan
sebuah atom a maka buktikan apakah a
benar pada minimal satu answer set P.
3 Cautious reasoning, diberikan program P
dan sebuah atom a maka buktikan apakah a
benar dalam semua answer set P.
4 Generate all answer sets, diberikan program
P maka hitung semua answer sets A ∈
ANS(P).
DLV (datalog with disjunction)

Untuk melakukan implementasi answer set
programming para peneliti membuat ASP
solver untuk mengevaluasi dan menampilkan
answer set, beberapa ASP solver yang terkenal
adalah DLV, clasp/claspD, SMODELS, dan
ASSAT. ASP solver yang digunakan untuk
menyelesaikan masalah slither link adalah DLV
(datalog with disjunction). DLV dikembangkan
oleh University of Calabria dan Vienna
Technical University. DLV adalah alat untuk
mengkomputasi
answer
set
yang
mengimplemtasikan
pemrograman
logika
disjungsi dengan menggunakan semantik
answer set (Gelfond et al 1991).
Disjunctive
datalog
memperbolehkan
ekspresi logika OR (disjungsi) muncul didalam
aturan.
Kelebihan
dari
DLV
adalah
komputasinya sound and complete, sound
adalah solusi yang dihasikan merupakan
jawaban dari masalah dan complete adalah
semua solusi harus muncul. Struktur dari DLV
adalah :
 Rule

Dengan
mengikuti
paradigma
Guess/Check/Optimize (GCO) masalah dengan
kompleksitas tinggi bisa diselesaikan. GCO
untuk program P akan terdiri atas tiga bagian
berikut :
1 Bagian Guessing.
Bagian guessing akan mendefinisikan
search space (ruang pencarian) yang
merepresentasikan kandidat solusi. Pada
bagian ini kita berusaha menebak semua
solusi yang mungkin muncul.
2 Bagian Checking.
Bagian ini bersifat opsional yang akan
memfilter kandidat solusi sedemikian rupa
sehingga answer sets dari P akan
merepresentasikan solusi yang bisa diterima
untuk instance masalah. Pada bagian ini kita
menuliskan constraint agar solusi yang
muncul hanya solusi yang diinginkan.
3 Bagian optimization.
Bagian
ini
memungkinkan
untuk
mengekspresikan evaluasi bobot kuantitatif
dari solusi dengan menggunakan weak
constraint.
Misalnya kita akan memodelkan bahwa
setiap kali seseorang memberitahu kita sebuah
lelucon, maka kita tertawa. Hal ini bisa
dilakukan dengan cara berikut :
joke.
laugh :- joke.

Baris
pertama
adalah
fakta
dan
mengekspresikan bahwa joke adalah benar.
Baris kedua adalah aturan, ini dibaca sebagai
“ jika lelucon adalah benar, maka tertawa juga
harus benar”. (tanda “:-“ berarti sebuah panah
ke kiri, pemrograman logika mengartikannya
sebagai implikasi).
Salah satu masalah NP-Complete yang
terkenal adalah Graph 3-Colorability (Garey et
al 1979). Diberikan (undirected) graf G
={V,E}, putuskan bagaimana memberi warna
pada setiap node dalam graf dengan salah satu
dari tiga warna yang didefinisikan dimana tidak
boleh
ada dua node yang bertetangga
mempunyai warna yang sama. Kasus graph
coloring dengan tujuh node dan 3 warna
ditunjukkan pada Gambar 2 :

:

∶−
1
,

,
,

� .
1

�+1 , … ,
 Constraint :
: − 1 , … , � , � �+1 , … , � .
 Program :
Sebuah himpunan terbatas P yang terdiri
atas rules dan constraints.

4

Minnesota

Iowa

Wisconsin

Illinois

indiana

Michigan

Ohio

Nomor didalam cell slither link yang belum
terselesaikan dipilih sedemikian sehingga
mempunyai solusi yang unik, Gambar 3 adalah
contoh
masalah
slither
link
dan
penyelesaiannya :

Gambar 2 Graf tujuh kota.
% aturan pewarnaan (guess)
col(Country, red) v col(Country,green) v
col(Country, blue) :- node(Country).
% periksa warna yg incident(check)
:- arc(Country1, Country2),
col(Country1, CommonColor),
col(Country2, CommonColor).

DLV akan menghasilkan enam solusi, dan
semua solusi memenuhi ketentuan graph
coloring (graf tiga warna). Berikut adalah salah
satu solusi yang dihasilkan :
{col(minnesota,green),
col(wisconsin,red), col(illinois,green),
col(iowa,blue), col(indiana,red),
col(michigan,blue), col(ohio,green) }

Slither link
Slither link ditemukan tahun 1989 oleh
perusahaan puzzle jepang Nikoli, slither link
juga dikenal sebagai Fences and Loop the Loop
dan Dotty Dilemma. Slither link dimainkan
dalam grid empat persegi panjang dengan
beberapa nomor terisi didalam grid (tidak
semua terisi). Masalah slither link telah terbukti
NP-Complete
(Yato 2003) sehingga bisa
ditangani oleh answer set programming.

Gambar 3 Masalah slither link dan solusinya
(Yato 2003).

METODOLOGI
Formulasi aturan pembangkitan slither link
Aturan-aturan
yang
berlaku
dalam
pembangkitan slither link dikumpulkan. Aturanaturan tersebut diformulasikan ke dalam bahasa
logika answer set programming. Untuk
pembangkitan slither link secara acak langkahlangkah yang harus dilakukan adalah (Wan
2009) :
1 Mengisi grid dengan sembarang loop.
2 Secara acak hapus nomor di dalam cell satu
per satu.
3 Periksa apakah slither link masih bisa
menghasilkan solusi yang unik.
4 Hapus semua edge.
5 Tampilkan hasil pada pengguna.

Tingkat kesulitan dari slither link
didefinisikan berdasarkan luas persegi atau
papan permainannya dan angka yang terisi di
dalam grid. Aturan dari slither link adalah
sebagai berikut :

Slither link yang dibangkitkan harus secara
acak. Ketika menghapus nomor di dalam cell,
algoritme pembangkitan harus memastikan
bahwa slither link yang dihasilkan bisa
diselesaikan menggunakan aturan logika. Proses
ini dikerjakan oleh modul back end dan
ditunjukkan pada Gambar 4.

1 Setiap masalah di representasikan dalam
grid empat persegi panjang. Panjang dari
persegi tersebut menunjukkan ukuran dari
masalah.
2 Sebuah 1 x1 persegi dikelilingi oleh empat
titik yang disebut cell. Sebuah cell bisa
mempunyai nomor antara null, 0, 1, 2, atau
3.
3 Tujuan dari permainan adalah membuat loop
yang tidak memotong atau bercabang
dengan menghubungkan titik-titik yang
bertetangga dengan garis, sehingga sebuah
nomor dalam cell nilainya sama dengan
jumlah garis yang mengelilingi cell tersebut.

Gambar 4 Formulasi pembangkitan.

5

Tingkat kesulitan
puzzle

Slither link yang ingin dibangkitkan adalah
slither link yang berada di tengah pada grafik
perbandingan antara tingkat kesulitan puzzle
dan jumlah constraint pada puzzle seperti
ditunjukkan pada Gambar 5 berikut :

Constraint puzzle

Gambar 5 Grafik tingkat kesulitan puzzle
berbanding
dengan
constraint
puzzle.
Gambar 5 bermakna bahwa slither link yang
optimal adalah yang memiliki jumlah constraint
yang tidak terlalu sedikit dan tidak terlalu
banyak sehingga solusi yang dihasilkan unik
dan sulit ditemukan, tetapi jika constraint
sedikit maka solusi dari slither link
kemungkinan banyak, dan sebaliknya jika
constraint terlalu banyak maka kemungkinan
slither link tidak mempunyai solusi. Untuk
mendapatkan slither link dengan jumlah
constraint yang tepat sangat sulit.
Formulasi aturan penyelesaian
Solusi yang dihasilkan akan dimodelkan
sebagai graf yang mempunyai loop di dalam
grid yang memenuhi aturan slither link. Maksud
dari pernyataan tersebut adalah graf yang
dihasilkan adalah solusi dari slither link dimana
dalam setiap cell yang terdapat angka di
dalamnya maka jumlah edge yang mengelilingi
cell tersebut harus sesuai dengan angka di
dalam cell tersebut. Dengan paradigma Guess
and Check maka :
1 Guess
Akan ditebak semua kemungkinan graf
(kandidat solusi) yang akan muncul dalam
slither link, semua graf yang muncul adalah
graf yang mempunyai loop atau cycle.
2 Check
Kandidat solusi yang dibangkitkan oleh
prosedur guess diperiksa kembali dengan
constraint yang ditentukan sehingga
didapatkan solusi yang memenuhi aturan
slither link.

Gambar 6 Formulasi Penyelesaian.
Cara termudah untuk menyelesaikan slither
link adalah mengeliminasi garis dimana garis
tersebut tidak seharusnya berada, cara ini
dilakukan dengan memberikan nilai 0 untuk
garis tersebut. Misalnya sebuah cell dengan
nilai 0 tidak boleh mempunyai garis di
sekelilingnya, maka semua garis yang
mengelilingi cell tersebut harus dieliminasi.
Petunjuk-petunjuk tersebut direpresentasikan
dalam bentuk rule, dan berikut adalah petunjuk
atau teknik untuk membantu menyelesaikan
masalah slither link :
1 Tidak boleh ada garis di sekeliling cell
dengan nilai 0. Perhatikan angka 0 pada
contoh berikut, angka 0 berarti sebuah cell
tidak boleh dikelilingi oleh garis maka
berikan tanda X pada keempat sisinya untuk
menandakan bahwa tidak boleh ada garis
pada posisi tersebut.

Gambar 7 Cell dengan nilai 0 (Conceptis
puzzle 1997).
2 Cell dengan nilai 0 dan 3 yang bertetangga.
Contoh berikut menggambarkan cell dengan
angka 3 yang berada di bawah cell dengan
angka 0. Garis diatas cell yang bernilai 3
diberi tanda X maka hanya ada satu cara
untuk menyelesaikan garis di sekeliling cell
dengan nilai 3 yaitu pada kiri, bawah, dan
kanan cell tersebut.

6

Gambar 8 Cell bernilai 0 dan 3 yang
bertetangga (Conceptis puzzle
1997).
3 Cell dengan nilai 0 dan 3 dengan posisi
diagonal. Pada Gambar 9 bagian kiri
diilustrasikan dua buah skenario jika terjadi
diagonal antara 0 dan 3 dengan garis
keabuan, berdasarkan fakta tersebut maka
gambar di sebelah kanan pada Gambar 9
menggambarkan petunjuk ketika terjadi
skenario ini.

Gambar 9 Cell bernilai 0 dan 3 diagonal
(Conceptis puzzle 1997).
4 Cell dengan nilai 3 yang bertetangga. Hanya
ada dua solusi yang mungkin untuk skenario
ini dan digambarkan pada Gambar 10 bagian
kiri dengan garis keabuan. Berdasarkan
fakta tersebut maka Gambar 10 bagian
kanan menggambarkan petunjuk yang harus
dilakukan jika skenario ini terjadi.

Gambar 11 Dua cell bernilai 3 dan diagonal
(Conceptis puzzle 1997).
6 Angka apapun pada pojok grid. Cell yang
terletak di pojok grid memiliki karakteristik
khusus untuk angka berapapun yang
dimilikinya. Angka 0 sudah dijelaskan pada
teknik pertama, angka 1 akan mengugurkan
dua sisi pada pojok cell karena tidak
mungkin sebuah garis akan terbentang pada
posisi tersebut, maka berikan tanda X pada
dua sisi tersebut. Angka 2 memiliki dua
solusi yang mungkin tetapi kedua solusi
tersebut pasti memiliki awal garis yang sama
dan digambarkan pada gambar di kanan.
Angka 3 pada pojok grid memiliki dua
solusi yang mungkin, dan garis merah
menggambarkan garis yang pasti terbentang
untuk angka 3 pada pojok grid.

Gambar 12 Angka apapun pada pojok cell
(Conceptis puzzle 1997).
Pembangunan front end
Modul
front
end
akan
dibangun
menggunakan PHP dan JavaScript yang
berfungsi sebagai GUI (graphical user
interface) dan memperlihatkan slither link yang
dibangkitkan serta solusinya.

Gambar 10 Dua cell bernilai 3 yang
bertetangga (Conceptis puzzle
1997).
5 Cell dengan dua nilai 3 yang diagonal. Ada
dua kemungkinan solusi untuk menangani
skenario ini, salah satunya ditunjukkan pada
Gambar 11 bagian kiri. Berdasarkan fakta
tersebut maka ada empat garis yang pasti
ada jika skenario ini terjadi, dan
digambarkan pada Gambar 11 bagian kanan
dengan warna merah. Untuk mencegah
percabangan, berikan tanda X pada empat
sisi lain.

7

Arsitektur sistem
Backend
Identifikasi aturanaturan
pembangkitan
slither link

Pembangkitan
slither link

Domain masalah dalam DLV

Front End

Solusi untuk masalah slither link adalah
membuat loop sedemikian sehingga loop yang
dihasilkan memenuhi kondisi nilai yang
terdapat pada cell
dalam grid, arti kata
memenuhi adalah garis jumlah garis yang
mengelilingi cell harus memiliki jumlah yang
sama dengan angka yang terdapat di dalam cell.

GUI

Parser

Backend

Penyelesaian
Slither link

solusi yang diinginkan ke dalam bahasa logika
DLV menggunakan paradigma GCO (guess /
check / optimize) agar solver bisa
menyelesaikannya.
Sebagai
perbandingan
dibuat juga model penyelesaian slither link
dengan menggunakan procedural programming
dengan software C++, kedua metode ini akan
dibandingkan rata-rata waktu eksekusinya.

Identifikasi aturanaturan
penyelesaian
slither link

Gambar 13 Arsitektur sistem.
Arsitektur sistem ini terdiri atas tiga bagian
yaitu, modul back end, modul front end, dan
modul parser. Pada bagian back end akan di
kerjakan oleh DLV dan C++, bagian ini adalah
bagian utama yang menangani pembangkitan
dan penyelesaian slither link dengan answer set
programming maupun dengan procedural
programming. Kemudian bagian parser adalah
bagian penghubung yang bertugas sebagai
modul penerjemah. Gambar 14 menggambarkan
sebuah diagram alur tentang bagaimana sebuah
solver slither link bekerja menghasilkan solusi.

Sebuah
cell
dalam
slither
link
direpresentasikan dengan predikat C(X,Y,N)
yang memiliki tiga argumen yaitu, X dan Y
yang berarti koordinat cell dalam grid (X
koordinat vertikal dan Y koordinat horizontal)
, dan N yang berarti angka yang terdapat di
dalam cell. N bisa bernilai 0, 1, 2, 3, atau null.
Himpunan dari predikat C disebut sebagai fakta
atau deskripsi dari masalah slither link yang
akan diselesaikan, seperti pernyataan berikut
mengilustrasikan fakta untuk
slither link
dengan ukuran 3x3.
C(1,1,null).
C(1,2,null).
C(1,3,2).
C(2,1,1).
C(2,2,0).
C(2,3,3).
C(3,1,2).
C(3,2,null).
C(3,3,null).

Fakta tersebut adalah representasi dari Gambar
15:

Gambar 15 Representasi dari fakta slither link.
Gambar 14 Diagram alur proses solver slither
link.

HASIL DAN PEMBAHASAN
Masalah slitherlink diselesaikan dengan
metodologi pemrograman deklaratif dengan
terlebih dahulu mendeskripsikan masalah,
kemudian melakukan proses encoding kondisi

Predikat arc(X,Y,A,B,C,D) memiliki
enam
argumen
didalamnya
yang
merepresentasikan posisi cell dan status garisgaris di sekeliling cell, dimana X dan Y
merepresentasikan posisi cell (X koordinat
vertikal dan Y koordinat horizontal), sedangkan
A, B, C, dan D merepresentasikan nilai atau
status dari garis di sekeliling cell. Jika bernilai 0
maka tidak ada garis terbentang pada posisi

8

tersebut, dan jika bernilai 1 maka ada garis
terbentang di posisi tersebut. A berposisi di atas
cell, B berposisi di sebelah kanan cell , C
berposisi di bagian bawah cell, dan D berposisi
di sebelah kiri cell seperti ditunjukkan pada
Gambar 16.

Gambar

18

Cell

dengan

predikat

arc(X,Y,1,0,0,0).

3 arc(X,Y,0,0,1,0)

Gambar
Gambar

16

Representasi
sekeliling

status

garis

di
cell

19

Cell

dengan

predikat

arc(X,Y,0,0,1,0).

4 arc(X,Y,0,0,0,1)

arc(X,Y,0,0,0,1).

Encoding dengan DLV
Sebelumnya pada bagian metodologi telah
dijelaskan mengenai beberapa teknik atau
petunjuk cara menyelesaikan slither link, teknik
itulah yang akan diterjemahkan ke bahasa
logika
secara
deklaratif
menggunakan
paradigma GC (guess, check).
Langkah pertama yang dilakukan adalah
mendefinisikan ruang pencarian yaitu bagian
guess pada program, pada bagian ini terdapat
empat aturan disjungsi yang mendefinisikan
ruang pencarian dari masalah yaitu cell dengan
nilai 0, 1, 2, 3, dan null dijelaskan pada
Lampiran 1. Misalnya untuk cell dengan nilai 1
maka cell tersebut mempunyai empat
kemungkinan solusi untuk dibangkitkan. Kode
program berikut menggambarkan bagaimana
sebuah
cell
bernilai
1
dibangkitkan
kemungkinan solusinya.
arc(X,Y,1,0,0,0) v arc(X,Y,0,1,0,0) v
arc(X,Y,0,0,1,0) v arc(X,Y,0,0,0,1) :C(X,Y,1).

Berikut adalah representasi bentuk cell dari
solusi yang telah dibangkitkan :

Gambar

20

Cell

dengan

predikat

arc(X,Y,0,0,0,1).

Kemudian langkah selanjutnya adalah
mendefinisikan constraint atau aturan yang
akan menghapus calon answer set yang tidak
memenuhi syarat, bagian ini masuk ke dalam
metode check. Constraint dari program adalah :
1 Cell dengan nilai 0 (lihat Lampiran 2).
Sebuah cell dengan nilai 0 tidak boleh
memiliki garis yang mengelilinginya, dan
hal tersebut berakibat juga pada cell
disebelah kiri atau kanan maupun pada atas
dan bawah cell dengan nilai 0 tersebut.
Dengan
bahasa
logika
aturan
ini
diterjemahkan menjadi :
:- arc(X,Y,0,0,0,0),
arc(A,Y,_,_,1,_), X=A+1.

Answer set yang tidak akan tereliminasi
adalah sebagai berikut :

1 arc(X,Y,1,0,0,0)

Gambar 21 Cell dengan nilai 0.
Gambar

17

Cell

predikat
arc(X,Y,1,0,0,0).

2 arc(X,Y,0,1,0,0)

dengan

2 Cell dengan nilai 1 (lihat Lampiran 2).
Sebuah cell dengan nilai 1 akan
mempengaruhi
jumlah
garis
yang
mengelilingi tetangganya karena hanya
boleh ada satu sisi yang bernilai 1. Misalnya
cell yang bernilai 1 mempunyai garis pada
posisi B maka tetangganya di sebelah kanan
harus memiliki nilai 1 juga tetapi pada garis

9

pada posisi A, B, dan C maka tetangga yang
berada di atas cell tersebut harus memiliki
nilai 1 pada sisi di posisi C, begitu juga
dengan tetangga yang berada di sebelah
kanan yang harus memiliki nilai 1 pada sisi
di posisi D, dan tetangga yang berada di
bawah harus memiliki nilai 1 pada sisi di
posisi A. Skenario tersebut digambarkan
oleh constraint berikut :

di posisi D selain itu maka hapus kandidat
tersebut. Aturan ini diterjemahkan menjadi :
:- arc(X,Y,0,1,0,0),
arc(X,B,_,_,_,0), B=Y+1.

Tanda “_” adalah anonymous variable yang
bermakna bahwa argumen ini bisa
dihiraukan atau berapapun nilainya tidak
mempengaruhi rule. Answer set yang tidak
akan tereliminasi adalah sebagai berikut :

:- arc(X,Y,1,1,1,0),
arc(X,B,_,_,_,0), B=Y+1.
:- arc(X,Y,1,1,1,0),
arc(A,Y,_,_,0,_), X=A+1.
:- arc(X,Y,1,1,1,0),
arc(A,Y,0,_,_,_), A=X+1.

Gambar 22 Cell dengan nilai 1.
3

Cell dengan nilai 2 (lihat Lampiran 2).
Serupa dengan aturan sebelumnya dimana
aturan ini akan mempengaruhi jumlah garis
yang mengelilingi tetangganya, karena nilai
dari cell ini adalah 2 maka ada dua garis
yang harus bernilai 1 dan dua garis lainnya
bernilai 0, begitu juga pada dua buah cell
tetangga dari cell ini. Misalnya cell yang
bernilai 2 memiliki garis pada posisi A dan B
maka tetangga yang berada di atas harus
memiliki nilai 1 pada sisi di posisi C dan
tetangga di sebelah kanan harus memiliki
nilai 1 pada sisi di posisi D, jika menyalahi
aturan ini maka eliminasi answer set
tersebut. Aturan ini diterjemahkan menjadi .
:- arc(X,Y,1,1,0,0),
arc(X,B,_,_,_,0), B=Y+1.
:- arc(X,Y,1,1,0,0),
arc(A,Y,_,_,0,_), X=A+1.

Constraint pertama merepresentasikan cell
di sebelah kanan cell yang bernilai 2, dan
constraint kedua merepresentasikan cell di
atas cell bernilai 2. Answer set yang tidak
akan tereliminasi adalah sebagai berikut :

Gambar 23 Cell dengan nilai 2.
4

Cell dengan nilai 3 (lihat Lampiran 2). Cell
dengan tipe seperti ini adalah kebalikan dari
cell dengan nilai 1, jika pada cell dengan
nilai 1 memiliki tiga garis dengan nilai 0
maka cell dengan nilai 3 memiliki tiga garis
dengan nilai 1 dan satu garis lainnya bernilai
0. Cell dengan tipe ini mengharuskan tiga
tetangganya memiliki nilai 1 pada sis yang
bertetangga, dan satu tetangganya memiliki
nilai 0 pada sisi yang bertetangga. Misalnya
sebuah cell dengan nilai 3 memiliki garis

Answer set yang tidak akan tereliminasi
adalah sebagai berikut :

Gambar 24 Cell dengan nilai 3.
5

Mencegah local loop (lihat Lampiran 3).
Untuk mencegah local loop yaitu loop yang
terjadi pada satu buah cell atau dengan kata
lain cell tersebut mempunyai nilai 4 yang
tidak diperbolehkan dalam aturan slither link
maka eliminasi answer set dimana sebuah
cell yang sudah memiliki tiga sisi bernilai 1
dan sisi lainnya bernilai 0 tetapi sisi bernilai
0 tersebut ternyata bernilai 1 pada
tetangganya sehingga mengakibatkan local
loop. Local loop hanya mungkin terjadi pada
cell yang mempunyai tiga sisi yang bernilai
1, untuk mencegah hal ini maka definisikan
constraint berikut :
:- arc(X,Y,1,1,1,0),
arc(X,B,_,1,_,_), Y =
:- arc(X,Y,0,1,1,1),
arc(A,Y,_,_,1,_), X =
:- arc(X,Y,1,0,1,1),
arc(X,B,_,_,_,1), B =
:- arc(X,Y,1,1,0,1),
arc(A,Y,1,_,_,_), A =

B+1.
A+1.
Y+1.
X+1.

Gambar 25 mengilustrasikan salah satu
answer set yang akan dieliminasi oleh
constraint di atas.

Gambar 25 Local loop pada cell bernilai 3.

10

6

Constraint pada cell dengan posisi X = 1 dan
Y =1 (1,1). Constraint ini akan sangat
membantu menyelesaikan slither link,
karena kesalahan menempatkan garis pada
cell di posisi ini akan mengakibatkan jalan
buntu pada solusi dan akan langsung terlihat
tanpa perlu menunggu cell lain terbuka
garisnya (lihat Lampiran 4). Sebagai contoh
jika cell memiliki nilai 1 maka kandidat
solusi yang akan gugur adalah jika cell
tersebut memiliki sisi yang bernilai 1 pada
posisi A atau D karena hal tersebut akan
mengakibatkan jalan buntu atau garis
berhenti pada posisi itu, untuk mencegah hal
ini maka didefinisikan constraint berikut :

mempunyai nilai 1 maka kandidat solusi
yang akan gugur adalah yang mempunyai
sisi bernilai 1 pada posisi D atau C.
Constraint berikut mendefinisikan aturan
tersebut dalam bahasa logika.

:- arc(1,1,1,0,0,0).
:- arc(1,1,0,0,0,1).

Gambar 28 Constraint pada posisi pojok kiri
bawah.

Constraint tersebut akan mengeliminasi
calon answer set berikut :

Gambar 26 Constraint pada posisi pojok kiri
atas.
7

Constraint pada cell dengan posisi (1,
#maxint), #maxint adalah ukuran dari

slither link sehingga cell tersebut terletak
pada pojok kanan atas (lihat Lampiran 4).
Sebagai ilustrasi jika cell pada posisi ini
memiliki nilai 1, maka kandidat solusi yang
akan gugur adalah jika cell tersebut
memiliki sisi di posisi A atau B yang bernilai
1. Hal tersebut akan mengakibatkan
terjadinya jalan buntu, atau garis tidak bisa
menyambung dengan garis selanjutnya. Hal
tersebut dicegah oleh constraint berikut :
:- arc(1,#maxint,1,0,0,0).
:- arc(1,#maxint,0,1,0,0).

Constraint tersebut akan mengeliminasi
calon answer set berikut :

Gambar 27 Constraint pada posisi pojok
kanan atas
8

Constraint pada cell dengan posisi
(#maxint ,1), #maxint adalah ukuran dari
slither link. Cell dengan posisi ini terletak
pada pojok kiri bawah dari grid (lihat
Lampiran 4). Sebagai ilustrasi jika cell ini

:- arc(#maxint,1,0,0,0,1).
:- arc(#maxint,1,0,0,1,0).

Constraint tersebut akan mengeliminasi
calon answer set berikut :

9

Constraint pada cell dengan posisi
(#maxint, #maxint), #maxint adalah
ukuran dari slither link sehingga cell
tersebut terletak pada pojok kanan bawah
dari grid (lihat Lampiran 4). Sebagai
ilustrasi jika cell pada posisi ini memiliki
nilai 1, maka kan