Makalah AI

download Makalah AI

of 22

description

Heuristic Search

Transcript of Makalah AI

HEURISTIC SEARCH IN GAME(IMPLEMENTASI ALGORITMA A STAR (A*) PADA GAME PUZZLE-8)

Diajukan Untuk Memenuhi Tugas Mata Kuliah Kecerdasan Buatan

Kelompok 2

Kelas: AI-210112634Mukti Mochammad Ramdhan 10112637Iqbal Bahari10112668Idwar Halid

PROGRAM STUDI TEKNIK INFORMATIKAFAKULTAS TEKNIK DAN ILMU KOMPUTERUNIVERSITAS KOMPUTER INDONESIA2015

16

KATA PENGANTAR

Puji syukur penyusun panjatkan ke hadirat Allah SWT, karena berkat rahmat-Nya kami bisa menyelesaikan makalah yang berjudul Implementasi Algoritma A Star (A*) pada Game Puzzle-8.Kami mengucapkan terima kasih kepada semua pihak yang telah membantu sehingga makalah ini dapat diselesaikan tepat pada waktunya. Makalah ini masih jauh dari sempurna, oleh karena itu, kritik dan saran yang bersifat membangun sangat kami harapkan demi sempurnanya makalah ini. Semoga makalah ini memberikan informasi dan bermanfaat untuk pengembangan wawasan dan peningkatan ilmu pengetahuan bagi kita.

Bandung, Desember 2015

Kelompok 2DAFTAR ISI

KATA PENGANTARiDAFTAR ISIiBAB IiiPENDAHULUANii1.1Latar Belakangii1.2Rumusan Masalahiii1.3Tujuan PenulisaniiiBAB II1PENGENALAN SISTEM12.1Representasi Data Masukan22.2Mekanisme Sistem32.3Representasi Ouput Sistem4BAB III5ANALISIS DAN IMPLEMENTASI SISTEM53.1Analisis53.2Implementasi6BAB IV17PENUTUP174.1.Simpulan174.2.Saran17DAFTAR PUSTAKA18LAMPIRAN19

BAB IPENDAHULUAN1.1 Latar BelakangAplikasi permainan merupakan salah satu implementasi dari ilmu di bidang komputer. Inti dari sebuah aplikasi permainan adalah mengembangkan kemampuan otak untuk mengatur strategi, kecepatan, dan ketepatan dalam mencapai tujuan akhir. Salah satu contoh permainan adalah puzzle. Puzzle terdiri dari beberapa jenis, ada yang menggunakan angka, huruf, dan gambar. Dalam permainan puzzle, pemain diharapkan dapat mencapai tujuan akhir untuk membentuk sebuah puzzle menjadi sebuah gambar atau pola yang benar dengan waktu yang cepat. Algoritma A Star adalah algoritma pencarian graf yang menemukan jalur dari status awal ke status akhir. Algoritma ini menggunakan fungsi heuristic (biasanya didenotasikan dengan A*) untuk menentukan urutan dimana pencarian dilakukan dengan mengunjungi node dalam pohon. merepresentasikan biaya jalan yang paling efisien sampai ke tujuan. Fungsi heuristic yang digunakan algoritma A Star untuk memecahkan kasus bervariasi tergantung dari kasus yang akan dihadapi, misal untuk memecahkan kasus pencarian jalur terpendek dari satu ke kota lain menggunakan fungsi heuristic distance plus cost sedang untuk memecahkan kasus Puzzle-8, maka digunakan fungsi heuristic city block distance atau sering juga disebut dengan istilah manhattan distance. 1.2 Rumusan MasalahMenganalisis, memodelkan, serta mengimplementasikan algoritma A Star(A*) sebagai problem solving pada kasus game Puzzle-8.1.3 Tujuan PenulisanMengetahui cara memodelkan dan mengimplementasikan algoritma A Star pada kasus permainan puzzle-8.

