BAB4_KBF_KELOMPOK2_TUGAS.docx

February 28, 2019 | Author: Ugo Rahvana | Category: N/A
Share Embed Donate


Short Description

Download BAB4_KBF_KELOMPOK2_TUGAS.docx...

Description

LABORATORIUM PEMBELAJARAN ILMU KOMPUTER FAKULTAS ILMU KOMPUTER UNIVERSITAS BRAWIJAYA

BAB  NAMA

 NIM

TANGGAL JENIS ASISTEN

: INFORMED SEARCH : -RENDY PUTRA JALIASMAR JALIASMAR -ABDUL KHALIK SEMBIRING -MUHAMMAD RIFQI -MUHAMMAD IQBAL ALVIN : -165150200111148 -165150200111148 -165150200111153 -165150207111076 -165150201111186 : 21/03/2018 : TUGAS : -DINDY FITRIANNORA -WINDYA HARTASIH

ACC

A. DEFINISI MASALAH Buatlah program (“untuk soal latihan praktikum nomor 3 b” atau “ untuk con toh masalah maze/labirin diatas dengan menggunakan algoritma A* dengan nilai f(n) = g(n)+h(n), misal g(n) adalah tingkat kedalaman penelusuran, dan h(n) adalah jarak Manhattan atau Euclidian”) dengan memodifikasi program  pada contoh program di-atas.

B. JAWAB Graph.java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43

package kb4; public class Graph { private int [][] dt1; private int current = 0; private class Node { private int data, jarak; private Node next; public Node (int dt, Node n, int jrk) { data = dt; next = n; jarak = jrk; } public int getDt() { return data; } public Node getNext() { return next; } public int getJarak() { return jarak; } } private Node[] node; private int jNode; public Graph(int n) { jNode = n; node = new Node[jNode]; for (int i = 0; i < jNode; i++) { node[i] = null; } dt1 = new int[n][n]; } public void addAdj (int head, int adj, int jarak) {

44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89

Node n = new Node(adj, node[head], jarak); node [head] = n; current++; dt1[head][adj]++; } public int[] arraylong(int [] d, int z){ int[] total = new int [d.length + 1]; for (int i = 0; i < d.length; i++) { total[1] = d[i]; } total[d.length] = z; return total; } public char ubah (int a){ switch (a){ case 0: return 'A'; case 1: return 'B'; case 2: return 'C'; case 3: return 'D'; case 4: return case 5: return case 6: return default: return

'E'; 'F'; 'G'; 'S';

} } public int[] getNode(int asal){ int[] jwb = new int[0]; Node n = node [asal]; while (n != null){ System.out.println("->" + ubah(n.getDt()) + " " + n.getJarak()); jwb = arraylong(jwb, n.getDt()); jwb = arraylong(jwb, n.getJarak()); n = n.getNext(); }

90 91 92

return jwb; } }

Astar.java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

