A. DEFINISI MASALAH
Input:
a. Kota asal
b. Kota Tujuan
Output:
a. Kota A ke kota D
b. Kota H ke kota N
c. Kota H ke kota U
d. Kota O ke H
e. Kota I ke A
B. JAWAB
A. Source Code
UCS.java
1 package ucs;
2 import java.util.ArrayList;
3 import java.util.Collections;
4 import java.util.Comparator;
5 import java.util.HashSet;
6 import java.util.List;
7 import java.util.PriorityQueue;
8 import java.util.Set;
9
10 public class UCS {
11
12 public static void findUCS(Node initialState, Node
goalState) {
13 initialState.pathCost = 0;
14 PriorityQueue<Node> queue = new
PriorityQueue<Node>(20,
new Comparator<Node>() {
15 public int compare(Node i, Node j) {
16 if (i.pathCost > j.pathCost) {
17 return 1;
18 } else if (i.pathCost < j.pathCost) {
19 return -1;
20 } else {
21 return 0;
22 }
23 }
24 }
25 );
26 queue.add(initialState);
27 Set<Node> explored = new HashSet<Node>();
28 List<Node> currentExplore = new ArrayList<Node>();
29 boolean found = false;
30 do {
31 Node current = queue.poll();
32 explored.add(current);
33 if (current.value.equals(goalState.value)) {
34 found = true;
35 }
36 for (Edge e : current.adjacencies) {
37 Node child = e.target;
38 double cost = e.cost;
39 if (!explored.contains(child) && !
40 queue.contains(child)) {
41 child.pathCost = current.pathCost + cost;
42 child.parent = current;
43 queue.add(child);
44 } else if ((queue.contains(child)) &&
45 (child.pathCost > (current.pathCost + cost))) {
46 child.parent = current;
47 child.pathCost = current.pathCost + cost;
48 queue.remove(child);
49 queue.add(child);
50 }
51 }
52 currentExplore.add(current);
53 } while (!queue.isEmpty() && (found == false));
54 System.out.println("Explored Node: " +
55 currentExplore);
56 }
57
58 public static List<Node> showShortest(Node target) {
59 List<Node> path = new ArrayList<Node>();
60 for (Node node = target; node != null; node =
61 node.parent) {
62 path.add(node);
63 }
64 Collections.reverse(path);
65 return path;
66 }
67 }
Node.java
1 package ucs;
2
3 public class Node {
4
5 public final String value;
6 public double pathCost;
7 public Edge[] adjacencies;
8 public Node parent;
9
10 public Node(String val) {
11 value = val;
12 }
13
14 public String toString() {
15 return value;
16 }
17 }
18
19 class Edge {
20
21 public final double cost;
22 public final Node target;
23
24 public Edge(Node targetNode, double costVal) {
25 cost = costVal;
26 target = targetNode;
27 }
28 }
Main.java
1 package ucs;
2
3 import java.util.List;
4
5 public class Main {
6
7 public static void main(String[] args) {
8 Node cityA = new Node("A");
9 Node cityB = new Node("B");
10 Node cityC = new Node("C");
11 Node cityD = new Node("D");
12 Node cityE = new Node("E");
13 Node cityF = new Node("F");
14 Node cityG = new Node("G");
15 Node cityH = new Node("H");
16 Node cityI = new Node("I");
17 Node cityJ = new Node("J");
18 Node cityK = new Node("K");
19 Node cityL = new Node("L");
20 Node cityM = new Node("M");
21 Node cityN = new Node("N");
22 Node cityO = new Node("O");
23 Node cityP = new Node("P");
24 Node cityQ = new Node("Q");
25 Node cityR = new Node("R");
26 Node cityS = new Node("S");
27 Node cityT = new Node("T");
28 Node cityU = new Node("U");
29 Node cityV = new Node("V");
30 Node cityX = new Node("X");
31
32
33 cityA.adjacencies = new Edge[]{
34 new Edge(cityB, 145),
35 new Edge(cityI, 148),
36 new Edge(cityX, 55),
37 new Edge(cityV, 167)
38 };
39 cityB.adjacencies = new Edge[]{
40 new Edge(cityA, 145),
41 new Edge(cityC, 98)
42 };
43 cityC.adjacencies = new Edge[]{
44 new Edge(cityB, 98),
45 new Edge(cityD, 212)
46 };
47 cityD.adjacencies = new Edge[]{
48 new Edge(cityC, 212),
49 new Edge(cityE, 102),
50 new Edge(cityK, 102)
51 };
52 cityE.adjacencies = new Edge[]{
53 new Edge(cityD, 102),
54 new Edge(cityM, 73),
55 new Edge(cityN, 97),
56 new Edge(cityF, 152),
57 new Edge(cityL, 95)
58 };
59 cityF.adjacencies = new Edge[]{
60 new Edge(cityE, 152),
61 new Edge(cityG, 83)
62 };
63 cityG.adjacencies = new Edge[]{
64 new Edge(cityF, 83),
65 new Edge(cityH, 75)
66 };
67 cityH.adjacencies = new Edge[]{
68 new Edge(cityG, 75)
69 };
70 cityI.adjacencies = new Edge[]{
71 new Edge(cityA, 148),
72 new Edge(cityJ, 75),
73 new Edge(cityQ, 25)
74 };
75 cityJ.adjacencies = new Edge[]{
76 new Edge(cityI, 75),
77 new Edge(cityK, 95)
78 };
79 cityK.adjacencies = new Edge[]{
80 new Edge(cityJ, 95),
81 new Edge(cityD, 102)
82 };
83 cityL.adjacencies = new Edge[]{
84 new Edge(cityE, 95)
85 };
86 cityM.adjacencies = new Edge[]{
87 new Edge(cityE, 73)
88 };
89 cityN.adjacencies = new Edge[]{
90 new Edge(cityE, 97),
91 new Edge(cityO, 25),
92 new Edge(cityP, 65)
93 };
94 cityO.adjacencies = new Edge[]{
95 new Edge(cityN, 25)
96 };
97 cityP.adjacencies = new Edge[]{
98 new Edge(cityN, 65)
99 };
100 cityQ.adjacencies = new Edge[]{
101 new Edge(cityI, 25),
102 new Edge(cityX, 30)
103 };
104 cityR.adjacencies = new Edge[]{
105 new Edge(cityS, 93),
106 new Edge(cityX, 57)
107 };
108 cityS.adjacencies = new Edge[]{
109 new Edge(cityR, 93),
110 new Edge(cityT, 112)
111 };
112 cityT.adjacencies = new Edge[]{
113 new Edge(cityS, 112),
114 new Edge(cityU, 75),
115 new Edge(cityV, 25)
116 };
117 cityU.adjacencies = new Edge[]{
118 new Edge(cityT, 75),
119 new Edge(cityV, 85)
120 };
121 cityV.adjacencies = new Edge[]{
122 new Edge(cityU, 85),
123 new Edge(cityT, 25),
124 new Edge(cityA, 167)
125 };
126 cityX.adjacencies = new Edge[]{
127 new Edge(cityA, 55),
128 new Edge(cityR, 57),
129 new Edge(cityQ, 30)
130 };
131
132 UCS.findUCS(cityI, cityA);
133 List<Node> path = UCS.showShortest(cityA);
134 System.out.println("Path: " + path);
System.out.println("Cost: " + cityA.pathCost);
135 }
136 }
UCS.java
1 Deklarasi package bernama ucs.
2 Deklarasi fungsi ArrayList dari kelas Java.
3 Deklarasi fungsi Collections dari kelas Java.
4 Deklarasi fungsi Comparator dari kelas Java.
5 Deklarasi fungsi HashSet dari kelas Java.
6 Deklarasi fungsi List dari kelas Java.
7 Deklarasi fungsi PriorityQueue dari kelas Java.
8 Deklarasi fungsi Set dari kelas Java.
10 Deklarasi kelas bernama findUCS dengan parameter Node asal dan Node
tujuan
12-67 Method findUCS digunakan untuk menentukan jarak terdekat dari
initalState menuju goalState yang merupakan paramater dalam method
findUCS pathCost memiliki nilai 0 yang berarti merupakan dari initalState.
PriorityQueue bernama queue melakukan override terhadap method
compare.Method compare bertugas dalam membandingkan pathCost antar
Node.Terdapat instansiasi objek berjenis Set dan List yang digunakan
untuk menyimpan Node yang akan terhubung.Selanjutnya, ada bagian
perulangan dengan seleksi kondisi yang bertindak untuk penelusuran
terhadapNode serta menjumlahkan cost ketika melakukan penelusuran
Node.Hasil dari method ini menampilkan langkah-langkah pencarian rute.
Method showShortest berguna untuk menampilkan jarak terdekat setalah
ditentukan initalState dan goalState.
Node.java
1 Deklarasi package dengan nama ucs
3-17 Deklarasi kelas dengan nama node yang berisikan deklarasi-deklarasi
atribut dari Node tersebut yang akan digunakan dalam Uniformed Search.
Node memiliki nilai yaitu value sebagai nama dari node, adjacencies
sebagai list node yang terhubung dengan node utama, pathCost untuk
memberikan nilai pada path yang terhubung dengan node ini. Node parent
sebagai nilai node parent dari node ini. terdapat constructor untuk
memberikan nilai pada object node berupa string. terdapat method toString
untuk mencetak nilai dari node
19-28 Deklarasi method Edge yang berisikan deklarasi-deklarasi atribut dari
Edge sendiri yang bertujuan untuk menyambungkan antara satu node
dengan node yang lain. Kemudian jalur dari node satu dengan node lain
akan diberi cost. Terdapat constructor untuk memberikan nilai pada atribut
targetNode dan costVal.
Main.java
1 Deklarasi package dengan nama ucs
3 Deklarasi kelas dengan nama main class ini terdapat method main yang
dapat melakukan inisialisasi node dengan parameter nama kota. Kemudian
membuat koneksi dari node kepada node lain dan menambahkan cost darij
alur tersebut. Diakhir dari program akan mengeluarkan jalur dari
penelusuran, jalur terdekat dan nilai dari path
8-30 Instansiasi objek Node dengan parameter String
33-130 Pemanggilan variable adjencencies oleh objek tertentu dengan parameter
objek tertentu terhubung dengan node apa saja dan jaraknya berapa.
132 Pemanggilan method findUCS dengan parameter inputan initial state dan
goal state.
133 Instansiasi List path dengan method showShortest dengan parameter goal
state.
134 Mencetak jalur yang ditempuh dari state awal hingga goal state.
135 Tanda tutup method main.
136 Tanda tutup kelas.
C. Screenshot
a. Kota A ke kota D
b. Kota H ke kota N
c. Kota H ke kota U
d. Kota O ke H
e. Kota I ke A
D. KESIMPULAN