best first search

9
Best First Search Algorithm-AI BEST FIRST SEARCH Kasus Travell Salesman Problem Representasi Tree Layout Project pada Netbeans 6.5 Source Code Project : Project ini terdiri dari 3 package yaitu : Search, Tree, dan Best First Search 1. Package BestFirstSearch Class Main.java /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package bestfirstsearch; public class Main { /** * @param args the command line arguments */ public static void main(String[] args) { 1

Upload: haryo

Post on 30-Jun-2015

358 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: BEST FIRST SEARCH

Best First Search Algorithm-AI

BEST FIRST SEARCHKasus Travell Salesman Problem

Representasi Tree

Layout Project pada Netbeans 6.5

Source Code Project :Project ini terdiri dari 3 package yaitu : Search, Tree, dan Best First Search1. Package BestFirstSearchClass Main.java /* * To change this template, choose Tools | Templates * and open the template in the editor. */

package bestfirstsearch;

public class Main {

/** * @param args the command line arguments */ public static void main(String[] args) {

1

Page 2: BEST FIRST SEARCH

// TODO code application logic here

Tree.Tree tree = new Tree.Tree ("S");//root S tree.AddNode("A",4); tree.AddNode("B",3); tree.AddNode("H",2); tree.MoveChild(0);//parentnya A tree.AddNode("B",5); tree.AddNode("D",5); tree.MoveChild(0);//parentnya B tree.AddNode("C",3); tree.MoveChild(0);//parentnya C tree.AddNode("E",2); tree.AddNode("D",5); tree.MoveChild(0);//parenntnya E tree.AddNode("Z",2); tree.MoveUp();//parentnya C tree.MoveChild(1);//parentnya D tree.AddNode("F",3); tree.MoveUp();//parentnya C tree.MoveUp();//parentnya B tree.MoveUp();//parentnya A tree.MoveChild(1);//parentnya D tree.AddNode("C",5); tree.AddNode("F",3); tree.MoveChild(0);//parentnya C tree.AddNode ("B",3); tree.AddNode("E",2); tree.MoveChild(1);//parentnya E tree.AddNode("Z",2); tree.MoveUp();//parentnya C tree.MoveUp();//parentnya D tree.MoveUp();//parentnya A tree.MoveUp();//parentnya root S tree.MoveChild(1);////parentnya B tree.AddNode("A",5); tree.AddNode("C",3); tree.MoveChild(0);//parentnya A tree.AddNode("D",5); tree.MoveChild(0);//parentnya D tree.AddNode("C",5); tree.AddNode("F",3); tree.MoveChild(0);//parentnya C tree.AddNode("E",2); tree.MoveChild(0);//parentnya E tree.AddNode("Z",2); tree.MoveUp();//parentnya C tree.MoveUp();//parentnya D tree.MoveUp();//parentnya A tree.MoveUp();//parentnya B tree.MoveChild(1);//parentnya C tree.AddNode("E",2); tree.AddNode("D",5); tree.MoveChild(0);//parentnya E tree.AddNode("Z",2); tree.MoveUp();//parentnya C tree.MoveChild(1); //parentnya D tree.AddNode("A",5); tree.AddNode("F",3);

System.out.println("Tree");

System.out.print(tree.DrawTree());

Search.Search sr = new Search.Search();

System.out.println(); System.out.println("best first search"); sr.bestfirstsearch(tree, "Z");

Page 3: BEST FIRST SEARCH

Best First Search Algorithm-AI

}

}2. Package Tree

Terdiri dari 2 class Tree.java dan Node.javaClass Tree.java/* * To change this template, choose Tools | Templates * and open the template in the editor. */package Tree;import java.util.List;import java.util.ArrayList;

public class Tree {

public Node nodTopNode = new Node(); public Node nodCurrentNode = nodTopNode; public String strName; public List <Node>nodArr= new ArrayList<Node>(); public int intLenght = 0;

public Tree(Node topNode) { this.nodTopNode = topNode; nodTopNode.intIndex = intLenght++; nodArr.add(nodTopNode); }

public Tree(String topNodeValue) { this.nodTopNode.strValue = topNodeValue; nodTopNode.intIndex = intLenght++; nodArr.add(nodTopNode); }

public String AddNode(String value, int jarak) { nodCurrentNode.AddChildNode(value,jarak); nodCurrentNode.nodChild.get(nodCurrentNode.nodChild.size()-1).intIndex = intLenght++; nodArr.add(nodCurrentNode.nodChild.get(nodCurrentNode.nodChild.size()-1)); return "Node Added";

}

public String MoveUp() { if (nodCurrentNode != nodTopNode) { nodCurrentNode = nodCurrentNode.nodParent; return nodCurrentNode.strValue; } else { return "Top Node Can't Move Up"; }

}

public String MoveChild(int index){ nodCurrentNode= nodCurrentNode.nodChild.get(index); return nodCurrentNode.strValue; }

public String DrawTree() { int i=0; int j=0; String treeDiagram=""; Node xNode = new Node();

3

Page 4: BEST FIRST SEARCH

for (i=0;i<this.intLenght;i++){ xNode=nodArr.get(i); String s=xNode.strValue; treeDiagram= treeDiagram + " P " + xNode.strValue + "-" + xNode.intIndex + "#"; for (j=0;j<xNode.nodChild.size();j++){ Node D= xNode.nodChild.get(j); treeDiagram= treeDiagram + " C" + j + ":" + D.strValue +"-"+D.intIndex + "jarak: "+D.jarak +"||"; } treeDiagram= treeDiagram + "\n"; } return treeDiagram;

}}

Class Node.java/* * To change this template, choose Tools | Templates * and open the template in the editor. */

package Tree;

import java.util.List;import java.util.ArrayList;

public class Node {

public String strValue; public int intIndex;

public Node nodParent=null; public List<Node> nodChild= new ArrayList<Node>();

public int jarak=0; public Node(){}

public Node(String value){ this.strValue=value; }

public void AddParentNode(Node parent){ this.nodParent= parent;

}

public void AddChildNode(Node Child){

this.nodChild.add(Child); Child.nodParent=this;

} public void AddChildNode(String value, int jarak){ this.nodChild.add(new Node(value)); this.nodChild.get(this.nodChild.size()-1).nodParent=this; this.nodChild.get(this.nodChild.size()-1).jarak=jarak; }}3. Package SearchClass Search.java/* * To change this template, choose Tools | Templates * and open the template in the editor. */package Search;

Page 5: BEST FIRST SEARCH

Best First Search Algorithm-AI

import java.util.ArrayList;

public class Search {

public Search() { }

public boolean bestfirstsearch(Tree.Tree tree, String goal) { ArrayList<Tree.Node> fringe = new ArrayList<Tree.Node>(); ArrayList<Tree.Node> visitedNode = new ArrayList<Tree.Node>(); String visited = ""; int totaljarak = 0; fringe.add(tree.nodTopNode); System.out.println("Goal : " + goal); //for (int i = 0; fringe.size() != 0;) { for (int i = 0; !fringe.get(i).strValue.equals(goal);) { System.out.print("Parent : " + fringe.get(i).strValue + " jumlah anak " + fringe.get(i).nodChild.size() + " : "); for (int h = 0; h < fringe.get(i).nodChild.size() - 1; h++) {//sorting masing masing child dari parent ascending int max = h; for (int k = h + 1; k < fringe.get(i).nodChild.size(); k++) { if (fringe.get(i).nodChild.get(k).jarak > fringe.get(i).nodChild.get(max).jarak) { max = k; } } Tree.Node tmp = new Tree.Node(); tmp = fringe.get(i).nodChild.get(h); fringe.get(i).nodChild.set(h, fringe.get(i).nodChild.get(max)); fringe.get(i).nodChild.set(max, tmp);

}

if (fringe.get(i).nodChild.size() != 0) { visitedNode.add(i, fringe.get(i)); visited = visited + " " + visitedNode.get(0).strValue; totaljarak = totaljarak + visitedNode.get(0).jarak; Tree.Node tempparent = new Tree.Node(); tempparent = fringe.get(i); fringe.remove(i); for (int j = 0; j < tempparent.nodChild.size(); j++) {

fringe.add(i, tempparent.nodChild.get(j));

/*if (fringe.get(i).strValue.equalsIgnoreCase(goal)) { for (int r = 0; r < fringe.size(); r++) { System.out.print(fringe.get(r).strValue + " "); } System.out.println(); System.out.println("Hasil Node Yang Dikunjungi : " + visited + " " + goal); return true; }*/ }

} else { fringe.remove(i); if (fringe.size() == 0) { return false; }

//System.out.print("vn : " + visitedNode.get(0).strValue); if (fringe.get(i + 1) == visitedNode.get(0)) { fringe.remove(i + 1); visitedNode.remove(0);

5

Page 6: BEST FIRST SEARCH

}

} if (fringe.get(i).strValue.equalsIgnoreCase(goal)) { for (int r = 0; r < fringe.size(); r++) { System.out.print(fringe.get(r).strValue + " "); } System.out.println(); System.out.println("Hasil Node Yang Dikunjungi : " + visited + " " + goal); System.out.println("Hasil Jarak Yang Ditempuh : " + (totaljarak+fringe.get(i).jarak));// + fringe.get(i).jarak); return true; } for (int r = 0; r < fringe.size(); r++) { System.out.print(fringe.get(r).strValue + " "); } System.out.println();

} return false; }}

Page 7: BEST FIRST SEARCH

Best First Search Algorithm-AI

Output :

Analisa :Pada main di bentuk sebuah objek tree dengan menggunakan class tree dengan parameter

konstruktor berupa string “S”. Berikut cuplikan konstruktornya

Dimana didalam Tree terdapat sebuah atributte nodTopNode bertipe Node yang dibentuk dari class Node.java. Dan akan mengeset nilai string strValue dari Node tersebut dengan “S” , jadi intinya adalah untuk membentuk root dari tree dengan nilai “S”. Setelah itu akan dibentuk tree dengan menggunakan pernyataan berikut :

7

Page 8: BEST FIRST SEARCH

Pernyataan diatas dimaksudkan untuk membentuk tree, method AddNode(“A”,4) pada objek tree dipanggil untuk menambahkan child pada parent pada saat ini. Jadi ketika method AddNode dipanggil akan disertakan jarak untuk dimasukkan sebagai atribut dari Node A. Pada Node A akan di set parentnya dengan S. Dan pada S akan dimasukkan node A pada atribut ArrayList NodeChild yang menunjukkan child-child dari tree tersebut. Berikut cuplikan methodnya :

Kemudian pada Addnode akan memanggil method AddChildNode pada class Node.java, berikut cuplikan methodnya :