BAB IIPENGENALAN SISTEMPuzzle-8 adalah representasi permainan teka-teki yang dapat diselesaikan dengan mengurutkan atau menyusun komponen-komponen pembentuknya sesuai dengan kondisi yang berurut. Komponen pada Puzzle-8 adalah berupa kotak-kotak bernomor yang dapat diacak sedemikian hingga menjadi suatu pola random yang dapat dicari jalan penyelesaiannya . Sesuai namanya, Puzzle-8 terdiri atas 8 kotak dan 1 tempat kosong yang dapat digerakkan dengan aturan tertentu. Aturan pergerakannya hanya berupa empat arah pergerakan, yaitu atas, bawah, kanan, dan kiri. Pada Puzzle-8, batasannya adalah ukuran 33. Sehingga, 8 kotak yang dimiliki hanya dapat bergerak dalam lingkup ukuran tersebut.Algoritma A Star merupakan salah satu algoritma yang menggunakan fungsi biaya. Algoritma A Star memeriksa kelayakan biaya yang diperlukan untuk mencapai suatu simpul dari sebuah simpul lain. Dalam kasus puzzle 8 ini, algoritma A Star membandingkan 2 posisi puzzle yaitu posisi puzzleawal (state awal) dengan posisi puzzle yang terurut dengan benar (state akhir). Berikut ini adalah algoritma A Star secara umum.

2.1 Representasi Data MasukanPada kasus puzzle ini diperlukan data masukkan berupa array 2 dimensi (matriks) yang telah diinisialisasi.private int[][] tileMatrix = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };Kemudian bilangan yang ada pada matriks tersebut aka diacak posisinya menggunakan method random yang telah disediakan oleh bahasa pemrograman java. Selain itu, diperlukan juga konstanta berupa array 2 dimensi yang berfungsi membandingkan kesesuaian posisi array yang telah diacak.private int[][] FinalState = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };Selain data masukan tersebut, Algoritma A* menggunakan dua senarai yaitu OPEN dan CLOSED. OPEN adalah senarai (list) yang digunakan untuk menyimpan simpul-simpul yang pernah dibangkitkan dan nilai heuristiknya telah dihitung tetapi belum terpilih sebagai simpul terbaik (smallest node) biasa juga disebut dengan istilah best node, dengan kata lain OPEN berisi simpul-simpul masih memiliki peluang untuk terpilih sebagai simpul terbaik, sedangkan CLOSED adalah senarai untuk menyimpan simpul-simpul yang sudah pernah dibangkitkan dan sudah pernah terpilih sebagai simpul terbaik. Artinya, CLOSED berisi simpul-simpul yang tidak mungkin terpilih sebagai simpul terbaik (peluang untuk terpilih sudah tertutup).2.2 Mekanisme SistemBerikut ini adalah gambaran sederhana mengenai arsitektur sistem yang dibuat. Dimana link list, list node, dan node merupakan struktur data yang dibutuhkan oleh algoritma A Star. Kemudian di algoritma A Star difungsikan untuk menentukan langkah yang diambil dalam permainan ini (problem solving).

Dalam program Puzzle-8 ini, Initial state di tentukan secara acak, dan dengan final state yang sudah ditentukan. Untuk memenangkan permainan, pemain harus mencapai final state (puzzle yang sudah terurut) dengan menekan tombol top (), bottom (), left (), dan right (). Selain itu, program juga akan memberikan solusi untuk menyelesaikan Puzzle-8 dengan metode A Star jika pemain menginginkannya. Berikut ini adalah alur permainan yang dibuat.

2.3 Representasi Ouput SistemOutput yang dihasilkan oleh system berupa array dua dimensi yang telah tersusun yaitu {{ 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }.

BAB IIIANALISIS DAN IMPLEMENTASI SISTEM3.1 AnalisisAlgoritma A Star merupakan salah satu algoritma yang menggunakan fungsi biaya (cost). Algoritma A Star memeriksa kelayakan biaya yang diperlukan untuk mencapai suatu simpul dari sebuah simpul lain. Dalam kasus Puzzle-8 ini, algoritma A Star membandingkan 2 posisi puzzle yaitu posisi puzzle awal (state awal) dengan posisi puzzle yang terurut dengan benar (state akhir). fungsi yang digunakan oleh algoritma A Star untuk menentukan cost-nya yaitu:f(n) = g(n) + h(n)dengan:g(n) = Jumlah pergerakan untuk mencapai final stateh(n) = Jumlah total gerakan vertikal dan horizontal yang diperlukan setiap kotak pada state-n untuk mencapai final state.Contoh penentuan heuristic:123

456

7B8

Nilai heuristic susunan diatas yaitu h(n)= 2 karena kotak-8 dan kotak kotak-B (blank) membutuhkan satu kali pergerakan untuk mencapai final state. Berikut ini adalah ilustrasi penyelesaian game Puzzle-8 menggunakan algoritma A*. Berikut ini ilustrasi cara kerja algoritma A* pada kasus permainan puzzle.

Pertama array dengan dimensi 3x3 akan diacak sehingga menghasilkan matriks sebagai berikut.123

745

986

n = 0, maka:f(0) = g(0) + h(0) = 0 + 6 = 6

1). Perulangan pertama (n = 1)Berdasarkan matriks diatas, diperoleh dua kemungkinan yaitu 7 geser ke bawah dan 8 geser ke kiri.(i). Tujuh geser ke bawah123f(1) = g(1) + h(1) = 1 + 6 = 7

945

786

(ii). Delapan geser ke kiri123f(1) = g(1) + h(1) = 1 + 6 = 7

745

896

F(1) bernilai sama, maka pilih salahsatu untuk state selanjutnya, missal state (i) dipilih. 2). Perulangan kedua (n = 2)Berdasarkan state yang terpilih dipeulangan pertama, diperoleh tiga kemungkinan yaitu 1 geser ke bawah, 4 geser ke kiri, dan 7 geser ke atas.(i). Satu geser ke bawah923f(2) = g(2) + h(2) = 2 + 8 = 10

145

786

(ii). Empat geser ke kiri123f(2) = g(2) + h(2) = 2 + 4 = 6

495

786

(iii). Tujuh geser ke atas123f(2) = g(2) + h(2) = 2 + 6 = 8

745

986

State (ii) menghasilkan f(n) yang paling kecil, maka state tersebut sebagai state selanjutnya.3). Perulangan ketigaBerdasarkan state yang terpilih dipeulangan kedua, diperoleh empat kemungkinan yaitu 2 geser ke bawah, 4 geser ke kanan, 5 geser ke kiri, dan 8 geser keatas.(i). Dua geser ke bawah193f(3) = g(3) + h(3) = 3 + 6 = 9

425

786

(ii). Empat geser ke kanan123f(3) = g(3) + h(3) = 3 + 6 = 9

945

786

(iii). Lima geser ke kiri123f(3) = g(3) + h(3) = 3 + 2 = 5

459

786

(iv). Delapan geser ke atas123f(3) = g(3) + h(3) = 3 + 4 = 7

485

796

State (iii) menghasilkan f(n) yang paling kecil, maka state tersebut sebagai state selanjutnya.4). Perulangan keempatBerdasarkan state yang terpilih dipeulangan ketiga, diperoleh tiga kemungkinan yaitu 3 geser ke bawah, 5 geser ke kanan, dan 6 geser keatas.(i). Tiga geser kebawah129f(4) = g(4) + h(4) = 4 + 4 = 8

453

786

(ii). Lima geser ke kanan123f(4) = g(4) + h(4) = 4 + 4 = 8

495

786

(iii). Enam geser keatas123f(4) = g(4) + h(4) = 4 + 0 = 4

456

789

State (iii) menghasilkan f(n) yang paling kecil dan f(n)=g(n) artinya ini merupakan final state dan perulangan berhenti diperulangan keempat.

3.2 Implementasi Inisialisasi variabel yang berkaitanpublic class Node {// deklarasi 9 kotak ke dalam node // stateprivate int[][] state = new int[3][3];private int h; // deklarasi fungsi heuristic Manhattanprivate int g;private int id;private int parentID;private int emptyX;private int emptyY;

public Node(){g = -1;id = -1;parentID = -1;}

// instansiasi node baru.public Node(int g, int[][] state, int id, int parentID) {this.g = g;setState(state);

this.id = id;this.parentID = parentID;}

