analisis penyelesaian puzzle sudoku dengan menerapkan algoritma backtracking

17
ANALISIS PENYELESAIAN PUZZLE SUDOKU DENGAN MENERAPKAN ALGORITMA BACKTRACKING MEMANFAATKAN BAHASA PEMROGRAMAN VISUAL BASIC 6.0 DAN DATABASE MICROSOFT ACCESS 2003 MAKALAH PRA SEMINAR TUGAS AKHIR OLEH : RINA DEWI INDAH SARI NIM : 03201045 SEKOLAH TINGGI MANAJEMEN INFORMATIKA DAN KOMPUTER STMIK “ASIA” MALANG JURUSAN TEKNIK INFORMATIKA

Upload: rideinsar

Post on 04-Jan-2016

5.703 views

Category:

Documents


5 download

DESCRIPTION

ANALISIS PENYELESAIAN PUZZLE SUDOKU DENGAN MENERAPKAN ALGORITMA BACKTRACKING MEMANFAATKAN BAHASA PEMROGRAMAN VISUAL BASIC 6.0 DAN DATABASE MICROSOFT ACCESS 2003

TRANSCRIPT

Page 1: ANALISIS PENYELESAIAN PUZZLE SUDOKU  DENGAN MENERAPKAN ALGORITMA BACKTRACKING

 ANALISIS PENYELESAIAN PUZZLE SUDOKU

DENGAN MENERAPKAN ALGORITMA BACKTRACKING

MEMANFAATKAN BAHASA PEMROGRAMAN VISUAL BASIC 6.0

DAN DATABASE MICROSOFT ACCESS 2003

MAKALAH PRA SEMINAR TUGAS AKHIR

OLEH :

RINA DEWI INDAH SARI

NIM : 03201045

SEKOLAH TINGGI MANAJEMEN INFORMATIKA DAN KOMPUTER

STMIK “ASIA” MALANG

JURUSAN TEKNIK INFORMATIKA

13 SEPTEMBER 2007

Page 2: ANALISIS PENYELESAIAN PUZZLE SUDOKU  DENGAN MENERAPKAN ALGORITMA BACKTRACKING

BERMAIN GAME SUDOKU

Page 3: ANALISIS PENYELESAIAN PUZZLE SUDOKU  DENGAN MENERAPKAN ALGORITMA BACKTRACKING

1. Latar Belakang

Permainan Sudoku adalah salah satu puzzle yang paling banyak digemari saat ini, dan

juga merupakan salah satu permasalahan paling sulit di bidang informatika. Permasalahan

puzzle Sudoku sulit untuk dipecahkan karena masuk dalam permasalahan NP-complete,

sehingga tidak bisa diselesaikan dalam waktu yang sama. Hingga saat ini banyak

programmer yang mencari algoritma yang tepat untuk menyelesaikan puzzle ini. Cara yang

paling gampang adalah algoritma Brute Force yaitu dengan cara mengenumerasikan semua

kemungkinan isi sel dengan angka 1 sampai 9.

Untuk memecahkan teka-teki Sudoku, dapat digunakan algoritma backtracking (runut-

balik). Algoritma ini merupakan perbaikan dari algoritma Brute Force, dimana solusi dapat

ditemukan dengan penelusuran yang lebih sedikit dan dapat mencari solusi permasalahan

secara lebih mangkus karena tidak perlu memeriksa semua kemungkinan solusi yang ada.

Hanya pencarian yang mengarah ke solusi saja yang perlu dipertimbangkan.

Algoritma Backtracking ini mudah diimplementasikan dengan bahasa pemrograman

yang mendukung pemanggilan fungsi/ prosedur rekursif. Salah satu bahasa pemrograman

yang mendukung pemanggilan fungsi adalah Visual Basic 6.0.

2. Rumusan Masalah

Bagaimana menyelesaikan permainan puzzle Sudoku dengan menerapkan algoritma

backtracking memanfaatkan bahasa pemrograman Visual Basic 6.0 dan Database

Microsoft Access 2003 ?.

3. Batasan Masalah

1. Analisis penyelesaian dilakukan untuk game puzzle Sudoku.

2. Metode yang diterapkan adalah dengan algoritma backtracking.

3. Bahasa pemrograman yang digunakan adalah Visual Basic 6.0.

4. Database yang digunakan Microsoft Access 2003.

4. Tujuan dan Manfaat Penulisan

Tujuan

1. Menyelesaikan penyusunan Laporan Tugas Akhir (TA) pada program

pendidikan S-1 di Perguruan Tinggi Asia Malang.

2. Mempopulerkan permainan puzzle Sudoku di kalangan mahasiswa untuk

dapat melatih logika manusia dalam berpikir cepat dan teliti.

3. Membantu para penggemar permainan Sudoku dalam mencari cara

penyelesaian permainan yang lebih cepat dan tepat.

Manfaat

Bagi penulis

1. Mengaplikasikan disiplin ilmu yang telah diperoleh selama belajar di Perguruan

Tinggi Asia Malang Jurusan Teknik Informatika.

1

Page 4: ANALISIS PENYELESAIAN PUZZLE SUDOKU  DENGAN MENERAPKAN ALGORITMA BACKTRACKING

2. Belajar menganalisa permasalahan dengan solusi secara ilmiah yaitu dengan

memanfaatkan algoritma backtracking.

3. Dapat mengasah otak dalam berfikir secara cepat dan teliti untuk mencari

penyelesaian masalah.

Bagi pembaca

1. Memberikan alternatif cara yang efisien dalam penyelesaian permainan

puzzle Sudoku.

2. Menjadi bahan kajian yang dapat dikembangkan dikemudian hari.

5. Puzzle Sudoku

a. Sejarah Sudoku

Sudoku juga dikenal sebagai Number Place atau Nanpure, adalah sejenis

teka-teki logika. Tujuannya adalah untuk mengisikan angka-angka dari 1 sampai 9 ke

dalam jaring-jaring 9×9 yang terdiri dari 9 kotak 3×3 tanpa ada angka yang berulang di

satu baris, kolom atau kotak. Sudoku adalah sebuah puzzle yang didasarkan pada

konsep Latin Square. Latin Square sendiri diperkenalkan pada tahun 1783 oleh

Leonhard Euler, seorang matematikawan asal Swiss.

Permainan ini pertama kali diterbitkan di sebuah surat kabar Perancis pada

1895. Versi modern permainan ini dimulai di Indianapolis pada 1979. Kemudian

menjadi terkenal kembali di Jepang pada 1986, ketika penerbit Nikoli menemukan

teka-teki ini yang diciptakan Howard Garns seorang mantan arsitek yang meninggal

tahun 1989. Kemudian Nikoli membawa permainan ini ke Jepang dan menerbitkannya

di sebuah media cetak khusus puzzle miliknya “Monthly Nikolist”. Mereka

