ARTIFICIAL INTELLIGENCE PADA GAME CATUR JAWA
DENGAN MENGGUNAKAN METODE ALPHA-BETA
Ayub Firsoni Dance – NRP : 7406.030.057
Program Study Teknik Informatika, Politeknik Elektronika Negeri Surabaya,
Institute Teknologi Sepuluh November, Surabaya
Email : ayub_dance@yahoo.com
Abstrak
Algoritma Alpha Beta merupakan algoritma yg sangat terkenal dalam pengambilan
keputusan khususnya pada game. Dimana dengan algoritma ini, komputer bisa mengambil
keputusan terbaik dalam menangani permasalahan yang ada.
Masalah yang akan diangkat disini adalah penggunaan Artificial Intelligence pada
game Catur Jawa. Dengan menggunakan Algoritma Alpha Beta, Pohon Solusi akan dibuat di
awal permainan, sehingga komputer akan memilih langkah yang akan menuntunnya ke hasil
akhir berupa kemenangan atau setidaknya seri.
Kata Kunci : Algoritma Alpha Beta, Artificial Intelligence, Game Catur Jawa, Pohon Solusi
Abstract
Alpha Beta algorithm is a very well-known algorithm in decision-making, especially
in games. Where with this algorithm, the computer can take the best decisions in dealing with
existing problems. Issues to be raised here is the use of Artificial Intelligence in Chess Java
game. By using Alpha Beta Algorithm, Tree Solutions will be made early in the game, so the
computer will select the steps that would lead her to the end result of victory or at least a
series.
Keywords: Alpha Beta Algorithm, Artificial Intelligence, Java Chess Game, Tree Solutions
1.
Pendahuluan
Istilah kecerdasan buatan atau AI
adalah suatu tiruan atau buatan yang bisa
berpikir secara cerdas.Maksud dari kata
“cerdas” disini adalah kepandaian dan
ketajaman dalam berpikir, seperti halnya
otak manusia dalam menyelesaikan suatu
masalah.Kecerdasan buatan ini dapat
diterapkan atau diimplementasikan ke
dalam berbagai bentuk aplikasi.
Bentuk implementasi yang paling
mudah untuk diukur tingkat keberhasilan
(kecerdasan buatan) dan cukup digemari
oleh sebagian besar publik yaitu pada
games
atau
permainan.
Salah
satu
algoritma yang dapat diimplementsaikan
sebagai kecerdasan buatan dalam sebuah
permainan adalah algoritma alpha-beta.
Lebih khusus lagi, algoritma alpha-beta
sangat baik diterapkan pada permainan
yang melibatkan 2 orang dan bermain
bergantian, misalnya pada permainan
catur, othello, backgammon, catur jawa,
dan
lain
sebagainya.
Metode
pendekatannya pun hampir sama dengan
minimax, namun ada satu hal yang
membuatnya mampu memangkas biaya
kalkulasi yang cukup besar.
Bila algoritma minimax lebih
menggunakan algoritma BFS sebagai
metode pembangkitan node, algoritma
alpha-beta
lebih
condong
ke
arah
algoritma branch bound. Ide utama dari
algoritma ini adalah jika suatu langkah
sudah terbukti cukup buruk, maka tidak
perlu membuang waktu untuk sesuatu
yang tidak mengubah hasil akhir.
Adapun beberapa Karakteristik dan
Batasan Game untuk Game Playing, yaitu:
1.
Dimainkan oleh 2 (dua) pemain:
manusia
dan
komputer.
Para
pemain
saling
bergantian
melangkah.
2.
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.
3.
No Determined by Chances. Tidak
melibatkan
faktor
probabilitas,
misalnya dengan menggunakan
dadu.
4.
No Phsychological Factors. Tidak
melibatkan faktor psikologi, seperti
"gertakan" (misalnya Poker)
5.
No
Oversight
Errors.
Smart
Opponent.
Lawan
diasumsikan
pintar juga, jadi jangan mengharap
lawan khilaf, sehingga terjadi salah
langkah.
Game Catur Jawa ini adalah salah
satu bentuk implementasi dari kecerdasan
buatan.Dengan
dibantu
menggunakan
metode Alpha-Beta, game Catur Jawa ini
bisa menjadi sebuah contoh aplikasi untuk
dapat mengukur sejauh mana kemampuan
dari
kecerdasan
buatan
yang
telah
dibuat.Dan
dalam
pengembangannya,
pembuatan gamenya sendiri menggunakan
bahasa
pemrograman
java.Hal
ini
dikarenakan, dapat dijalankan di beberapa
platform / sistem operasi computer.
2.
Artificial Intelligence
Kecerdasan buatan (artificial
intelligence) merupakan inovasi baru di
bidang ilmu pengetahuan. Mulai ada sejak
muncul komputer modern, yakni pada
1940 dan 1950. Ini kemampuan mesin
elektronika baru menyimpan sejumlah
besar info, juga memproses dengan
kecepatan
sangat
tinggi
menandingi
kemampuan manusia.
Pentingnya kecerdasan buatan
menjadi nyata bagi negara-negara yang
berperan sejak tahun 1970. Para
pemimpin negara yang mengakui
potensialnya
kecerdasan
buatan
mengharap mendapat persetujuan jangka
panjang untuk sumber-sumber yang
memerlukan dana intensif. Jepang adalah
yang pertama kali melakukan itu. Negara
ini mengembangkan program yang
sangat berambisi dalam penelitian
kecerdasan buatan.
3.
Catur Jawa
Permainan
catur
jawa
adalah
permainan tradisional yang sudak lama
digunakan oleh orang-orang indonesia.
Permainan
yang
sederhana
yang
dimainkan oleh 2 orang secara bergantian.
Dengan hanya berbekal kertas dan pensil,
lalu mereka memainkan permainan ini
dengan menggunakan 2 simbol, yaitu
tanda X dan 0.
Pada kesempatan ini, pemain
bukan bermain dengan pemain lain, tetapi
akan bermain dengan komputer. Komputer
dengan kemampuan berpikir yang disebut
kecerdasan buatan akan dibuat untuk
menandingi kemampuan berpikir manusia.
4.
Implementasi Alpha beta pada catur
jawa
Untuk
membuat
atau
mengimplementasikan metode alpha beta
pada permainan catur jawa, maka minimal
ada 4 komponen/fungsi yang diperlukan
untuk membuat game ini.
a.
Tempat untuk proses game yang
terdiri dari papan catur dan
tombol-tombol, atau secara keseluruhan
bisa dikatakan interface.
b.
Tempat dimana proses alpha beta
berlangsung
c.
Tempat dimana proses pencarian
node berlangsung
d.
Tempat
pengecekan
untuk
menentukan siapa yang menang
Berikut adalah contoh sederhana dari
implementasinya :
Pembuatan button-button sebagai papan
dimana game dimainkan :
public final void new_game() {
board_easy.setBackground(Color.yellow); board_easy.setLayout(new GridLayout(3, 3));
for (int i = 0; i < 9; i++) {
b[i] = new JButton();
b[i].setBackground(Color.ORANGE); b[i].setFont(new java.awt.Font("Chiller", 1, 30)); board[i] = 0; b[i].addActionListener(new MoveListener(i)); board_easy.add(b[i]); } }
Berikut merupakan listing dari alpha
betanya :
public class AI extends Thread {
MoveNode bestNode; static byte PLAYER; byte max = Byte.MIN_VALUE; int threadsStop = 0;
public AI(byte board[], byte player) {
AI.PLAYER = (byte)(player * -1);
MoveNode top = new MoveNode (board,player);
MoveNode c; int i = 0;
while((c = top.getChild()) != null) { new RunThread(c).start(); threadsStop++; } try { while(threadsStop != 0) {} } catch(Exception e){} }
public byte[] getBoard() {return bestNode.getBoard();}
public class RunThread extends Thread {
MoveNode top; int depth = 0;
public RunThread(MoveNode in) {top = in;}
public void run() { byte val = minimaxAB(top,true,Byte.MIN_VALUE,Byte.MAX_ VALUE); if(val >= max) { max = val; bestNode = top;} threadsStop--; }
public byte minimaxAB(MoveNode m, boolean mini, byte alpha, byte beta)
{ if(m.isLeaf()) return m.value(); MoveNode child; if(mini) { if(depth == easy.MAX_DEPTH) return beta; depth++; while((child =
m.getChild()) != null && !(alpha > beta)) { byte val = minimaxAB(child, !mini,alpha,beta); depth--; if(val < beta) beta = val; } return beta; } else { if(depth > easy.MAX_DEPTH) return alpha; depth++; while((child =
m.getChild()) != null && !(alpha > beta)) { byte val = minimaxAB(child, !mini,alpha,beta); depth--; if(val > alpha) alpha = val; } return alpha; } } } }
Dan inilah proses pencarian node dalam
tree guna membantu AI mencari peluang:
public class MoveNode{
byte board[]; byte score;
boolean leaf = false; int next = -2;
MoveNode child[] = new MoveNode[25]; int numChild = 0;
int player; int winner;
public MoveNode(byte board[], int player) { this.board = board; if (player == easy.PLAYER_ONE) { this.player = easy.PLAYER_TWO;} if (player == easy.PLAYER_TWO) { this.player = easy.PLAYER_ONE;} winner = easy.checkWin(board); if (winner != 0) {leaf = true;} }
public byte[] getBoard() {return board;}
public MoveNode getChild() {
if (next == -2 && !leaf) {generateMoves();} next++; if (numChild == 0 || numChil next || leaf) {return null;} return child[next]; }
public void generateMoves() {
byte b[] = (byte[]) board; next = -1;
for (int i = 0; i < board.length; i++)
{
if (b[i] == 0) {
b[i] = (byte) player;
child[numChild] = new
MoveNode((byte[]) b.clone(), player); b[i] = 0;
numChild++; }
} }
public byte value() {
if (winner == AI.PLAYER) {return Byte.MAX_VALUE;
else if (winner == 0 || winner == easy.TIE)
{return 0;} else
{return Byte.MIN_VALUE;} }
public boolean isLeaf() {return leaf;}
public void setLeaf(boolean leaf) {this.leaf = leaf;}
}
Berikut adalah proses pengecekan siapa
yang menang :
public static byte checkWin(byte b[]) {
byte top[] = new byte[3]; byte mid[] = new byte[3];
public MoveNode(byte board[], int
if (player == easy.PLAYER_ONE) this.player = easy.PLAYER_TWO;} if (player == easy.PLAYER_TWO)
this.player = easy.PLAYER_ONE;}
winner = easy.checkWin(board);
public MoveNode getChild() {
2 && !leaf)
if (numChild == 0 || numChild ==
public void generateMoves()
byte b[] = (byte[]) board;
for (int i = 0; i < board.length;
b[i] = (byte) player;
child[numChild] = new
MoveNode((byte[]) b.clone(), player);
er == AI.PLAYER) {return Byte.MAX_VALUE;}
else if (winner == 0 || winner ==
{return Byte.MIN_VALUE;}
boolean leaf)
Berikut adalah proses pengecekan siapa
public static byte checkWin(byte b[])
byte bot[] = new byte[3];
int numLeft = 0;
for (int i = 0; i < 9; i++) { if (i < 3) { top[i] = b[i]; } else if (i < 6) { mid[(i) % 3] = b[i]; } else { bot[(i) % 3] = b[i]; } if (b[i] == 0) { numLeft++; } }
if (top[0] == top[1] && top[1] == top[2] && top[0] != 0)
{return top[0];}
if (mid[0] == mid[1] && mid[1] == mid[2] && mid[0] != 0)
{return mid[0];}
if (bot[0] == bot[1] && bot[1] == bot[2] && bot[0] != 0)
{return bot[0];}
// if (top[0] == mid[1] && mid[1] == bot[2] && bot[2] != 0)
{return bot[2];}
if (top[2] == mid[1] && mid[1] == bot[0] && bot[0] != 0)
{return bot[0];}
//
if (top[0] == mid[0] && mid[0] == bot[0] && mid[0] != 0)
{return mid[0];}
if (top[1] == mid[1] && mid[1] == bot[1] && mid[1] != 0)
{return mid[1];}
if (top[2] == mid[2] && mid[2] == bot[2] && mid[2] != 0)
{return mid[2];} // if (numLeft == 0) { return easy.TIE; } return 0; }
Dari proses diatas bisa dihasilkan program
seperti berikut :
5.
Hasil Analisis
Dari hasil permainan di atas,
penulis hanya memberikan permainan
catur jawa dalam ukuran 3x3. Sedangkan
dalam
program
yang
sesungguhnya,
terdapat ukuran papan 5x5 dan 9x9.
byte bot[] = new byte[3];
(int i = 0; i < 9; i++)
{ top[i] = b[i]; } else if (i < 6)
{ mid[(i) % 3] = b[i]; }
{ bot[(i) % 3] = b[i]; }
if (top[0] == top[1] && top[1] ==
if (mid[0] == mid[1] && mid[1] ==
if (bot[0] == bot[1] && bot[1] ==
{return bot[0];}
--- if (top[0] == mid[1] && mid[1] ==
if (top[2] == mid[1] && mid[1] ==
{return bot[0];}
--- if (top[0] == mid[0] && mid[0] ==
if (top[1] == mid[1] && mid[1] ==
if (top[2] == mid[2] && mid[2] ==
---
{ return easy.TIE; }