// mengcopy semua variabel fungsipublic void copyAll(Node n) {setState(n.getState());h = n.getH();g = n.getG();id = n.id;parentID = n.getParentID();emptyX = n.getEmptyX();emptyY = n.getEmptyY();}

public int[][] getState() {return state;}

public void setState(int[][] state) {for (int i = 0; i < 3; i++)for (int j = 0; j < 3; j++)this.state[i][j] = state[i][j];calculateXY();calculateH();}

// menghitung xypublic void calculateXY() {for (int i = 0; i < 3; i++)for (int j = 0; j < 3; j++)if (state[i][j] == 9) {emptyX = i;emptyY = j;break;}}

public int getID() {return id;}

public int getParentID() {return parentID;}

public int getG() {return g;}

public int getH() {return h;}

public int getEmptyX() {return emptyX;}

public int getEmptyY() {return emptyY;}

public int getF() {return g + h;}

// menghitung hpublic void calculateH() {int tempH = 0;int FinalStateX = 0, FinalStateY = 0;for (int i = 0; i < 3; i++)for (int j = 0; j < 3; j++) {switch (state[i][j]) {case 1:FinalStateX = 0;FinalStateY = 0;break;case 2:FinalStateX = 0;FinalStateY = 1;break;case 3:FinalStateX = 0;FinalStateY = 2;break;case 4:FinalStateX = 1;FinalStateY = 0;break;case 5:FinalStateX = 1;FinalStateY = 1;break;case 6:FinalStateX = 1;FinalStateY = 2;break;case 7:FinalStateX = 2;FinalStateY = 0;break;case 8:FinalStateX = 2;FinalStateY = 1;break;case 9:FinalStateX = 2;FinalStateY = 2;break;}tempH += Math.abs(FinalStateX - i) + Math.abs(FinalStateY - j);}

this.h = tempH;}

}

public class ListNode {// nodeprivate Node node;// node berikutnyapublic ListNode nextNode;// node sebelumnyapublic ListNode previousNode;

// list node barupublic ListNode() {node = new Node();}

// list node barupublic ListNode(Node node) {this(node, null, null);}

// list node barupublic ListNode(Node node, ListNode previous, ListNode next) {this.node = node;previousNode = previous;nextNode = next;}

public Node getNode() {return node;}

public ListNode getNext() {return nextNode;}

public ListNode getPrevious() {return previousNode;}}

