• Tidak ada hasil yang ditemukan

Pengaplikasian Pohon dalam Algoritma Sebuah Game Catur

N/A
N/A
Protected

Academic year: 2021

Membagikan "Pengaplikasian Pohon dalam Algoritma Sebuah Game Catur"

Copied!
5
0
0

Teks penuh

(1)

Pengaplikasian Pohon dalam Algoritma Sebuah Game Catur

Adrian Edbert Luman / 13507057

1) Jurusan Teknik Informatika ITB, Bandung 40116, email: gabunakadree@yahoo.com

Abstract –Makalah ini menjelaskan mengenai aplikasi pohon n-ary dalam membuat algoritma suatu game catur. Penggunaan pohon terutama terlihat jelas melalui pembukaan dalam sebuah permainan catur di mana gerakan yang legal masih belum terlalu banyak.

Kata Kunci: pembukaan permainan catur, chess tree

search, minimax dan negamax, alpha-beta search, principal variation search.

1. PENDAHULUAN

Tree search adalah salah satu algoritma inti dalam banyak program permainan game. Tree search melihat semua kemungkinan yang ada dalam permainan sebagai pohon, dengan langkah legal dalam permainan sebagai akar dari pohon-pohon tersebut. Daun dari pohon-pohon yang ada merupakan posisi terakhir dari permainan, di mana hasil dari permainan sudah dapat diketahui. Masalah yang dihadapi dalam menyusun sebuah algoritma permainan adalah ukuran dari pohon permainan ini sangatlah besar, dapat dirumuskan sebagai W^D, di mana W adalah rata-rata jumlah langkah yang legal dalam satu posisi, dan D adalah kedalaman dari sebuah pohon. Melakukan pencarian terhadap keseluruhan pohon adalah mustahil, terutama karena keterbatasan waktu yang ada, bahkan untuk komputer tercepat sekalipun. Maka dari itu penggunaan algoritma yang tepat untuk melakukan pencarian terhadap pohon didasarkan pada menghindari pencarian terhadap seluruh pohon.

Berbagai algoritma pencarian berikut digambarkan menggunakan pengantar bahasa C. Variable serta fungsi yang ada memiliki arti sebagai berrikut.

Tabel 1. Istilah Dalam Makalah Ini

1.1. Chess Tree Search

Dalam sebuah permainan catur menentukan langkah terbaik dapat dilihat sebagai suatu proses searching dalam sebuah pohon. Pada akar pohon kita mencari posisi successor terbaik untuk dijalankan oleh pemain pada tingkat selanjutnya kita mencari posisi successor terbaik berdasarkan dari posisi musuh, dst.

Gambar 1: Contoh dari sebuah search tree

Pencarian dari keseluruhan pohon akan menghasilkan W^D kali perhitungan seperti sudah dijelaskan sebelumnya. Hal ini tentunya mustahil mengingat banyaknya langkah yang mungkin dalam suatu permainan catur (semakin banyak langkah yang mungkin dalam permainan mengakibatkan menignkatnya nilai dari W dan D).

Istilah Arti

pos Posisi dalam permainan catur depth Tingkatan dari pohon yang

dicari

Evaluate Sebuah fungsi untuk menentukan nilai dari sebuah posisi. Rentang hasil antara – INFINTIY sampai +INFINTIY best Nilai terbaik yang didapat pada

saat mencari tingkat selanjutnya dalam pohon

Successors Sebuah fungsi yang menentukan semua kemungkinan langkah yang legal dalam satu langkah succ Himpunan kemungkinan

langkah yang mungkin dari posisi awal dalam satu langkah

(2)

1.2. Solusi

Solusi untuk permasalahan chess search tree beragam. Salah satunya adalah algoritma minmax negamax di mana semua kemungkinan langkah dihitung kemungkinannya. Selain itu juga ada alpha-beta search di mana nilai dari suatu posisi hanya dihitung apabila nilai dari posisi tersebut lebih baik atau lebih buruk dari posisi yang didapat sebelumnya. Juga principal variation search yang merupakan pengembangan dari alpha-beta search.

Gambar 2: Contoh dari sebuah program solusi

2. Pembahasan Algoritma 2.1. MiniMax dan NegaMax

NegaMax adalah struktur fundamental di mana menjadi dasar bagi setiap algoritma pencarian terhadap chess tree. NegaMax mengimplementasikan pemikiran bahwa semakin buruk langkah yang dilakukan oleh lawan artinya langkah yang kita lakukan semakin baik.

Mengimplementasikan pemikiran ini sebenarnya mudah. Pemikiran ini menggunakan dasar bahwa catur adalah sebuah permainan symmetrical, oleh sebab itu maka fungsi analisis haruslah mengeluarkan nilai yang simetris. Jadi pada setiap posisi nilai dari langkah yang dilakukan oleh putih adalah negasi dari langkah yang dilakukan oleh hitam, atau bisa dibilang bahwa jumlah dari nilai keduanya adalah 0.

Apabila putih unggul satu pion maka sudah jelas bahwa hitam tertinggal sebanyak jumlah yang sama. Prinsip yang sama dapat diperluas ke dalam keunggulan posisi, misalnya putih memiliki dua benteng dalam satu garis yang sama maka putih mendapatkan poin tambahan, pada saat yang sama posisi hitam menjadi lebih lemah dengan jumlah yang sama karena hal ini.

Dasar dari algoritma ini adalah bahwa chess tree search merupakan pergantian antara maksimalisasi dan minimalisasi nilai dari posisi pada pohon; biasa disebut dengan proses minimax. Untuk membedakan posisi antara pemain dengan lawannya, nilai dari suatu posisi selalu dievaluasi dari sudut pandang pemain yang akan berjalan, hal ini dilakukan dengan

melakukan negasi terhadap nilai yang dilihat oleh lawan; ini disebut dengan proses negamax. Proses ini bila digambarkan dengan pseudo code bahasa yang mirip dengan C menjadi seperti berikut.

int NegaMax (pos, depth) {

if (depth == 0) return Evaluate(pos);

best = -INFINITY;

succ = Successors(pos); while (not Empty(succ)) {

pos = RemoveOne(succ); value = -NegaMax(pos, depth-1);

if (value > best) best = value;

}

return best; }

Jumlah posisi yang harus dihitung menggunakan algoritma ini adalah W^D, di mana W adalah lebar dari pohonnya (jumlah rata-rata langkah yang mungkin pada setiap posisi) dan D adalah kedalaman pohonnya (^ menunjukkan pengeksponensialan). Ini sangatlah tidak efisien dan akan menghambat bahkan super computer sekaligus untuk mencapai tingkat kedalaman yang tinggi.

2.2. Alpha-Beta Search

Alpha-Beta search adalah suatu teknik untuk mengurangi secara besar-besaran ukuran dari pohon pencarian. Dengan menggunakan algoritma NegaMax kita melakukan pencarian semua jawaban terhadap semua langkah dalama permainan. Rata-rata

permainan catur memiliki 30 langkah legal, asumsikan program menganalisis 50.000 langkah tiap detiknya. Mari kita lihat seberapa dalam pencarian dapat dilakukan.

Tabel 2.Estimasi waktu pencarian menggunakan NegaMax

depth Jumlah posisi

Waktu

pencarian

2

900

0,018 s

3

27.000

0,54 s

4

810.000

16,2 s

5

24.300.000

8 menit

6

729.000.000

4 jam

7

21.870.000.000 5 hari

Dapat dilihat seberapa besar pohon permainan ini

(3)

berkembang dengan cepat, bahkan dengan asumsi fungsi penganalisis yang sangat cepat. Dengan algoritma yang ada pencarian tentu tak dapat

dilakukan. Ukuran dari pohon pencarian tersebut harus dipotong. Di sinilah peranan dari algoritma alpha-beta.

Algoritma alpha-beta relatif tidak rumit, namun membutuhkan pemikiran mendalam sebelum terbiasa dengan algoritma semacam ini. Sebagai contoh bayangkan skenario sebagai berikut :

Program catur anda sibuk mencari semua

kemungkinan langkah pada tingkat teratas. Sementara ini program tersebut berhasil mencari 6 langkah pertama, nilai terbaik untuk sementara ini adalah 15 poin. Program tersebut mulai mencari langkah ketujuh dan menghitung kemungkinan jawaban dari lawan. Ingatlah bahwa nilai pemain dikurangi oleh nilai terbaik musuh. Program menghitung semua kemungkinan jawaban lawan sampai pada satu langkah berikut, menghasilkan nilai sebagai berikut;

-20, -22, -15, -16, -11, -18, -20, -30, -70, -75

Pada saat ini nilai terbaik adalah -11, di mana program menilai langkah yang dilakukannya sebagai – (-11) = 11. Nilai ini lebih buruk dibandingkan dengan langkah terbaik sebelumnya (15) maka langkah ini diacuhkan. Namun program sudah menghabiskan banyak waktu mencari langkah ke-6 sampai dengan langkah ke-10 dari lawan. Pada saat salah satu langkah dari musuh bernilai -11, kita dapat mengetahui bahwa langkah kita tidak dapat menandingi langkah terbaik sebelumnya. Apapun nilai dari langkah seterusnya, langkah terbaik pastilah menghasilkan paling tidak -11. Yang berarti langkah terbaik kita hanya akan bernilai 11 yang oleh karena itu harus diacuhkan. Jadi kita harusnya keluar dari pencarian pada saat nilai -11 didapatkan yang mana akan menghemat waktu pencarian.

Pencarian Alpha-Beta adalah salah satu penemuan paling pertama dalam mengurangi jumlah posisi yang harus dicari sehingga meningkatkan tingkat

kedalaman dari pencarian yang dapat dicapai dalam suatu permainan. Idenya adalah dalam suatu bagian besar dari pohon kita tidak mencari nilai eksak dari suatu posisi, tapi hanya tertarik apabila lebih baik atau lebih buruk daripada apa yang kita temukan

sebelumnya. Hanya nilai dari suatu posisi yang memenuhi ketentuan utama yang harus ditentukan nilainya secara pasti (ketentuan utama mencakup pergantian antara langkah terbaik pemain dan langkah terbaik lawan dari suatu akar hingga kedalaman dari pohon).

Prosedur pencarian Alpha-Beta memiliki 2 argumen tambahan yang mengindikasi batasan di mana prosedur tertarik untuk menghitung nilai eksak dari sebuah posisi:

int AlphaBeta (pos, depth, alpha, beta) { if (depth == 0) return Evaluate(pos); best = -INFINITY; succ = Successors(pos);

while (not Empty(succ) && best < beta)

{

pos = RemoveOne(succ); if (best > alpha) alpha = best;

value = -AlphaBeta(pos, depth-1, -beta, -alpha);

if (value > best) best = value;

}

return best; }

Keuntungan mengguunakan Alpha-Beta akan didapat ketika prosedur keluar lebih cepat dari perulangan while; sebuah nilai terbaik yang sama atau melebihi beta disebut dengan cutoff. Cutoff ini sangat aman karena artinya dahan dari pohon ini lebih buruk dibandingkan dengan posisi yang didapat sebelumnya. Keuntungan paling besar didapat ketika pada setiap tingkat dari pohon posisi successor terbaik akan dicari paling pertama, bisa karena posisi ini adalah bagian dari ketentuan utama (yang ingin dikembangkan sedini mungkin) atau menyebabkan terjadinya cutoff sedini mungkin.