Untuk mengganti node yang akan menjadi parent untuk ditambahkan nodeChild digunakan method MoveChild( index dari anak), setelah method tersebut dipanggil maka akan berpindah posisi node yang sebagai parent. Setelah itu jika dipanggil method AddNode maka parentnya akan berubah tidak lagi Node S. Berikut cuplikan methodnya :

nodCurrentNode diatas menunjukkan node apa yang sekarang menjadi parent dan siap untuk ditambahkan child.

Untuk berpindah dari node child ke parent digunakan method MoveUp ( ). Jika pada kondisi sekarang kita akan berpindah dari child satu ke child dua, maka kita harus berpindah dulu ke parent lalu memanggil method MoveChild (index). Berikut cuplikan method MoveUp( ).

Setelah tree selesai dibangun kemudian akan dilakukan pembuatan objek sr dari class Search untuk melakukan pencarian. Setelah objek sr dibentuk akan dilakukan pemanggilan method

Page 9: BEST FIRST SEARCH

Best First Search Algorithm-AI

bestfirstsearch ( ). Pada method bestfirstsearch juga dilakukan pengurutan jarak dari node child secara ascending guna dilakukan pencarian jarak terdekat untuk mencapai node tujuan yaitu Z. Untuk mengurutkan nilai jarak pada node child digunakan pernyataan beikut :

Kemudian setelah child dari node parent terurut maka childnode dengan jarak terkecil akan berada pada list dengan index nol dan dilakukan pengecekan dengan pernyataan berikut :

Jika nodechild pada index ke nol pada arraylist fringe adalah goal maka akan dilakukan pencetakan terhadap jalur yang dilalui yaitu visited , disini adalah S-B-C-E-Z, serta dilakukan pencetakan terhadap besar jarak yang dilalui yaitu 10.

*******

9