public class LinkList {// node pertamaprivate ListNode firstNode;// node terakhirprivate ListNode lastNode;

public LinkList() {firstNode = lastNode = null;}

public void insertAtBack(Node node) {if (isEmpty())firstNode = lastNode = new ListNode(node);else {ListNode newNode = new ListNode(node);lastNode.nextNode = newNode;newNode.previousNode = lastNode;lastNode = newNode;}}

public void insertAtFront(Node node) {if (isEmpty())firstNode = lastNode = new ListNode(node);else {ListNode newNode = new ListNode(node);newNode.nextNode = firstNode;firstNode.previousNode = newNode;firstNode = newNode;}}

public Node getSmallestNode() {

Node minimumNode = firstNode.getNode();ListNode current = firstNode.getNext();

while (current != null) {if (current.getNode().getF() < minimumNode.getF())minimumNode = current.getNode();current = current.getNext();}return minimumNode;}

public void removeNode(Node node) {if (isEmpty())return;else if (isSameState(node, firstNode.getNode()) && firstNode == lastNode) {firstNode = lastNode = null;return;} else if (isSameState(node, firstNode.getNode())) {firstNode = firstNode.getNext();firstNode.previousNode = null;return;} else if (isSameState(node, lastNode.getNode())) {lastNode = lastNode.getPrevious();lastNode.nextNode = null;} else {ListNode current = firstNode;while (current.getNext() != null) {if (isSameState(current.getNext().getNode(), node)) {current.nextNode.nextNode.previousNode = current;current.nextNode = current.getNext().getNext();return; // break} elsecurrent = current.nextNode;}}}

// cek apakah kosongpublic boolean isEmpty() {return firstNode == null;}

// cek apakah isipublic boolean alreadyExists(Node node) {if (!isEmpty()) {ListNode current = firstNode;while (current != null) {if (isSameState(current.getNode(), node))return true;elsecurrent = current.getNext();}return false;}return false;}

// cek apakah state samapublic boolean isSameState(Node A, Node B) {int[][] stateA = A.getState();int[][] stateB = B.getState();

for (int i = 0; i < 3; i++)for (int j = 0; j < 3; j++)if (stateA[i][j] != stateB[i][j])return false;return true;}

public ListNode getLastNode() {return lastNode;}

public ListNode getFirstNode() {return firstNode;}

// set list yang kosongpublic void setEmptyList() {firstNode = lastNode = null;}}

Meghitung nilai h(n)public void calculateH() {int tempH = 0;int FinalStateX = 0, FinalStateY = 0;for (int i = 0; i < 3; i++)for (int j = 0; j < 3; j++) {switch (state[i][j]) {case 1:FinalStateX = 0;FinalStateY = 0;break;case 2:FinalStateX = 0;FinalStateY = 1;break;case 3:FinalStateX = 0;FinalStateY = 2;break;case 4:FinalStateX = 1;FinalStateY = 0;break;case 5:FinalStateX = 1;FinalStateY = 1;break;case 6:FinalStateX = 1;FinalStateY = 2;break;case 7:FinalStateX = 2;FinalStateY = 0;break;case 8:FinalStateX = 2;FinalStateY = 1;break;case 9:FinalStateX = 2;FinalStateY = 2;break;}tempH += Math.abs(FinalStateX - i) + Math.abs(FinalStateY - j);}

this.h = tempH;}

Mendapatkan nilai g(n)public Node(int g, int[][] state, int id, int parentID) {this.g = g;setState(state);

this.id = id;this.parentID = parentID;}

Menghitung nilai f(n)

public int getF() {return g + h;}

BAB IVPENUTUP4.1. SimpulanAlgoritma A Star menghasilkan output yang baik karena algoritma tersebut pada game puzzle ini khusunya, memilih langkah perpindahan state berdasarkan cost sehingga pertimbangannya cukup baik. Dalam kondisi state yang acak dan rumit serta memiliki banyak kemungkinan solusi memungkinkan algoritma A* cocok untuk mencari solusi yang terbaik. Setiap pergerakan yang dilakukan pada kotak statusnya akan disimpan pada suatu list. List ini akan digunakan untuk melakukan pengecekan apakah kita sudah pernah membangun status tersebut atau belum agar kita tidak menggerakkan kotak yang sama berkali-kali ke status yang sama. Dengan menerapkan strategi ini, selain menemukan solusi, algoritma ini juga bisa menemukan langkah terpendek untuk mencapai solusi tersebut.4.2. SaranBeberapa saran yang dapat diberikan untuk membantu dalam pengembangan aplikasi ini lebih lanjut yaitu game dapat disajikan dalam bentuk gambar. Selain itu, apabila makalah ini dijadikan referensi penerapan A Star dalam kasus lain, diperlukan analisis dan perancangan ulang karena akan berbeda parameter cost-nya.

DAFTAR PUSTAKA

[1] Wennyi, Jayner . Artificial Intelligence - A Star . 8 November 2015.http://www.slideshare.net/jaylovejesusnwannabemusician/artificial-intelligence-a-star [2] Bendi, K. Jawa .Penerapan Algoritma A* Pada Aplikasi Puzzle. 8 November 2015. https://www.academia.edu/5795061/Penerapan_Algoritma_A_Pada_Aplikasi_Puzzle[3] Taufiq, Andik. 8-Puzzle Problem (Bagian 2). 10 November 2015.https://andiktaufiq.wordpress.com/2010/05/02/8-puzzle-problem-bagian-2/[4] Handayani Ritongga, Fitri. Variasi Algoritma A*. 8 November 2015.http://fitrihandayani.blog.upi.edu/variasi-algoritma-a/

LAMPIRAN1. Screenshoot antar muka

2. Screenshoot proses

3. Screenshoot hasil