Dalam Kondisi optimal Alpha-Beta tetap harus melakukan pencarian sebanyak W^((D+1)/2 + W^(D/2) – 1 posisi. Jumlah ini jauh lebih sedikit daripasa MiniMax namun tetap eksponensial. Alpha-Beta mampu mencapai kedalaman 2 kali lipat dalam tempo waktu yang sama.

Versi Alpha-Beta di atas juga dikenal dengan sebutan fail-soft alpha-beta. Versi tersebut dapat

mengembalikan nilai di luar alpha . . . beta, yang dapat digunakan sebagai batas atas atau batas bawah apabila pencarian ulang harus dilakukan.

2.3. Principal Variation Search

Principal variation search adalah sebuah variasi dari alpha-beta di mana semua node diluar ketentuan dicari dengan minimal window beta = alpha + 1. Idenya adalah dengan semua langkah di luar ketentuan utama akan lebih buruk apabila urutan langkah yang dilakukan tidak salah; hal ini dibuktikan dengan pencarian minimal window bernilai rendah. Seandainya urutan langkah tidak sempurna, ada kemungkinan keluranya nilai yang tinggi, pada kasus ini maka pencarian alpha-beta secara keseluruhan harus dilakukan. Ekspektasi yang diambil adalah

(4)

bahwa keuntungan yang didapat dari pencarian minimal window lebih besar dibanding kerugian setiap kali terjadi kasus pencarian ulang tersebut.

int PrincipalVariation (pos, depth, alpha, beta) { if (depth == 0) return Evaluate(pos); succ = Successors(pos); pos = RemoveOne(succ); best = -PrincipalVariation(pos, depth-1, -beta, -alpha);

while (not Empty(succ) && best < beta)

{

pos = RemoveOne(succ); if (best > alpha) alpha = best;

value =

PrincipalVariation(pos, depth1, -alpha-1, -alpha);

if (value > alpha && value < beta)

best =

PrincipalVariation(pos, depth1, -beta, -value);

else if (value > best) best = value; }

return best; }

2.4. Quiescence Search

Masalah yang muncul apabila secara paksa menghentikan pencarian pada kedalamana tertentu disebut sebagai ‘horizon effect’. Misalkan program baru saja menangkap sebuah pion pada kedalaman 0, kemudian menjalankan langkah tersebut dengan asumsi itulah langkah dengan nilai terbaik. Namun, apabila program mencari lebih dalam 1 tingkat maka terlihat bahwa lawan bisa menangkap ratu pemain.

Untuk memecahkan masalah ini ada sebuah metode yang bernama ‘quiescence search’ yang mengaitkan dan menguji semua non-quiescence atau langkah ‘kasar’ sampai keadaan terkendali. Hal ini membuat program mampu mendeteksi langkah penangkapan panjang dan menghitung kelayakan dari langkah tersebut.

Ada beberapa masalah dengan metode ini yang harus dipecahkan. Metode ini dapat menyebabkan terjadinya ledakan ukuran dari pohon permainan bila digunakan sembarangan. Ada 3 tingkatan quiescence search, ketiganya memiliki batasan yang berbeda untuk memecahkan masalah ini.

2.4.1. Full Width Search

Tidak terlalu jauh berbeda dibandingkan pencarian normal pada kedalaman > 0, memperhitungkan semua

kemungkinan langkah dan mencari langkah terbaik. Tentu saja pencarian yang dilakukan lamban sehingga hanya digunakan pada situasi tertentu saja. Biasanya ini tidak dilakukan sama sekali, tapi dengan penggunaan quiescence width extension terkadang pencarian ini muncul ke permukaan. Biasanya hanya digunakan pada keadaan yang benar-benar berbahaya di mana pihak yang melangkah dalam kondisi ter-check dan mungkin kalah karena hal ini.

2.4.2. Reduced Width Search

Hanya dikeluarkan pada tingkat kedalaman yang rendah tergantung seberapa berbahaya suatu posisi. Biasanya hanya sampai tingkatan 0 atau 1, tapi terkadang sampai 2 atau 3 tingkatan di bawah node (depth = 0). Kondisi di mana pencarian sampai lebih dari 2 tingkatan biasanya terjadi apabila ada langkah yang dapat mengubah niai secara drastis, seperti penangkapan perwira, check, dan promosi pion.

2.4.2. Capture Search

Sesuai dengan namanya, capture search

melakukan pencarian hanya pada node yang

melakukan langkah penangkapan.

3.Pembukaan dalam Catur

Dalam permainan catur terdapat himpunan langkah-langkah pada awal permainan yang sudah terdefinisi secara pasti. Masuknya perhitungan terhadap pembukaan dalam permainan catur ke dalam algoritma pencarian dapat menyederhanakan algoritma, sebab setiap langkah yang dilakukan program dalam tahap ini tidak perlu dihitung nilainya selama masih berada dalam himpunan database dari pembukaan permainan.

3.1. Contoh dari Pohon Pembukaan dalam Catur

Gambar 3: Salah satu pohon pembukaan

Dalam pohon pembukaan tersebut pada tingkat pertama ada beberapa himpunan kemungkinan langkah dari putih dan hitam yang ada. Setiap langkah

(5)

tersebut memiliki beberapa himpunan langkah selanjutnya untuk setiap himpunan langkah yang tidak digunakan program tidak akan menghitung nilai dari langkah-langkah tersebut. Program akan mulai menghitung hanya pada tahap permainan tengah yaitu pada saat di mana database dari pembukaan sudah tidak melingkupi kemungkinan langkah yang ada. Pengaplikasian pohon ini akan membantu program untuk menghilangkan waktu yang diperlukan apabila program mencari semua kemungkinan langkah yang ada dalam beberapa langkah pertama.

Gambar 4: Salah satu pohon pembukaan

4.Kesimpulan

Permainan catur sudah ada sejak dulu. Apabila permainan catur diibaratkan sebuah pohon dengan posisi pertama sebagai akar yang paling atas dan setiap kemungkinan langkah sebagai dahannya maka akan didapatkan sebuah pohon yang sangat besar. Oleh karena itu penggunaan algoritma pencarian yang benar sangatlah penting untuk efisiensi dalam pembuatan sebuah program permainan catur.

Algoritma pencarian dalam permainan catur merupakan salah satu dasar dari semakin

berkembangnya permainan catur di dunia. Beberapa algoritma dapat melakukan penghitungan untuk setiap posisi dengan lebih baik dari algoritma yang lain. Diimplementasikannya alpha-beta search ke dalam NegaMax search merupakan salah satu langkah untuk mencoba menyelesaikan masalah yang terdapat dalam efisiensi terhadap permainan catur.

Database pembukaan dalam permainan catur juga dapat membantu meringankan beban yang harus dilakukan program untuk mencari langkah terbaik dalam beberapa langkah pertama.

DAFTAR REFERENSI

[1]Chess Tree Search

http://www.cs.biu.ac.il/~davoudo/intro.html Tanggal akses : 4 Januari 2009 pukul 13:00

[2]Computer Chess Programming Theory http://www.frayn.net/beowulf/theory.html Tanggal akses : 4 Januari 2009 pukul 13:00

[3]Wikipedia

http://en.wikipedia.org/wiki/Chess_opening Tanggal akses : 4 Januari 2009 pukul 13:00

[4]Artificial Intelligence and Chess http://artificialintelligence.ai-depot.com/Essay/DeepBlue-AI.html Tanggal akses : 4 Januari 2009 pukul 13:00

[5]Wikipedia

http://en.wikipedia.org/wiki/Chess_programming Tanggal akses : 5 Januari 2009 pukul 20:00

Gambar

Tabel 1. Istilah Dalam Makalah Ini
Gambar 2: Contoh dari sebuah program solusi  2. Pembahasan Algoritma
Gambar 3: Salah satu pohon pembukaan
Gambar 4: Salah satu pohon pembukaan

Referensi

Dokumen terkait

Algoritma Prim berorientasi pada simpul di dalam graf. Algoritma ini selalu membentuk pohon merentang minimum dalam setiap langkahnya. Inti dari algoritma ini

Berdasarkan rumusan masalah diatas maka tujuan pembuatan Perangkat Lunak Pencarian Lokasi Puskesmas di Kabupaten Tegal Berbasis Mobile adalah untuk membuat aplikasi

Berdasarkan prinsip dominasi dari teori keputusan, apabila semua aspek dari state permainan catur sama baiknya dengan sebuah state permainan catur yang lainnya

Algoritma Prim adalah sebuah algoritma dalam teori graf yang bisa mendapatkan pohon merentang minimum dari sebuah graf yang diberikan.. Algoritma ini ditemukan pada tahun 1930 oleh

Algoritma C4.5 merupakan algoritma yang digunakan untuk membangun sebuah pohon keputusan (decision tree) dari data.Algoritma C4.5 merupakan pengembangan

Algoritma alpha beta pruning digunakan dengan tujuan untuk menentukan langkah terbaik pada permainan othello ini serta memangkas pohon permainan agar resource yang

Melihat adanya keterkaitan antara dana perimbangan,pertumbuhan ekonomi,disparitas pendapatan antar daerah dan kesejahteraan masyarakat sesuai dengan apa yang

Sudah satu minggu kita masuk dalam gerakan DOA PUASA MASSAL 50 HARI yang diadakan di gereja kita. Tuhan memberi tema untuk DOA PUASA MASSAL kita kali ini adalah THE POWER OF