menamakannya “Suuji Wa Dokushin Ni Kagiru”, disingkat Sudoku (artinya "angka-

angkanya harus tetap tunggal") dan mematenkan kata ini. Media lain pun kemudian

menerbitkan permainan ini dengan nama aslinya, Number Place. Mulai saat itulah

permainan ini mewabah di Jepang. Lebih dari 600.000 majalah tentang

Sudoku terjual di Jepang setiap bulannya. Lucunya, mereka lebih senang

menyebutnya Number Place, sementara orang di luar Jepang menamakannya

Sudoku.

Sudoku menjadi benar-benar mewabah di Inggris ketika The Daily Telegraph

mengenalkannya pada pembacanya pada bulan Februari 2005. Media lain pun

kemudian mengikuti dengan menyediakan permainan ini di edisinya masing-masing.

Pertengahan Mei 2005 adalah awal demam Sudoku. Segala hal tentang Sudoku

menjadi ladang uang, pemuatan di koran harian, penerbitan buku, penerbitan majalah,

pertunjukkan televisi, siaran radio, pelayanan langganan lewat email, dan penyediaan

layanan di telepon genggam. Khusus untuk buku, News & Star mencatat bahwa 6 dari

10 buku nonfiksi yang paling laris saat ini adalah buku tentang Sudoku. Dari Inggris,

2

Page 5: ANALISIS PENYELESAIAN PUZZLE SUDOKU  DENGAN MENERAPKAN ALGORITMA BACKTRACKING

Sudoku kemudian menyebar di daratan Eropa, dari Prancis sampai Slowakia, lalu

menular pula ke Australia dan Amerika.

b. Aturan Permainan Sudoku

Aturan permainan untuk puzzle ini sangat sederhana, untuk menyelesaikan

permainan ini tidak diperlukan pengetahuan umum, kepandaian atas bahasa tertentu,

juga kemampuan matematika. Tetapi hanya memerlukan kecermatan, kesabaran, dan

logika.

Papan Sudoku terbuat dari sembilan buah kotak berukuran 3×3 (disebut blok/

subgrid) yang disusun sedemikian rupa sehingga menghasilkan kotak besar berukuran

9×9. Beberapa kotak sudah diisi sebagai petunjuk awal dan tugas pemain adalah

melengkapi angka-angka pada kotak yang lain sehingga keseluruhan papan

permainan terisi angka secara lengkap. Aturan permainannya sangatlah sederhana:

1. Kotak-kotak pada setiap baris, kolom, dan blok/ subgrid harus berisi sebuah angka.

2. Angka-angka yang diisikan harus unik dari 1 hingga 9 sehingga dalam 1 blok/

subgrid hanya terdiri atas angka 1-9 yang tidak berulang dan tidak ada angka yang

berulang dalam 1 baris maupun kolom.

Angka-angka ini sebenarnya tidak memiliki hubungan aritmetis satu sama

lain. Anda boleh menggantinya dengan 9 huruf, lambang, atau warna yang berbeda.

6. Algoritma Backtracking (Runut Balik)

Algoritma backtracking pertama kali diperkenalkan oleh D.H. Lehmer pada tahun 1950

menyajikan uraian umum tentang backtracking dan penerapannya dalam berbagai persoalan

dan aplikasi. Algoritma backtracking (runut balik) merupakan salah satu metode pemecahan

masalah yang termasuk dalam strategi yang berbasis pencarian pada ruang status.

Algoritma backtracking bekerja secara rekursif dan melakukan pencarian solusi persoalan

secara sistematis pada semua kemungkinan solusi yang ada. Oleh karena algoritma ini

berbasis pada algoritma Depth-First Search (DFS) untuk mencari solusi persoalan secara

3

Page 6: ANALISIS PENYELESAIAN PUZZLE SUDOKU  DENGAN MENERAPKAN ALGORITMA BACKTRACKING

lebih mangkus, maka pencarian solusi dilakukan dengan menelusuri suatu struktur

berbentuk pohon berakar.

Algoritma backtracking adalah suatu algoritma yang merupakan perbaikan dari

algoritma brute force, secara sistematis mencari solusi persoalan di antara semua

kemungkinan solusi yang ada. Backtracking merupakan bentuk tipikal dari algoritma rekursif

dan berbasis pada DFS dalam mencari solusi yang tepat. Selain itu, algoritma ini juga

merupakan metode yang mencoba-coba beberapa keputusan sampai kita menemukan salah

satu yang ”berjalan”. Kita tidak perlu memeriksa semua kemungkinan solusi yang ada, tetapi

cukup yang mengarah kepada solusi saja. Dengan memangkas (pruning) simpul-simpul

yang tidak mengarah ke solusi, sehingga waktu pencarian dapat dihemat. Algoritma ini

banyak diterapkan untuk program games dan permasalahan pada bidang kecerdasan

buatan.

7. Strategi umum penyelesaian teka-teki Sudoku

1. Pemindahan (scanning)

Berupa proses memindahkan baris atau kolom untuk mengindentifikasi baris mana

dalam suatu blok yang terdapat angka-angka tertentu. Proses ini kemudian diulang

pada setiap kolom (atau baris) secara sistematis. Kemudian menentukan nilai dari

suatu sel dengan membuang nilai-nilai yang tidak mungkin.

2. Penandaan (marking)

Berupa analisa logika, dengan menandai kandidat angka yang dapat dimasukkan

dalam sebuah sel.

3. Analisa (analysing)

Berupa eliminasi kandidat, dimana kemajuan dicapai dengan mengeliminasi kandidat

angka secara berturut-turut hingga sebuah sel hanya punya 1 kandidat.

8. Prinsip Pencarian Solusi dengan Metode Backtracking

Seperti yang telah dijelaskan bahwa pencarian solusi dengan menggunakan

algoritma backtracking digunakan pohon ruang status. Cara kerjanya adalah dengan

membentuk lintasan dari akar ke daun.

Pohon Ruang Status

4

Page 7: ANALISIS PENYELESAIAN PUZZLE SUDOKU  DENGAN MENERAPKAN ALGORITMA BACKTRACKING

Langkah-langkah pencarian solusi pada pohon ruang status:

1. Solusi dicari dengan membentuk lintasan dari akar ke daun. Aturan pembentukan

yang dipakai adalah mengikuti metode pencarian mendalam (DFS). Simpul-simpul

yang sudah dilahirkan dinamakan simpul hidup (live node). Simpul hidup yang

sedang diperluas dinamakan simpul-E (Expand-node). Simpul dinomori dari atas ke

bawah sesuai dengan urutan kelahirannya.

2. Tiap kali simpul-E diperluas, lintasan yang dibangun olehnya bertambah panjang.

Jika lintasan yang sedang dibentuk tidak mengarah ke solusi maka simpul-E tersebut

“dibunuh” sehingga menjadi simpul mati (dead node). Fungsi yang digunakan untuk

membunuh simpul-E adalah dengan menerapkan fungsi pembatas (bounding

function). Simpul yang sudah mati tidak akan pernah diperluas lagi.

3. Jika pembentukan lintasan berakhir dengan simpul mati, maka proses pencarian

diteruskan dengan membangkitkan simpul anak yang lainnya. Bila tidak ada lagi

simpul anak yang dapat dibangkitkan, maka pencarian solusi dilanjutkan dengan

melakukan backtracking ke simpul hidup terdekat (simpul orang tua). Selanjutnya

simpul ini menjadi simpul-E yang baru. Lintasan baru dibangun kembali sampai

lintasan tersebut membentuk solusi.

4. Pencarian dihentikan bila kita telah menemukan solusi atau tidak ada simpul hidup

untuk backtracking atau simpul yang dapat di diperluas.

9. Algoritma Backtracking sebagai Pemecahan Solusi Permasalahan Puzzle Sudoku

Penulis menganalisa pencarian solusi untuk game sudoku ini dengan algoritma

backtracking karena beberapa alasan, antara lain:

1. Tidak memiliki informasi yang cukup untuk mengetahui sel mana yang harus

diisi terlebih dahulu.

2. Terdapat beberapa kemungkinan angka yang dapat diisikan ke dalam sel.

3. Setiap keputusan yang diambil mengarah pada sekumpulan kemungkinan baru.

4. Beberapa pilihan yang ada, kemungkinan merupakan solusi dari permainan ini.

Dengan adanya pilihan solusi yang banyak ini membuat kebanyakan orang memilih

untuk melakukan pilihan solusi secara brute force, yang artinya mencoba semua

kemungkinan yang ada dan dilakukan secara acak.

5

Page 8: ANALISIS PENYELESAIAN PUZZLE SUDOKU  DENGAN MENERAPKAN ALGORITMA BACKTRACKING

Diagram Blok Pencarian Solusi

10. Penerapan algoritma backtracking dalam teka-teki Sudoku

a. Pengorganisasian Solusi

1. Ruang Solusi (solution space)

Semua kemungkinan solusi dari persoalan dinyatakan sebagai

vektor X = (x1, x2, x3, x4, x5, x6, x7, x8, x9), xi Є Si

S1 = S2 = S3= S4= S5= S6= S7= S8= S9,

Si = {1,2,3,4,5,6,7,8,9}, xi = 1 ΙΙ 2 ΙΙ 3 ΙΙ 4 ΙΙ 5 ΙΙ 6 ΙΙ 7 ΙΙ 8 ΙΙ 9

Maka, ruang solusi = S1 x S2 x S3 x S4 x S5 x S6 x S7 x S8 x S9

2. Fungsi Pembangkit

T(k) yang membangkitkan nilai untuk x(k), yaitu bagian himpunan solusi.

3. Fungsi Pembatas (bounding space)

Baris dinyatakan sebagai B(x1, x2, x3, x4, x5, x6, x7, x8, x9)

Kolom dinyatakan sebagai K(x1, x2, x3, x4, x5, x6, x7, x8, x9)

Blok/ Subgrid dinyatakan sebagai G(x1, x2, x3, x4, x5, x6, x7, x8, x9)

6

Mencari sel yang masih kosong

Kandidat angka yang akan diisikan

Pengecekan kandidat angka terhadap angka yang terdapat pada baris, kolom dan blok

yang bersesuaian

Isi sel dengan solusi

Hasil pengecekan=solusi

Hasil pengecekan=himpunan

kemungkinan solusi

Proses diulang sampai sejumlah sel (i=1 to

81)

Page 9: ANALISIS PENYELESAIAN PUZZLE SUDOKU  DENGAN MENERAPKAN ALGORITMA BACKTRACKING

Fungsi pembatas =

b. FlowChart pencarian solusi untuk game Sudoku

7

Start

Sel yang sudah diketahui isinya

i = 0 to 80

i ≤ 81

Sel(i) = kosong

Cek bariseliminasi angka yang tidak mungkin =

himpunan solusi A

Cek kolomeliminasi angka yang tidak mungkin =

himpunan solusi B

Cek blok/ subgrideliminasi angka yang tidak mungkin =

himpunan solusi C

Himpunan solusi A ∩ Himpunan solusi B ∩ Himpunan solusi C = Himpunan

solusi sel(i)

Σ himpunan solusi =1

Cetak Solusi

Simpan himpunan solusi sel(i)

Ada himpunan

solusi yang bersesuaian

Cek himpunan solusi sel(i) dengan himpunan solusi sel yang bersesuaian =

himpunan solusi sel(i)

Y

Y

T

Y

Y

T

T

End

i = i +1

T

Flowchart pencarian solusi

Page 10: ANALISIS PENYELESAIAN PUZZLE SUDOKU  DENGAN MENERAPKAN ALGORITMA BACKTRACKING

c. Pohon Ruang Status (State Space Tree)

Pohon dinamis yang dibentuk selama pencarian solusi untuk persoalan puzzle

sudoku dengan ukuran 9x9 adalah:

Pohon Ruang Status persoalan puzzle sudoku

d. Algoritma Backtracking dalam VB

Penulisan kode program dilakukan dengan menggunakan fungsi rekursi.

8

114

13

12

3

2

15

16

17

18

X1=1

X1=2

X1=3

X1=4

X1=5

X1=6

X1=7

X1=8

X1=9

3

4

dst…

X2=1

X2=2

B

6

7

dst…

X3=1

X3=2

B

B

58

X2=3

X3=39

10

dst…

B

B

11

X4=1

X4=2

X4=3

B

Page 11: ANALISIS PENYELESAIAN PUZZLE SUDOKU  DENGAN MENERAPKAN ALGORITMA BACKTRACKING

Algoritma backtracking dalam Visual Basic 6.0 sebagai berikut:

Declaration GeneralDim N as integer ‘ ukuran papan sudokuDim tabel(1…N2)(1…N2) ‘ representasi papan sudoku

Prosedur UtamaPrivate Sub solusi()

Menyelesaikan teka-teki Sudoku pada papan n2 *n2, versi rekursifEnd sub

AlgoritmaIf (Selesai) then

Exit sub ‘Papan sudah selesai diisi dan program selesaiElse

Updatetabel() ‘Update sel tabel yang masih kosongIf(!ValidBaris) then

Backtracking()Else

‘jika baris valid maka periksa kolomIf(!ValidKolom) then

Backtracking()Else

‘jika kolom valid maka periksa subgridIf(!ValidSubgrid) then

Backtracking()Else

‘jika subgrid valid maka panggil prosedur rekursifSolusi()

End ifEnd if

End ifEnd if

11. Pengujian dan Analisa

Selain untuk mengetahui unjuk kerja sistem, pengujian juga bertujuan untuk

mengetahui kelebihan dan kekurangan dari sistem yang telah dibangun. Hasil-hasil

pengujian tersebut nantinya akan dianalisa agar dapat diketahui mengapa terjadi

kekurangan tersebut.

a. Pengujian kemampuan

No.Nomor Game

Penyelesaian Kebenaran

1 108 Berhasil Berhasil2 112 Berhasil Berhasil3 113 Berhasil Berhasil4 114 Berhasil Berhasil5 115 Berhasil Berhasil6 116 Berhasil Berhasil7 117 Berhasil Berhasil8 118 Berhasil Berhasil9 119 Berhasil Berhasil

10 120 Berhasil BerhasilData pengujian kemampuan

9

Page 12: ANALISIS PENYELESAIAN PUZZLE SUDOKU  DENGAN MENERAPKAN ALGORITMA BACKTRACKING

b. Pengujian kecepatan

Pengujian ke

Nomor Game

Waktu Penyelesaian

(mili detik)1 108 2,322 112 2,353 113 2,784 114 3,015 115 2,416 116 2,567 117 2,358 118 2,339 119 2,68

10 120 2,79Data pengujian kecepatan

c. Perbandingan dengan algoritma Brute Force

No. Nomor GameWaktu Penyelesaian

(mili detik)Backtracking Brute Force

1 108 2,32 2652 112 2,35 2363 113 2,78 2604 114 3,01 3005 115 2,41 2336 116 2,56 2457 117 2,35 2658 118 2,33 2319 119 2,68 246

10 120 2,79 273Data pengujian perbandingan dengan algoritma Brute Force

12. Kesimpulan Pengujian

Dari hasil pengujian diatas terlihat bahwa pada 10 (sepuluh) kali pengujian

kemampuan aplikasi untuk menemukan solusi dalam penyelesaian game sudoku telah

berhasil dilakukan dengan benar. Demikian juga pada pengujian kecepatan yang dilakukan

terlihat bahwa waktu yang dibutuhkan untuk menemukan solusi cukup singkat, hal ini

dikarenakan pada algoritma Backtracking pencarian solusi hanya pada angka yang mungkin

saja. Menurut paper yang diterbitkan oleh Felgenhauer dan Jarvis, terdapat

6.670.903.752.021.072.936.960 (6,67x1021) kemungkinan cara pengisian Sudoku yang

mungkin sesuai dengan aturan. Oleh karena itu cara backtracking ini lebih mangkus dan

sering dipakai untuk menyelesaikan Sudoku.

Pengujian perbandingan dilakukan dengan membandingkan algoritma backtracking

dengan algoritma brute force. Penyelesaian dengan metode brute force merupakan cara

10

Page 13: ANALISIS PENYELESAIAN PUZZLE SUDOKU  DENGAN MENERAPKAN ALGORITMA BACKTRACKING

yang paling naif yaitu dengan cara mencoba semua kemungkinan pengisian sel dengan

angka 1 sampai 9 tanpa memperdulikan angka-angka yang telah terisi serta tanpa mematuhi

aturan Sudoku. Jadi dengan algoritma ini semua kemungkinan dicoba termasuk kasus yang

menyalahi aturan Sudoku. Sehingga jumlah kemungkinan pengisian setiap sel sebanyak 981

buah (1,9 x 1077 buah) kemungkinan. Tentu saja cara ini kurang tepat karena kasus terburuk

(worst case) juga dicoba. Sehingga dapat disimpulkan bahwa teknik brute force sangat

lambat jika dibandingkan dengan teknik backtracking.

13. Kesimpulan

1. Permainan teka-teki Sudoku dapat diselesaikan dengan algoritma Backtracking.

Dengan menggunakan algoritma ini, teka-teki Sudoku dapat diselesaikan dan waktu

untuk menyelesaikan teka-teki ini lebih singkat dibandingkan dengan algoritma brute-

force.

2. Algoritma Backtracking sangat berguna untuk mencari solusi jalur kombinasi yang

diperlukan untuk mendapatkan solusi secara optimal.

3. Algoritma Backtracking mudah diimplementasikan dengan bahasa pemrograman

yang mendukung pemanggilan fungsi/ prosedur rekursif.

14. Saran

Adapun saran yang dapat diberikan demi pengembangan aplikasi penyelesaian

game sudoku ini adalah :

1. Jika ingin menyelesaikan kasus dengan banyak kemungkinan seperti game sudoku

beserta pengembangannya maka gunakanlah algoritma Backtracking.

2. Untuk mendapatkan hasil optimal, kombinasikan algoritma Backtracking ini dengan

algoritma-algoritma yang lain.

3. Untuk alokasi memori yang akan dipakai untuk menyimpan langkah-langkah

penyelesaian sebaiknya menggunakan dynamic array, karena sebagian besar

program yang menggunakan algoritma ini menghasilkan solusi yang tidak dapat

diprediksi.

11