package kb4; public class Astar {

22 23 24 25 26 27 28

as.addAdj(5, as.addAdj(6, as.addAdj(2, as.addAdj(3, as.addAdj(6, as.addAdj(3, as.addAdj(4,

29 30 31 32 33

as.addAdj(5, 3, 126); as.addAdj(5, 4, 148); as.addAdj(6, 5, 60);

34 35 36 37 38 39 40

Graph as; int[] ds = {180, 90, 89, 0, 110, 79, 100}; public Astar() { as = new Graph(7); as.addAdj(0, 1, 79); as.addAdj(0, 5, 81); as.addAdj(0, 6, 63); as.addAdj(1, 2, 131); as.addAdj(1, 3, 109); as.addAdj(1, 6, 55); as.addAdj(2, 3, 88); as.addAdj(3, 4, 92); as.addAdj(3, 5, 126); as.addAdj(4, 5, 148); as.addAdj(5, 6, 60); as.addAdj(1, 0, 79); 0, 0, 1, 1, 1, 2, 3,

81); 63); 131); 109); 55); 88); 92);

} public char ubah(int a){ switch (a){ case 0: return 'A'; case 1: return 'B'; case 2:

41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76

return case 3: return case 4: return case 5: return case 6: return default: return

'C'; 'D'; 'E'; 'F'; 'G'; 'S';

} } public boolean ceklist(int[] ko, int f){ boolean s = true; for (int i : ko){ if (i == f){ s = s && false; } } return s; } public void bintang(int n){ int now = n; int terkecil; int jalur[]; int kode[] = new int[0]; int f[]; while (now != 3){ System.out.println("Node saat ini : " + ubah(now)); System.out.println("perhitungan :"); terkecil = 1000; jalur = as.getNode(now); f = new int[(int) Math.floor(jalur.length / 2)];

77 78 79 80 81 82 83

for (int i = 0; i < f.length; i++){ f[i] = jalur[(i*2)+1] + ds[jalur[i*2]]; System.out.println(f[i] + " "); if((terkecil > f[i]) && ceklist(kode, jalur[i*2])){ terkecil = f[i]; } }

84 85 86 87 88 89 90 91

System.out.println(""); kode = as.arraylong(kode, now); for (int i = 0; i < f.length; i++) { if (terkecil == f[i]){ now = jalur[i*2]; } } System.out.println("Berpindah ke node : " + ubah(now));

92 93 94 95 96 97 98 99 100 101 102 103 104

if (now == 3){ kode = as.arraylong(kode, now); } } System.out.println("Tujuan ditemukan"); for (int i = 0; i < kode.length; i++) { System.out.println(ubah(kode[i]) + "->"); } System.out.println("finish"); }

}

Main.java 1 2 3 4 5 6 7 8

package kb4; public class Main { public static void main(String[] args) { Astar n = new Astar (); n.bintang(0); } }

Penjelasan Class Graph: Baris 12-16 : Konstruktor kelas Node dengan parameter int dt, Node n, dan int jarak. Baris 18-20: Method getDt dengan nilai kembalian value dari data. Baris 22-24: Method getNext dengan nilai kembalian value dari next. Baris 26-28: Method getJarak dengan nilai kembalian value dari jark. Baris 33-40: Konstraktor kelas Graph dengan parameter n Baris 42-47: Method addAdj dengan parameter int head, int adj, dan int jarak. Method ini berguna untuk menambah isi array. Baris 49-56: Method arraylong dengan parameter int array d, dan int z. Method ini  berguna untuk menghubungkan node.

Baris 58-77: Method ubah dengan parameter int a. Method ini berguna untuk mengubah value parameter a. Baris 79-89: Methood getNode dengan parameter int asal. Method ini berfungsi untuk memindahkan node saaat ini ke node yang terhubung dengan node awal dan mengembalikan jaraknya. Class Astar: Baris 7-32: Konstruktor kelas Astar untuk menambahkan nilai ke atribut as. Baris 34-53:Method ubah dengan parameter int a untuk mengubah value dari  parameter a. Baris 55-63: Method ceklist dengan parameter int array ko, dan int f. Method ini  berguna untuk mengecek apa jalur tersebut telah di lewati. Baris 65-101: Method bintang dengan parameter int n. Method ini merupakan method yang menjalankan algoritma A*. Class Main: Baris 4-7 : Method untuk menjalankan program.

Screenshot

C. Kesimpulan 1. Definisikan konsep dasar metode informed search menurut pemahaman anda! Jawab: Metode informed search merupakan metode yang memfokuskan pencarian pada suatu informasi agar proses pencarian lebih efisien.

2. Sebutkan kelebihan & kekurangan metode informed search! Jawab: Kelebihan: - Lebih efisien - Pencarian lebih cepat Kekurangan: - Algoritma lebih rumit - Membutuhkan space lebih besar 3. Jelaskan bentuk permasalahan yang hanya dapat diselesaikan menggunakan metode informed search! Jawab: Contohnya pada permasalahan pencarian jalur dari kota asal ke tujuan. Logaritma ini sangat berguna untuk menentukan jalur mana yang lebih efisien sehingga jarak yang ditempuh tidak terlalu jauh.

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF