Mengenal
Algoritma dan Contoh Implementasi Algoritma dalam Pembuatan Game
Tulisan ini mengulas tentang algoritma dalam game, memang tidak lengkap karena saya bukan basik/ahlinya. tetapi sedikit harapan saya semoga dapat bermanfaat...
Platform game
atau sering disebut paltformer
merupakan salah satu genre dalam
video game yang dikarakterisasikan dengan melompat antar platform atau obstacle
lain. Dibutuhkan pengendalian dari pemain untuk mencegah karakter jatuh dari platform atau salah melompat.
Contoh-contoh game ini bervariasi, beberapa mekanisme lompatan di modifikasi
dengan bantuan alat-alat tertentu seperti tali pengayun dengan panjang yang
telah diatur, atau melompat dari trampoli atau pegas. Dalam platform game mengharuskan
pemain mengarahkan suatu obyek dengan melalui berbagai tahap atau tingkatan
area untuk menyerang musuh dan menghindar terhadap serangan. Tipe game ini
sedikit serupa dengan action game, tetapi aksinya tidak secepat action
game. Teknik collision detection sangat sering dimanfaatkan pada
tipe game ini, contohnya : Sonic The Hedgehog & Mario Bros. Platform game pada awalnya tercipta
pada tahun 1980-an, dengan penerusnya berupa 3D platform yang dipopulerkan pada pertengahan 1990-an. Untuk
melakukan lompatan dan gerakan lainnya perlu di terapkannya algoritma. Disini
algoritma secara umum mempunyai pengertian serangkaian urutan langkah-langkah
yang tepat, logis, terperinci, dan terbatas untuk menyelesaikan suatu masalah
yang disusun secara sistematis, dalam kaitannya dengan pembuatan game algoritma
sangat dibutuhkan untuk rancangan awal sebuah game.
Pada
Pembahasan kali ini akan diuraikan dasar-dasar algoritma dalam pembuatan game.
Seperti yang telah diuraikan diatas algoritma digunakan salah satunya untuk melakukan
mekanisme lompatan, untuk lebih jelasnya akan di bahas terlebih dahulu mengenai
jenis-jenis algoritma dalam pembuatan game.
- MINIMAX, Sebuah prosedur pencarian yg melihat kedepan, memperhatikan apa yg akan terjadi, kemudian yang digunakan untuk memilih langkah berikutnya.
- ALPHA-BETA PRUNING, Algoritma ini merupakan improvisasi dari algoritma minimax. Algoritma ini untuk meningkatkan efisiensi fungsi minimax dalam hal pencarian, kemudian fungsi evaluasi ditambahkan sepasang nilai alpha dan beta.
- FUZZY, Logika fuzzy merupakan pengembangan dari logika boolean. Sistem fuzzy atau logika fuzzy adalah salah satu bahasa soft computing yang memiliki karakteristik dan keunggulan dalam menangani permasalahan yang bersifat ketidakpastian dan kebenaran parsial. Logika fuzzy merupakan pengembangan dari logika boolean yang hanya memiliki nilai true (1) atau false (0).
- ALGORITMA GENETIKA, Algoritma genetika adalah algoritma yang berusaha menerapkan pemahaman mengenai evolusi alamiah pada tugas-tugas pemecahan masalah (problem solving). Pendekatan yang diambil oleh algoritma ini adalah dengan menggabungkan secara acak berbagai pilihan solusi terbaik di dalam suatu kumpulan (populasi) untuk mendapatkan generasi solusi terbaik berikutnya yaitu pada suatu kondisi yang memaksimalkan kecocokannya atau lazim disebut fitness.
- ALGORITMA AI (ARTIFICIAL INTELEGENCE), Kecerdasan Buatan (Artificial Intelligence) merupakan cabang terpenting dalam dunia computer yang membuat agar mesin (computer) dapat melakukan pekerjaan seperti dan sebaik yang dilakukan manusia. Pada awalnya diciptakan computer hanya berfungsi sebagai alat hitung. Tapi sekarang peran computer makin mendominasi kehidupan manusia.
- ALGORITMA A * ( A STAR)
- ALGORITMA BREADTH FIRST SEARCH
- ALGORITMA BACKTRACKING
- ALGORITMA FORWARD CHAINING
- ALGORITMA DEPTH-FIRST SEARCH dan ALGORITMA NEGAMAX
Agar kita dapat menggunakan algoritma
yang sesuai dengan game yang akan dibuat maka alangkah baiknya kita analisis
terlebih dahulu algoritma yang akan di pakai Untuk melihat faktor efisiensi
& efektifitas dari algoritma tersebut), dapat dilakukan terhadap suatu
algoritma dengan melihat pada:
- Waktu tempu (Running Time) dari suatu algoritma:
adalah satuan waktu yang ditempuh atau diperlukan oleh suatu algoritma dalam
menyelesaikan suatu masalah. Hal-hal yang dapat mempengaruhi daripada waktu
tempuh adalah:
- Banyaknya langkah: Makin banyak langkah atau instruksi yang digunakan dalam menyelesaikan masalah, maka makin lama waktu tempuh yang dibutuhkan dalam proses tersebut
- Besar dan jenis input data: Besar dan jenis input data pada suatu algoritma akan sangat berpengaruh pada proses perhitugan yang terjadi. Jika jenis data adalah tingkat ketelitian tunggal(Single precision), maka waktu tempuh akan menjadi relatif lebih cepat dibandingkan dengan tingkat ketelitian ganda(double precesion)
- Jenis operasi: Waktu tempuh juga dipengaruhi oleh jenis operasi yang digunakan. Jenis operasi tersebut meliputi operasi matematika, nalar atau logika, atau yang lainnya. Sebagai contoh, operasi perkalian atau pembagian akan memakan waktu lebih lama dibandingkan operasi penjumlahan atau pengurangan.
- Komputer dan kompilator: hal terakhir yang mempengaruhi waktu tempuh suatu proses algoritma adalah komputer dan kompilatornya, walaupun sebenarnya faktor ini diluar tahap rancangan atau tahap pembuatan algoritma yang efisien. Algoritma dibuat untuk mencapai waktu tempuh yang seefektif dan seefisien mungkin, tetapi kesemuanya itu akan sangat bergantung pada kemampuan komputer yang tentunya harus sesuai dengan jumlah program atau langkah yang diperlukan oleh algoritma, begitu juga dengan kompilator tersebut, misalnya PC XT 8086 akan kalah cepat dibandingkan 8088 atau dengan AT 80286 atau 80386 atau 80486 dan seterusnya
- Jumlah Memori Yang digunakan: banyaknya langkah yang digunakan dan
jenis variabel data yang dipakai dalam suatu algoritma akan sangat mempengaruhi
penggunaan memori. Dalm hal ini, diharapkan dapat memperkirakan seberapa banyak
kebutuhan memori yang diperlukan selama proses berlangsung hingga proses
selesai dikerjakan. Dengan demikian, dapat disiapkan storage yang memadai agar
proses suatu algoritma berjalan tanpa ada hambatan atau kekurangan memori.
Selain analisis kita juga dapat melihat
sifat umum dari sebuah algoritma, pada umumnya algoritma memiliki sifat-sifat sebagai berikut :
- Langkah atau instruksi harus
jelas: artinya bahwa penulisa setiap langkah yang terdapat didalam sebuah
algoritma harus memiliki arti yang khusus atau spesifik sehingga dapat
dibedakan antara penulisan langkah untuk komputer (program/pemrograman) dengan
penulisan langkah bagi manusia (pesudocode).
Manusia akan lebih mudah memahami algoritma yang terdiri atas simbol-simbol (Contoh:
pembuatan algoritma dengan diagram alur/flowchart) sedangkan komputer hanya
membutuhkan sebuah penulisan algoritma dengan kode-kode yang dituangkan dalam
bahasa yang dimengerti oleh komputer itu sendiri (bahasa pemrograman).
-
Banyaknya langkah instruksi harus berhingga: pelaksanaan sebuah
algoritma yang terprogram haruslah dapat diakhiri atau diselesaikan melalui
sejumlah langkah operasional yang berhingga. Jika tidak demikian, kita tidak
akan dapat mengharapkan bahwa pelaksaan algoritma tersebut dapat menghasilkan
suatu solusi yang baik.
- Proses harus jelas dan mempunyai
batasan: rangkaian suatu proses yang berisi langkah-langkah instruksi dari
suatu algoritma yang akan dilaksanakn harus ditetapkan dengna jelas, baik dan
pasti sebab sebuah algoritma harus memiliki instruksi dasar tertentu dimana
setiap instruksi harus memiliki unsur pelaksana yang berfungsi sebagai pemroses
data yang akan dimasukkan dalam sebuah komputer. Dengan demikian, sebuah
algoritma harus ditulis dengan jelas tentang batasa-batasan proses yang akan
dilaksanakan oleh komputer.
- Efektifitas: instruksi yang
diberikan pada komputer agar hanya menjalankan atau melaksanakan proses yang
mampu dilaksanakannya. Yang dimaksud mampu adalah bahwa suatu algoritma atau
instruksi-instruksi dalam sebuah program hanya akan dapat dilaksanakan jika
informasi yang diberikan oleh instruksi-instruksi tersebut lengkap, benar dan
jelas.
- Adanya batasan ruang lingkup, sebuah algoritma yang
baik adalah hanya ditujukan bagi suatu masalah tertentu saja. Susunana input
harus ditentukan lebih dulu sebab susunan tersebut menentukan sifat umum dari
algoritma yang bersangkutan.
Dari beberapa pengantar algoritma yang
telah dibahas di atas, sekarang kita kembali lagi ke mekanisme lompatan dalam
sebuah game. Jika mendengar lompatan, apa yang ada dibenak anda sekalian? daya
dorong? gravitasi? persamaan yang rumit? atau yang lain? Sekilas akan sangat
rumit jika kita harus mengimplementasikan algoritmanya, dan memang benar akan
rumit. Lalu bagaimana para game developer diluar sana mengimplementasikan hal
serumit ini? Tentu ada cara lain yang sedikit lebih mudah daripada kita harus
menggunakan persamaan tersebut.
Dalam game 2D, koordinat yang digunakan
adalah koordinat x dan koordinat y (x,y). Kita sepakati saja bahwa koordinat
(0,0) terletak di sudut kiri atas untuk memudahkan pemahaman. Untuk x, ke arah
kanan x bernilai positif, dan ke arah kiri x bernilai negatif. Sedangkan untuk
y, ke arah bawah y bernilai positif, sedangkan ke arah atas y bernilai negatif.
Hal ini memang sedikit asing bagi yang belum pernah belajar pemrograman grafis.
Lain halnya dengan game 3D maka titik koordinat yang di pakai adalah (x,y,z).
Setelah disepakati tentang masalah
koordinat, selanjutnya kita masuk ke logika berpikir. Karakter kita berdiri
pada suatu platform di titik (x,y). Kemudian yang disebut melompat adalah
menggeser koordinat y ke arah atas (-y) sampai pada titik tertentu, kemudian
setelah mencapai titik tersebut kemudian kita menggeser koordinat y tadi ke
arah bawah (y) dan mengembalikan karakter ke titik semula.
Dapat dilihat dari penggalan kode program di bawah ini
;
Jika kode tersebut dijalankan, maka
program ini hanya akan menampilkan nilai dari variabel posisi, karena kode
tersebut merupakan konsep awal dalam game agar bisa melompat.
Beberapa contoh impelementasi algoritma
dalam pembuatan game :
1.
Pembuatan Kecerdasan Buatan untuk Permainan Catur Jawa
Dengan Menggunakan Algoritma MiniMax
Dengan Menggunakan Algoritma MiniMax
Algoritma
minimax diaplikasikan pada permainan yang melibatkan dua orang.
Permainan-permainan tersebut dapat dideskripsikan dengan sejumlah aturan dan
premis. Dengan itu, kita dapat mengetahui, pada titik tertentu permainan,
langkah-langkah yang mungkin berikutnya. Permainan tersebut berbagi
karakteristik yang sama, yakni “permainan dengan penuh informasi”. Setiap
pemain mengetahui semua langkah-langkah yang mungkin dari pemain lawannya.
Pada algoritma ini ada dua pemain yang terlibat, kita asumsikan MAX dan MIN. Pohon pencarian dibangkitkan, depth-first, dimulai dari posisi permainan saat ini sampai pada akhir posisi permainan. Lalu, kondisi permainan final dievaluasi sebagai sudut pandang MAX, seperti tergambar pada gambar 1. Setelah itu, simpul-simpul di atas simpul daun diisi secara bottom up dengan nilai pada simpul anak-anaknya. Simpul yang dimiliki pemain MAX menerima nilai maksimum dari simpul anak-anaknya dan pemain MIN memperoleh nilai minimum dari nilai-nilai yang dimiliki simpul anakanaknya. Berikut gambaran algoritmanya:
‘Nilai’ pada algoritma di atas
merepresentasikan seberapa baik permainan bergerak. Pemain MAX akan mencoba
memilih gerakan dengan nilai maksimum pada akhirnya sedangkan pemain MIN akan
memilih gerakan yang lebih baik baginya, karena itu MIN akan meminimkan
keluaran dari MAX (minimizing MAX’s
outcome).
Pada pengimplementasian algoritma minimax pada
permainan catur jawa ini menggunakan bahasa pemrograman Java. Pada
pengimplementasiannya, catur jawa diberi batasan-batasan khusus.
Batasan-batasan ini antara lain : lebar papan hanya dibatasi 7 kotak saja dan
tinggi papan hanya 6 kotak saja. Permainan juga selalu dimulai dari bawah untuk
menyederhanakan persoalan. Pemain akan memulai permainan dengan cara memilih
salah satu kolom dari tujuh buah kolom yang tersedia. Pemain akan mendapatkan
simbol ‘X’. Komputer pun akan segera melakukan gerakan untuk melawan pemain
sesuai dengan algoritma minimax yang diimplementasikan. Demikian selanjutnya
sampai salah satu pemain (kita atau komputer) memperoleh 4 simbol yang sama
(‘X’ untuk kita dan ‘O’ untuk komputer) pada baris yang sama, pada kolom yang
sama, atau pada diagonal yang sama. Method-method yang dipakai dalam
mengimpelementasikan algoritma ini pada intinya hanya tiga buah, yakni
konstruktor catur jawa, fungsi minimax sebagai algoritma inti pada kecerdasan
buatan pada permainan catur jawa ini, dan method FourInARow yang berfungsi untuk menghitung apakah suatu pemain
telah memperoleh simbol empat buah yang berurutan. Untuk memperjelas, mari kita
lihat algoritmanya. Berikut adalah variabel global yang digunakan:
Berikut adalah Konstruktor caturJawa:
Dan untuk kode program algoritma minimaxnya sebagai berikut :
Langkah terakhir adalah untuk kode program fungsi FourInARow:
Pada konstruktor caturJawa, yang
dilakukan adalah menunggu masukan user kemudian mengantisipasi masukan user itu
dengan memanggil method miniMax dan kemudian membandingkan hasil keluaran
method miniMax tersebut. Karena method ini digunakan untuk memaksimalkan langkah
komputer, maka yang dicari adalah nilai yang maksimum dari semua keluaran
miniMax ini.
Fungsi heuristik pada prosedur miniMax adalah dengan
mencari langkah paling cepat menghasilkan akhir permainan. Akhir permainan ini
ditentukan dengan menggunakan method
FourInARow (jika sudah ada 4 simbol berurutan maka permainan berakhir).
Jika sedang berada pada langkah komputer (MAX), algoritma akan mencari nilai
minimum yang dihasilkan oleh pemain dan jika berada pada langkah pemain
algoritma akan mencari nilai maksimum yang dihasilkan oleh komputer. Fungsi miniMax ini merupakan fungsi rekursif
dengan maksimum kedalaman 6. Kedalaman ini dimaksudkan untuk mengoptimasi
algoritma miniMax yang dibuat.2. Penerapan Algoritma A* (A Star) Pada Game Edukasi The Maze Island Berbasis Android
Game edukasi memiliki kelebihan
dibandingkan dengan metode pembelajaran konvensional karena cara
pembelajarannya disajikan dengan visualisasi bergerak yang menarik. Namun, game
edukasi jarang menerapkan algoritma dalam penyelesaiannya. Alasan inilah yang
membuat penulis ingin mencoba untuk menerapkan algoritma A Star (A *) pada game
edukasi The Maze Island berbasis
Android. Game edukasi ini termasuk dalam game labirin dimana pemain diharuskan
untuk mencari jalan keluar dengan rute terpendek. Algoritma A* memberikan
solusi terbaik untuk memecahkan masalah ini. Tujuan utama dari permainan ini
adalah untuk menerapkan algoritma A* dalam memberikan hasil pencarian untuk
menemukan pintu keluar dengan rute terpendek. Game ini juga diharapkan dapat menjadi
salah satu media pembelajaran untuk menambah wawasan ilmu pengetahuan dan
matematika. Dan game ini dikembangkan pada platform android yang memungkinkan
pengguna untuk bermain di mana pun dengan menggunakan smartphone.
Prinsip dari algoritma ini adalah
melakukan traversal satu per satu pada tiap simpul untuk memperoleh lintasan
terpendek pada suatu graf. Algoritma A* akan menghitung jarak salah satu
lintasan, lalu menyimpannya dan kemudian menghitung jarak lintasan lainnya.
Ketika seluruh lintasan telah selesai dihitung, algoritma A* akan memilih
lintasan yang paling pendek. Algoritma A* menyelesaikan masalah yang
menggunakan graf untuk perluasan ruang statusnya.
Heuristik adalah nilai yang memberi
nilai pada tiap simpul yang memandu A* mendapatkan solusi yang diinginkan.
Dengan heuristik, maka A* pasti akan mendapatkan solusi (jika memang ada
solusinya). Dengan kata lain, heuristik adalah fungsi optimasi yang menjadikan
algoritma A* lebih baik dari pada algoritma lainnya. Fungsi heuristik yang
terdapat pada algortima A* untuk menghitung taksiran nilai dai suatu simpul
yang telah dilalui adalah :
F(n) = G(n) + H(n) . . . . .
. . . . . . . . . . 1
Dimana :
F(n) = ongkos untuk simpul n
G(n) = ongkos mencapai simpul n dari
akar
H(n) = ongkos mencapai simpul tujuan dari nPseudocode untuk algoritma A * adalah :
function
A*(start,goal)
closedset := the empty set // The set of nodes already evaluated.
openset := {start} // The set of tentative nodes to be evaluated, initially
containing the start node
came_from := the empty map // The map of navigated nodes.
g_score[start] := 0 // Cost from start
along best known path.
h_score[start] := heuristic_cost_estimate(start, goal)
f_score[start] := g_score[start] + h_score[start] // Estimated total
cost from start to goal through y.
while openset is not empty
x := the node in openset
having the lowest f_score[] value
if x = goal
return reconstruct_path(came_from, came_from[goal])
remove x from openset
add x to closedset
foreach y in neighbor_nodes(x)
if y in closedset
continue
tentative_g_score := g_score[x] + dist_between(x,y)
tentative_g_score := g_score[x] + dist_between(x,y)
if y not in openset
add y to openset
tentative_is_better := true
else if tentative_g_score < g_score[y]
tentative_is_better := true
else
tentative_is_better := false
if tentative_is_better = true
came_from[y] := x
g_score[y] := tentative_g_score
h_score[y] := heuristic_cost_estimate(y, goal)
f_score[y] := g_score[y] + h_score[y]
return failure
function reconstruct_path(came_from, current_node)
if came_from[current_node] is set
p := reconstruct_path(came_from, came_from[current_node])
return (p + current_node)
elsereturn current_node
3. Penggunaan Algoritma Breadth First Search Dalam Konsep Artificial
Intellegencia
Artificial
Intelligencia merupakan suatu konsep pemetaan suatu bahasa pemrograman yang
dapat membuat suatu kesimpulan berdasarkan pemetaan yang telah dilakukan
didalam pemrograman. Dalam hal ini, banyak metode yang dapat digunakan dan
dimanfaatkan untuk menyelesaikan permasalahan tersebut. Contohnya seperti
masalah Teko Air. Permasalahan ini dapat diselesaikan dengan menerapkan konsep
AI yaitu dengan bantuan pohon pelacakan dan menerapkan metode pencarian melebar
pertama (breadth-first search / BFS).
Pencarian solusi dimulai dari kondisi dimana kedua teko kosong (node akar dari
pohon pelacakan). Perangkat lunak ini memiliki kemampuan untuk mencari solusi
permasalahan teko air dengan 2 buah kendi dan menampilkan semua langkah –
langkah yang dapat diambil untuk mendapatkan solusi atau volume air yang
diinginkan.Perangkat lunak dapat mencari solusi terpendek dari permasalahan
teko air karena menggunakan metode pencarian melebar pertama (breadthfirst search). Pencarian tidak
selalu menghasilkan solusi walaupun setelah semua node pada pohon pelacakan diperiksa
dan dikembangkan.
Pada metode pencarian ini, semua node pada level n
akan dikunjungi terlebih dahulu sebelum mengunjungi node-node pada level n+1.
Pencarian dimulai dari node akar terus ke level ke-1 dari kiri ke kanan,
kemudian berpindah ke level berikutnya. Demikian seterusnya hingga ditemukannya
solusi. Gambaran pencarian BFS dapat dilihat pada gambar di bawah ini :
Pada gambar di atas terlihat bahwa
pencarian dimulai dari keadaan awal (node A). Dari node A dikembangkan dua node
baru yang menjadi anaknya, yaitu node B dan node C. Penelusuran dilanjutkan ke
node B (menghasilkan node D, E, F) dan node C (menghasilkan node G, H, I).
Demikian seterusnya hingga ditemukan solusi.
Contoh mudahnya dapat di lihat pada
game Masalah Teko Air (Water Jug Problem) dapat diilustrasikan seperti berikut,
terdapat 2 buah teko air X dan Y, masing – masing berukuran A dan B liter.
Salah satu teko tersebut hendak diisi air sebanyak N liter, dengan menggunakan
asumsi bahwa sumber air tidak terbatas. Aksi – aksi yang dapat dilakukan,
antara lain mengisi teko dengan air hingga penuh, mengosongkan teko dan
menuangkan isi teko ke teko yang lain.
4. Penerapan Algoritma Backracking pada permainan math maze
Permainan Math Maze merupakan game sederhana yang bertujuan menentukan jalur
yang tepat untuk mencapai tujuan yang telah di tetapkan. Permainan ini hampir
sama dengan permainan labirin (Maze)
biasa. Perbedaannya adalah pada Math Maze
kita harus menemukan jalur pada labirin denngan angka-angka pada bagian sisi
kiri dan sisi atas sebagai indikasi beberapa banyak kotak yang di lewati untuk
tiap baris atau tiap kolom dan tidak menggunakan tembok penghalang seperti pada
kolom biasa. Pada penelitian ini dilakukan proses untuk membuat papan permainan
math maze yang biasa dimainkan oleh
pemakai dengan menggunakan algoritma backtracking.
Proses pembuatan papan permainan math
maze terdiri dari beberapa langkah, yaitu proses pembangkitan sebuah maze, pencarian solusi dari maze yang
sudah di bangkitkan, dan membuat papan permainan Math Maze baru dengan memanfaatkan maze yang sudah di ketahui solusinya, permainan math maze dengan menggunakan algoritma backtracking dapat menghasilkan 1 solusi
untuk setiap problem yang dibangkitkan dan maze
yang dihasilkan dengan algoritma backtracking akan menghasilkan maze yang tidak memiliki loop dan ruang terbuang.
Langkah-langkah pencarian solusi
dengan Backtracking adalah sebagai
berikut :
1. Solusi di cari dengan membentuk lintasan dari akar ke
daun. Simpul yang sudah dilahirkan dinamakan simpul hidup dan simpul hidup
diperluas dinamakan simpul-E (Expand-node)
2. Jika lintasan yang diperoleh dari perluasan simpul-E tidak
mengarah ke solusi, maka simpul itu akan menjadi simpul mati dimana simpul itu
tidak akan diperluas lagi.
3. Jika posisi terkahir ada di simpul mati, maka pencarian
dilakukan dengan membangkitkan simpul anak yang lainnya dan jika tidak ada
simpul child maka di lakukan backtracking ke simpul parent
4. Pencarian di hentikan jika telah menemukan solusi atau
tidak ada simpul hidup yang dapat di diperlukan
Langkah algoritma Backtracking
:
a.
Masukan ukuran grid (i x j)
b.
Selama total sel pada grid < sel yang telah dikunjungi
lakukan langkah d, e, f
c.
Pilih secara acak sel tetangga
(kanan, kiri, atas, bawah)
d.
Cek apakah sel sudah pernah
dikunjungi , jika ya kembali ke langkah c, jika tidak lakukan langkah e.
e.
Hapus wall atau pembatas pada sel
f.
Tentukan pintu masuk (start) dan pintu keluar (goal)
g. Selesai
Flowchart algoritma backtracking
pada pembangkitan maze game math maze
5. Game Chicken Roll dengan Menggunakan Metode Forward Chaining
5. Game Chicken Roll dengan Menggunakan Metode Forward Chaining
Metode
forward chaining pada umumnya
digunakan untuk sistem pendukung keputusan dan sistem pakar. Penelitian ini
menggunakan algoritma forward chaining,
khususnya untuk proses review dan
untuk menentukan apakah seorang pemain game layak melanjutkan ke level
berikutnya. Algoritma forward chaining
adalah algoritma yang berbasiskan pada fakta-fakta atau premise yang ada sehingga menghasilkan sebuah kesimpulan atau
konsekuen. Hasil pengujian menunjukkan bahwa nilai validitas mencapai 100%.
Hasil didapat dari komparasi data antara rules dan hasil pengujian yang didapat
saat bermain game.
Kerangka konsep game chicken roll :
Keterangan:
- Garis Putus-Putus : Penelitian yang dikerjakan.
- Baris 1 : Game mempunyai 9 jenis (Edutainment, FPS, RTS, Fighting, Adventure, RPG, Construction and Management Simulation, Vehicle Simulation, Leveling).
- Baris 2 : Penelitian ini berfokus pada pengembangan game untuk desktop.
- Baris 3 : Penelitian ini lebih mengutamakan pengembangan pada bidang AI (Artificial Intelligence) khususnya dengan menggunakan forward chaining.
- Baris 4 : Konsep AI dimanfaatkan untuk leveling process. Memanfaatkan forward chaining untuk menentukan seorang user dapat melanjutkan ke level berikutnya atau tidak.
- Baris 5 : Variabel yang dijadikan acuan sebagai bahan input untuk konsep AI dengan forward chaining.
Konsep
kerja algoritma forward chaining dalam
game chicken roll:
Penerapan
kecerdasan buatan menggunakan algoritma DFS (Depth First Search) dengan algoritma Negamax yang dioptimasi dengan
Alpha Beta Pruning ini dapat
mengurangi ruang pencarian sehingga proses penelusuran dan evaluasi dapat
dilakukan lebih cepat. Aplikasi ini dikembangkan dengan menggunakan bahasa
pemrograman Java berbasis Eclipse IDE. Hasil yang diperoleh adalah sebuah
aplikasi permainan Othello yang dapat diterapkan pada mobile phone berbasis
Android.
Dalam
permainan Othello pencarian dilakukan pada satu node dalam setiap level dari
yang paling kiri. Jika pada level yang paling dalam, solusi belum ditemukan,
maka pencarian dilanjutkan pada node sebelah kanan.
Untuk
mengatasi banyaknya node yang ditelusuri oleh Negamax, perlu dibuat optimasi yang dapat mereduksi kemungkinan yang
akan dianalisis. Alpha Beta Pruning
merupakan optimasi dari algoritma Negamax
yang mengurangi jumlah node yang dievaluasi oleh pohon pencarian. Dengan
algoritma ini hasil optimasi dari algoritma Negamax
tidak akan berubah.
Alpha
Beta Pruning
menelusuri pohon permainan dengan meletakkan 2 nilai pada setiap node, yaitu
alpha (α) dan beta (β). Nilai α ditetapkan sama dengan -∞ sedangkan nilai β
sama dengan +∞. Jika α < β, maka kesempatan untuk mencari langkah terbaik
masih ada dan pencarian akan tetap dilanjutkan. Node akan melakukan
maksimalisasi dan memperbaiki nilai α dari nilai anakanaknya, kemudian nilai
yang telah memperbaiki nilai α tersebut akan dibandingkan dengan nilai β
sementara. Jika α > β, maka evaluasi dihentikan. Beriku adalah salah satu
gambar kondisi pada game Othello dan
gambar saat game Othello berlangsung:
Sudoku adalah sebuah permainan puzzle
pada papan berukuran 9x9 yang menggunakan angka 1 sampai 9. Target dari
permainan ini adalah melengkapi papan dengan mengisi kotak-kotak yang kosong
dengan sebuah angka sehingga dalam satu baris, kolom, dan region (kotak 3x3)
tidak ada angka yang berulang. Karena itu, dalam sebuah puzzle Sudoku, hanya
terdapat 1 solusi yang valid. Penyelesaian permainan ini secara manual akan
memakan waktu beberapa lama, sehingga mulai dilakukan penelitian untuk
menyelesaikan puzzle Sudoku
menggunakan beberapa algoritma yang dalam prosesnya diperlukan banyak iterasi.
Dengan Algoritma Genetika, suatu solusi dari puzzle Sudoku direpresentasikan dalam sebuah kromosom atau individu
dengan struktur tertentu. Kromosom yang terkumpul dalam populasi mengalami
berbagai proses, mulai dari seleksi, pindah silang, mutasi, hingga pergantian
generasi. Kromosom yang lolos diharapkan adalah yang terbaik, yang merupakan
solusi puzzle.
Kromosom adalah representasi solusi
dari suatu masalah pada Algoritma Genetika. Pada Sudoku, kromosom adalah
representasi suatu solusi dari puzzle yang berisi angka-angka yang akan
diisikan pada kotak-kotak yang kosong sehingga panjang kromosom adalah sama
dengan jumlah kotak yang kosong pada puzzle. Nilai untuk masing-masing gen pada
kromosom diambil secara acak dari kandidat-kandidat pada setiap cell. Kandidat
nilai untuk setiap kromosom adalah angka 1 hingga 9. Pada pemrograman, kromosom
direpresentasikan dengan array of integer (int[]). Contoh bentuk kromosom :
Puzzle yang digunakan untuk percobaan adalah puzzle dengan tingkat kesulitan Very
Hard (55 kotak kosong). Puzzle ini disimpan ke dalam file dan di-load pada
setiap percobaan. Percobaan yang dilakukan adalah dengan mengubah-ubah
konfigurasi Algoritma Genetika, yaitu jumlah individu, generasi maksimum, crossover rate, jumlah titik crossover, dan mutation rate. Untuk setiap konfigurasi, dilakukan 10 percobaan dan
diambil nilai rata-ratanya. Hal ini dilakukan karena Algoritma Genetika
memberikan hasil yang berbeda-beda untuk konfigurasi yang sama.
Percobaan jumlah kromosom dilakukan
dengan menambah jumlah kromosom untuk dilihat pengaruh pada performa Algoritma
Genetika. Hasil percobaan digambarkan pada grafik berikut.
Hasil pembahasan :
- Dalam proses evolusi menuju nilai fitness yang sempurna, seringkali terjadi stagnasi yang membuang waktu dan menyebabkan waktu evolusi menjadi panjang. Pengulangan proses evolusi dari awal (inisialisasi populasi) dapat memperbaiki waktu evolusi.
- Inisialisasi populasi di awal proses evolusi sangat menentukan konvergensi proses evolusi.
- Penambahan jumlah kromosom dalam populasi dapat meningkatkan performa algoritma namun tidak signifikan karena membutuhkan komputasi yang lebih tinggi.
- Peningkatan crossover rate dan mutation rate dapat meningkatkan konvergensi.
Game NIM adalah sebuah game sederhana yang diawali dengan
serangkaian batang dengan jumlah tertentu. Kemudian pemain harus memecah
serangkaian batang tersebut menjadi dua kumpulan dimana jumlah batang di setiap
kumpulan tidak boleh sama dan tidak boleh kosong. Contoh ilustrasi Game NIM
dapat dilihat pada gambar di bawah ini :
Telah kita ketahui sebelumnya bahwa algoritma alpha-beta pruning merupakan improvisasi
dari algoritma Minimax. Algoritma ini
untuk meningkatkan efisiensi fungsi Minimax
dalam hal pencarian. Mengurangi jumlah pencarian pada node-node Game NIM yang
diexpand. Kemudian fungsi evaluasi
ditambahkan sepasang nilai Alpha dan Beta . Dalam Game NIM, metode Alpha-beta Pruning akan diterapkan pohon n-ary yang telah terbentuk. Pada setiap
cabang akan memiliki nilai yang bertujuan memaksimalkan pencarian dan
meminimalkan waktu pencarian pada pohon n-ary.
Sedangkan fungsi evaluasi sendiri adalah inialisasi pertama dalam metode ini
sebelum melakukan permainan. Berikut nilai fungsi evaluasi dari metode Alpha-beta Pruning.
- 0 MIN (player) menang
- 1 MAX (komputer) menang
Berikut merupakan aturan untuk Alphabeta Pruning:
- Pemangkasan Alpha : Pencarian dapat dihentikan untuk simpul turunan selanjutnya jika setiap simpul MIN memiliki nilai beta kurang dari atau sama dengan nilai alpha apapun dari simpul MAX sebelumnya pada induk yang sama.
- Pemangkasan Beta : Pencarian dapat dihentikan untuk simpul turunan selanjutnya jika setip simpul MAX memiliki nilai alpha lebih dari atau sama dengan nilai beta apapun dari simpul MIN sebelumnya pada induk yang sama.
Untuk memulai permainan NIM, sistem perlu mengetahui 3 attribut yakni jumlah batang, pemain yang bermain dulu, dan metode yang akan digunakan.
9. Penerapan Algoritma Fuzzy Mamdani
untuk Mengatur Game Scoring pada Game Helitap
Gambar diatas adalah tampilan alur dari poses tampilnya
Health pada game yang dibuat. Parameter awal yang akan dipakai sebagai acuan
dalam menentukan munculnya Health berupa score pemain. Hal ini dapat menetukan
kapan Health dan kecepatan obstacle akan tampil dan berubah. Sehingga nilai
score menjadi penentu utama dari tingkat kesulitan permainan semakin tinggi
score maka kecepatan dan frekuensi Health yang keluar juga akan berpengaruh.
Health disini berfungsi sebagai “nyawa ” dari helicopter yang dimainkan.
Dihasilkan 6 rule dari proses yang ada.
1. IF Score is Rendah Then Health is Sering
2. IF Score is Sedang Then Health is Sedang
3. IF Score is Tinggi Then Health is Jarang
4. IF Score is Rendah Then Kecepatan is Biasa
5. IF Score is Sedang Then Kecepatan is Sedang
6. IF Score is Tinggi Then Kecepatan
is Cepat
Berikut merupakan pengolahan yang dilakukan pada matlab R2012 untuk
menentukan aturan yang akan dipakai. Inputan score yang akan di gunakan.
Output untuk menampilkan frekuensi kemunculan dari Health
Hasil dari proses pembuatan dan pemberian metode fuzzy pada permainan menghasilkan hasil yang baik. Health dapat tampil sesuai dengan rule yang telah dibuat sebelumnya. Begitu juga kecepatan yang dapat secara otomatis berubah sesuai dengan kondisi dari pemain. Berikut merupakan screenshot dari permainan yang dihasilkan.
a
Pada saat pemain memainkan permainan obstacle akan secara
otomatis berjalan menuju pemain. Jika pemain dapat melewati obstacle tersebut,
maka score akan bertambah sebanyak 1 poin. Item Health yang secara acak akan
tampil saat permainan berjalan, akan membantu pemain agar jika pemain menabrak
obstacle permainan tidak langsung berakhir. Pemain harus bisa mengambil Item
tersebut agar “nyawa” pemain dapat bertambah sebanyak yang didapatkan oleh
pemain. Semakin tinggi nilai dari pemain, maka frekuensi kemunculan Item
tersebut akan berkurang dan kecepata dari obstacle pun akan bertambah cepat.
c
d
Semoga bermanfaat























Tidak ada komentar:
Posting Komentar