Anda di halaman 1dari 5

Game Playing

Beberapa Karakteristik dan Batasan Game untuk Game Playing:


Dimainkan oleh 2 (dua) pemain: manusia dan komputer. Para pemain saling bergantian
melangkah.
Perfect Information Game: kedua pemain sama-sama memiliki akses pada informasi
yang lengkap tentang keadaan permainan, sehingga tidak ada informasi yang tertutup
bagi lawan mainnya.
No Determined by Chances. Tidak melibatkan faktor probabilitas, misalnya dengan
menggunakan dadu.
No Phsychological Factors. Tidak melibatkan faktor psikologi, seperti "gertakan"
(misalnya Poker)
No Oversight Errors. Smart Opponent. Lawan diasumsikan pintar juga, jadi jangan
mengharap lawan khilaf, sehingga terjadi salah langkah.
Beberapa contoh permainan yang biasa digunakan sebagai contoh kasus Game Playing pada AI:
1. Last One Loses
2. n-coins Grundy's Game
3. Slide-5 (cari, mulai dari: http://www.csm.astate.edu/~rossa/slide5.pas.html)
4. Tic-Tac-Toe
5. Checkers
6. Go
7. Nim
8. Othello
9. Chess
Dengan memperhatikan karakteristik dan batasan di atas, menjadi mungkin untuk implementasi
sejumlah permainan tradisional /sehari-hari seperti:
1. Dakon (Game Tradisi Jawa)
2. Halma
Metode iterative diterapkan oleh karena space pencarian solusi terlalu besar, dalam hal ini
pencarian akan dilakukan sebelum setiap langkah dilakukan untuk mendapatkan langkah berikutnya
yang terbaik.
Fungsi Evaluasi
digunakan untuk menilai "seberapa baik" konfigurasi suatu game.
Tidak seperti heuristic search yang fungsi evaluasinya adalah sebuah bilangan non-negatif,
sebagai estimasi biaya dari start-state menuju goal-state, pada game playing fungsi
evaluasinya memberikan estimasi tentang kualitas papan permainan dalam mengarahkan
seorang pemain untuk memenangkan permainan (static evaluation function). Disebut
juga dengan: Static Board Evaluator, f(n).
Pada setiap branch nodes:
Jika f(n) bilangan positif besar, artinya konfigurasi papan dengan pemilihan node n
"baik untuk saya dan buruk untukmu"
#1/5
(C) 2005, gunawan - www.hansmichael.com
Jika f(n) bilangan negatif besar, artinya konfigurasi papan dengan pemilihan node n
"buruk untuk saya dan baik untukmu"
Jika f(n) dekat dengan 0, artinya papan dalam keadaan netral
Pada leaf nodes:
Jika f(n) = + "tak terhingga", artinya kondisi saya memenangkan pertandingan.
Jika f(n) = - "tak terhingga", artinya kondisi kamu memenangkan pertandingan.
Static Board Evaluator tidak selalu mudah untuk ditulis, misalnya untuk permainan catur.
Banyak fungsi evaluasi game playing yang dispesifikasikan sebagai "jumlah berbobot
dari featuresnya": (w1*feature1) + (w2*feature2) + (w3*feature3) + ... (wn*featuren).
Sebagai contoh pada Deep Blue (program catur yang "imbang" saat menghadapi Gary
Kasparov) memiliki tidak kurang dari 6000 features dalam fungsi evaluasinya.
Contoh static evaluation function untuk Tic-Tac-Toe: f(n) = [jumlah 3-length yang
terbuka untuk saya] - [jumlah 3-length yang terbuka untukmu]
Strategi Minimax
Minimax adalah sebuah prosedur pencarian yang melihat ke depan -- memperhatikan apa yang
akan terjadi kemudian -- yang digunakan untuk memilih langkah berikutnya. Asumsikan bahwa kita
telah memiliki sebuah Static Board Evaluator yang akan mengembalikan sebuah bilangan yang
menunjukkan "seberapa baiknya" sebuah konfigurasi papan.
A
/ \
B C
/ \ / \
D E F G
4 7 2 8
Anggaplah static board evaluator untuk konfigurasi papan D, E, F, G, masing-masing adalah 4, 7, 2,
dan 8. Nilai konfigurasi B adalah 4 (karena jika saya memilih B, lawan akan memilih D -- langkah
terbaik untuk dia). Hal yang sama akan terjadi bila saya melangkah ke C yang nilai konfigurasinya 2.
Dengan demikian nilai konfigurasi A adalah 4 (artinya melangkah ke konfigurasi B=4 lebih baik bagi
saya dibanding C=2).
FUNCTION Minimax(N)
1. IF N adalah sebuah terminal node dari game tree THEN
RETURN nilai yang dihitung oleh static board evaluator untuk node N
ELSE
Expand successors N1, N2, N3, ...... , Nm dari node N
IF N berada pada level meminimalkan THEN
RETURN min(Minimax(N1), Minimax(N2), ...... , Minimax(Nm) )
ELSE
RETURN max(Minimax(N1), Minimax(N2), ...... , Minimax(Nm) )
2. RETURN
#2/5
(C) 2005, gunawan - www.hansmichael.com
-Pruning (-CutOff)
Cara untuk meningkatkan efisiensi fungsi minimax standard.
Metode tambahan ini ditambahkan pada function minimax untuk mereduksi jumlah node yang
diexpand. Kepada function minimax ditambahkan sepasang nilai, dan .
Penelusuran pada game tree dilakukan secara depth-first order (seperti DFS).
Nilai dari node n:
Diberi harga awal dengan:
nilai static-board evaluator dari node n, jika n adalah terminal node.
-tak terhingga, pada keadaan lainnya (bukan leaf-node).
Perubahan nilai :
pada level memaksimalkan, nilai akan diisi dengan nilai terbesar dari semua successor
yang diexpand, dan
pada level meminimalkan, nilai akan diisi dengan nilai dari predecessornya.
Nilai dari node n:
Diberi harga awal dengan:
nilai static-board evaluator dari node n, jika n adalah terminal node.
+tak terhingga, pada keadaan lainnya (bukan leaf-node).
Perubahan nilai :
pada level meminimalkan, nilai akan diisi dengan nilai terkecil dari semua successor
yang diexpand, dan
pada level memaksimalkan, nilai akan diisi dengan nilai dari predecessornya.
Pengaturan nilai dan seperti itu akan menjamin:
menghasilkan nilai yang sama seperti yang dihasilkan fungsi minimax standard untuk root
node.
nilai static-board evaluator dari sebuah node akan selalu tidak lebih kecil dari nilai dan
tidak pernah lebih besar dari node .
Selama algoritma bekerja, nilai dan dari sebuah node mungkin berubah, tetapi nilai
tak pernah berkurang (monotonically non-decreasing), dan nilai tak pernah
bertambah (monotonically non-increasing).
Nilai sebuah node tidak pernah kurang dari nilai predecessornya
Nilai sebuah node tidak pernah lebih besar dari nilai predecessornya
Untuk node yang dikunjung terakhir:
nilainya = jika node ini berada pada level memaksimalkan
nilainya = jika node ini berada pada level meminimalkan
A
/ \
B C
/ \ / \
D E F G
4 7 2 8
#3/5
(C) 2005, gunawan - www.hansmichael.com
Misalnya pada contoh game tree untuk minimax di atas, fungsi minimax telah dilakukan secara
lengkap untuk node B, jadi kita akan mulai menerapkan fungsi yang sama untuk C. Pertama kita
melihat F dan mendapatkan nilainya = 2. Dengan demikian saat ini sesungguhnya tidak perlu untuk
memeriksa node G, karena apapun nilainya tidak akan mengubah keputusan saya untuk memilih
langkah B. Perhatikan bahwa saat ini current maximum adalah 4:
Jika G>2, misalnya G=8 seperti pada contoh di atas, maka lawan akan memilih F jika
saya (komputer) memilih C. Dalam hal ini max(B,C) = max(min(4,7),min(2,8)) =
max(4,2), jadi saya memilih B=4.
Jika G<2, misalnya G=1, maka lawan akan memilih G jika saya memilih C. Dalam hal ini
max(B,C) = max(min(4,7),min(2,1)) = max(4,1), jadi saya tetap memilih B=4.
Kenyataan ini selanjutnya dapat digunakan untuk memangkas (pruning) seluruh game subtree di
bawah node G.
A nilai B = 4
/ \ nilai C dipastikan <= 2
B C jadi nilai A = 4
/ \ / \
D E F G
4 7 2 (dipangkas)
Pada contoh di atas terjadi pemangkasan pada level meminimalkan. Hal yang sama juga terjadi
pada level memaksimalkan.
Efektivitas -Pruning
Worst-Case:
No Pruning (tidak terjadi pemangkasan branch node).
Menguji b^d terminal node, dimana setiap node memiliki b children, dan pencarian
dilakukan sampai d-ply.
Best-Case:
Menguji hanya (2b)^(d/2) terminal node
Biasanya memungkinkan pencarian sampai 2 kali lebih dalam (jumlah ply-nya) dari
yang dilakukan minimax standard, sehingga kepandaiannya meningkat.
Terjadi saat langkah terbaik dari seorang pemain adalah leftmost alternative
(alternatif langkah yang paling kiri) atau child-node yang diexpand pertama kali.
Jadi: pada level memaksimalkan (node-node MAX) child-node dengan nilai yang
terbesar diexpand terlebih dahulu; sedang pada level meminimalkan (node-node
MIN) sebaliknya, atau child-node dengan nilai yang terkecil diexpand terlebih
dahulu.
Pada program catur Deep-Blue, misalnya, secara empiris diketahui bahwa
-Pruning menyebabkan rata-rata branching factor pada setiap nodenya menjadi
hanya sekitar 6 child-node dari yang seharusnya sekitar 35 sampai 40 child-node
(Catatan: Oleh sejumlah penulis disebutkan pada angka 38).
#4/5
(C) 2005, gunawan - www.hansmichael.com
FUNCTION Minimax- (N, A, B)
1. <--- A
<--- B
2. IF N adalah sebuah terminal node dari game tree THEN
RETURN nilai yang dihitung oleh static board evaluator untuk node N
ELSE
IF N berada pada level meminimalkan THEN
REPEAT FOR i = 1, 2, 3, ...... , m
Expand successor ke-i, atau Ni
Value <--- Minimax- (Ni, , )
<--- min (, Value)
IF <= THEN EXIT LOOP
RETURN
ELSE {N berada pada level memaksimalkan}
REPEAT FOR i = 1, 2, 3, ...... , m
Expand successor ke-i, atau Ni
Value <--- Minimax- (Ni, , )
<--- max (, Value)
IF >= THEN EXIT LOOP
RETURN
3. RETURN
Catatan: Pada beberapa permainan diimplementasikan dengan sebuah procedure, sehingga output
valuenya disimpan pada salah satu parameternya. Lihat source code slide5.pas.
Contoh Penerapan Fungsi Minimax- untuk Game Tree 3-Ply
Berikut ini adalah sebuah game tree dengan sebuah b-cutoff pada node F dan a-cutoff pada node C
dan D. Pada kasus ini dipangkas 10 node (O, H, R, S, I, T, U, K, Y, Z) dari total 26 node yang
digenerate pada fungsi minimax standard.
#5/5
(C) 2005, gunawan - www.hansmichael.com