+
+
+
+
diff --git a/CS3642-Artificial_Intelligence.iml b/CS3642-Artificial_Intelligence.iml
index 8e1b626..fbabc09 100644
--- a/CS3642-Artificial_Intelligence.iml
+++ b/CS3642-Artificial_Intelligence.iml
@@ -1,12 +1,9 @@
-
-
-
+
+
+
-
-
-
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..593a0a3
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,17 @@
+
+
+ 4.0.0
+
+ edu.jturn.cs3642
+ CS3642-Artificial_Intelligence
+ 1.0
+
+
+ 19
+ 19
+ UTF-8
+
+
+
\ No newline at end of file
diff --git a/src/Assignments/A1/Driver.java b/src/Assignments/A1/Driver.java
deleted file mode 100644
index c35a5ff..0000000
--- a/src/Assignments/A1/Driver.java
+++ /dev/null
@@ -1,115 +0,0 @@
-package Assignments.A1;
-
-// Potentially will be changed to an UI Implementation with JavaFX if time permits.
-
-import Assignments.A1.models.Board;
-import Assignments.A1.models.BoardGenerator;
-import Assignments.A1.models.BoardNode;
-import Assignments.A1.solving_algorithms.BFS;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.PriorityQueue;
-
-/**
- * Board will be used to save locations in a 2D array.
- *
- * The design of the board locations will be numbered like so:
- * 0 1 2
- * 3 4 5
- * 6 7 8
- *
- * 1 2 3
- * 8 0 4
- * 7 6 5
- *
- * The values will be specified with an int. Must be between (inclusive) 1-8.
- * The empty spot will be represented with null.
- */
-public class Driver {
-
- public static void main(String[] args) {
- ArrayList timer = new ArrayList<>();
- int successes = 0;
- int runs = 1;
- BoardNode node = null;
- for (int run = 0; run < runs; run++) {
- Board board = BoardGenerator.generateBoard();
-// DFS solver = new DFS();
- BFS solver = new BFS();
-// UCS solver = new UCS();
- Date start = new Date();
- BoardNode result = solver.traverse(board);
- Date end = new Date();
- if (result.board != null) {
- long runtime = end.getTime() - start.getTime();
- timer.add(runtime);
- successes++;
- node = result;
- }
- }
- long total = 0;
- for (int i = 0; i < timer.size(); i++) {
- total += timer.get(i);
- System.out.println("Run " + (i + 1) + ": " + timer.get(i));
- }
- long average = total / (long) timer.size();
- System.out.println("Average Runtime: " + average);
- System.out.println("Number of successful solves: " + successes + "/" + runs);
-
- String result = printTotalHierarchy(node);
- System.out.println(result);
-
- }
-
-
-// public static void main(String[] args) {
-// int[] values = {1, 2, 3, 8, 0, 5, 4, 7, 6};
-// BoardNode node = new BoardNode(new Board(values), null);
-// System.out.println(node.heuristic);
-// }
-
-
- private static String printTotalHierarchy(BoardNode root, int depth, boolean hasMoreChildren) {
- String result = "";
- for (int i = 0; i < depth - 1; i++) {
- result += "│ ";
- }
- if (hasMoreChildren) {
- result += "├── " + root.board.toString() + System.lineSeparator();
- } else {
- result += "└── " + root.board.toString() + System.lineSeparator();
- }
-
- for (int i = 0; i < root.children.size(); i++) {
- if (i == root.children.size() - 1) {
- result += printTotalHierarchy(root.children.get(i), depth+1, false);
- } else {
- result += printTotalHierarchy(root.children.get(i), depth+1, true);
- }
- }
- return result;
- }
-
- public static String printTotalHierarchy(BoardNode solved) {
- BoardNode root = null;
- while (solved.parent != null) {
- solved = solved.parent;
- }
- root = solved;
-
- String result = root.board.toString() + System.lineSeparator();
- if (root.children.size() == 1) {
- result += printTotalHierarchy(root.children.get(0), 1, false);
- } else {
- for (int i = 0; i < root.children.size(); i++) {
- if (i == root.children.size() - 1) {
- result += printTotalHierarchy(root.children.get(i), 1, false);
- } else {
- result += printTotalHierarchy(root.children.get(i), 1, true);
- }
- }
- }
- return result;
- }
-}
diff --git a/src/main/java/Assignments/A1/Driver.java b/src/main/java/Assignments/A1/Driver.java
new file mode 100644
index 0000000..2f3f895
--- /dev/null
+++ b/src/main/java/Assignments/A1/Driver.java
@@ -0,0 +1,167 @@
+package Assignments.A1;
+
+// Potentially will be changed to an UI Implementation with JavaFX if time permits.
+
+import Assignments.A1.models.Board;
+import Assignments.A1.models.BoardGenerator;
+import Assignments.A1.models.BoardNode;
+import Assignments.A1.solving_algorithms.AStar;
+import Assignments.A1.solving_algorithms.BFS;
+import Assignments.A1.solving_algorithms.UCS;
+
+import java.awt.*;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.PriorityQueue;
+
+/**
+ * Board will be used to save locations in a 2D array.
+ *
+ * The design of the board locations will be numbered like so:
+ * 0 1 2
+ * 3 4 5
+ * 6 7 8
+ *
+ * 1 2 3
+ * 8 0 4
+ * 7 6 5
+ *
+ * The values will be specified with an int. Must be between (inclusive) 1-8.
+ * The empty spot will be represented with null.
+ */
+public class Driver {
+
+ public static void main(String[] args) {
+ ArrayList timer = new ArrayList<>();
+ int successes = 0;
+ int runs = 1;
+ BoardNode node = null;
+ for (int run = 0; run < runs; run++) {
+ Board board = BoardGenerator.generateBoard();
+// DFS solver = new DFS();
+// BFS solver = new BFS();
+// UCS solver = new UCS();
+ AStar solver = new AStar();
+ Date start = new Date();
+ BoardNode result = solver.traverse(board);
+ Date end = new Date();
+ if (result.board != null) {
+ long runtime = end.getTime() - start.getTime();
+ timer.add(runtime);
+ successes++;
+ node = result;
+ }
+ }
+ long total = 0;
+ for (int i = 0; i < timer.size(); i++) {
+ total += timer.get(i);
+ System.out.println("Run " + (i + 1) + ": " + timer.get(i));
+ }
+ long average = total / (long) timer.size();
+ System.out.println("Average Runtime: " + average);
+ System.out.println("Number of successful solves: " + successes + "/" + runs);
+
+ StringBuffer result = printTotalHierarchy(node);
+ writeToFile("AStar", result);
+ }
+
+
+// public static void main(String[] args) {
+// int[] values = {1, 2, 3, 8, 0, 5, 4, 7, 6};
+// BoardNode node = new BoardNode(new Board(values), null);
+// System.out.println(node.heuristic);
+// }
+
+
+ private static StringBuffer printTotalHierarchy(BoardNode root, int depth, boolean hasMoreChildren) {
+ StringBuffer output = new StringBuffer();
+ for (int i = 0; i < depth - 1; i++) {
+ output.append("│ ");
+ }
+ if (hasMoreChildren) {
+ output.append("├── ").append(root.board.toString()).append(System.lineSeparator());
+ } else {
+ output.append("└── ").append(root.board.toString()).append(System.lineSeparator());
+ }
+
+ for (int i = 0; i < root.children.size(); i++) {
+ if (i == root.children.size() - 1) {
+ output.append(printTotalHierarchy(root.children.get(i), depth+1, false));
+ } else {
+ output.append(printTotalHierarchy(root.children.get(i), depth+1, true));
+ }
+ }
+ return output;
+ }
+
+ public static StringBuffer printTotalHierarchy(BoardNode solved) {
+ BoardNode root = null;
+ while (solved.parent != null) {
+ solved = solved.parent;
+ }
+ root = solved;
+
+ StringBuffer output = new StringBuffer();
+ output.append(root.board.toString()).append(System.lineSeparator());
+ if (root.children.size() == 1) {
+ output.append(printTotalHierarchy(root.children.get(0), 1, false));
+ } else {
+ for (int i = 0; i < root.children.size(); i++) {
+ if (i == root.children.size() - 1) {
+ output.append(printTotalHierarchy(root.children.get(i), 1, false));
+ } else {
+ output.append(printTotalHierarchy(root.children.get(i), 1, true));
+ }
+ }
+ }
+ return output;
+ }
+
+ private static void writeToFile(String name, StringBuffer values) {
+ File directory = new File("src/Assignments/A1/results");
+ if (!directory.exists()) {
+ directory.mkdirs();
+ System.out.println("Creating Directory: results");
+ }
+
+ File output = new File(directory, name + ".txt");
+
+ try {
+ if (!output.createNewFile()) {
+ System.out.println("File Already Exists: " + name + ".txt");
+ } else {
+ System.out.println("File Created: " + name + ".txt");
+ }
+ } catch (IOException e) {
+ System.err.println("Error creating file: " + e.getMessage());
+ }
+
+ try (FileWriter out = new FileWriter(output)) {
+ out.write(values.toString());
+ System.out.println("Data written to file: " + name + ".txt");
+ } catch (IOException e) {
+ System.err.println("Error writing to file: " + e.getMessage());
+ }
+
+ openDirectoryFile(output);
+ }
+
+ private static void openDirectoryFile(File open) {
+ if (!Desktop.isDesktopSupported() || !Desktop.getDesktop().isSupported(Desktop.Action.OPEN)) {
+ System.out.println("Desktop is not supported");
+ return;
+ }
+ Desktop desktop = Desktop.getDesktop();
+ try {
+ desktop.open(open);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ }
+
+}
diff --git a/src/Assignments/A1/models/Board.java b/src/main/java/Assignments/A1/models/Board.java
similarity index 100%
rename from src/Assignments/A1/models/Board.java
rename to src/main/java/Assignments/A1/models/Board.java
diff --git a/src/Assignments/A1/models/BoardGenerator.java b/src/main/java/Assignments/A1/models/BoardGenerator.java
similarity index 100%
rename from src/Assignments/A1/models/BoardGenerator.java
rename to src/main/java/Assignments/A1/models/BoardGenerator.java
diff --git a/src/Assignments/A1/models/BoardNode.java b/src/main/java/Assignments/A1/models/BoardNode.java
similarity index 93%
rename from src/Assignments/A1/models/BoardNode.java
rename to src/main/java/Assignments/A1/models/BoardNode.java
index 5c7d332..cf45344 100644
--- a/src/Assignments/A1/models/BoardNode.java
+++ b/src/main/java/Assignments/A1/models/BoardNode.java
@@ -6,8 +6,7 @@ import java.util.List;
public class BoardNode implements Comparable {
public BoardNode parent;
- public int heuristic;
- public int cost;
+ public int heuristic, cost, expected;
public Board board;
public List children;
@@ -16,12 +15,13 @@ public class BoardNode implements Comparable {
this.parent = parent;
this.heuristic = this.getHeuristic();
this.cost = this.getActualCost();
+ this.expected = this.cost + this.expected;
this.children = new ArrayList<>();
}
private int getActualCost() {
if (this.parent != null) {
- return this.parent.cost + 1;
+ return this.parent.cost + 10;
} else {
return 0;
}
diff --git a/src/Assignments/A1/models/Move.java b/src/main/java/Assignments/A1/models/Move.java
similarity index 100%
rename from src/Assignments/A1/models/Move.java
rename to src/main/java/Assignments/A1/models/Move.java
diff --git a/src/Assignments/A1/models/Pair.java b/src/main/java/Assignments/A1/models/Pair.java
similarity index 100%
rename from src/Assignments/A1/models/Pair.java
rename to src/main/java/Assignments/A1/models/Pair.java
diff --git a/src/Assignments/A1/models/Piece.java b/src/main/java/Assignments/A1/models/Piece.java
similarity index 100%
rename from src/Assignments/A1/models/Piece.java
rename to src/main/java/Assignments/A1/models/Piece.java
diff --git a/src/Assignments/A1/performance_stats/BFS.txt b/src/main/java/Assignments/A1/performance_stats/BFS.txt
similarity index 100%
rename from src/Assignments/A1/performance_stats/BFS.txt
rename to src/main/java/Assignments/A1/performance_stats/BFS.txt
diff --git a/src/Assignments/A1/performance_stats/DFS.txt b/src/main/java/Assignments/A1/performance_stats/DFS.txt
similarity index 100%
rename from src/Assignments/A1/performance_stats/DFS.txt
rename to src/main/java/Assignments/A1/performance_stats/DFS.txt
diff --git a/src/Assignments/A1/resources/Parameters.java b/src/main/java/Assignments/A1/resources/Parameters.java
similarity index 100%
rename from src/Assignments/A1/resources/Parameters.java
rename to src/main/java/Assignments/A1/resources/Parameters.java
diff --git a/src/Assignments/A1/solving_algorithms/AStar.java b/src/main/java/Assignments/A1/solving_algorithms/AStar.java
similarity index 84%
rename from src/Assignments/A1/solving_algorithms/AStar.java
rename to src/main/java/Assignments/A1/solving_algorithms/AStar.java
index 169081d..667148b 100644
--- a/src/Assignments/A1/solving_algorithms/AStar.java
+++ b/src/main/java/Assignments/A1/solving_algorithms/AStar.java
@@ -14,7 +14,7 @@ public class AStar {
private final HashSet visited = new HashSet<>();
public BoardNode traverse(Board root) {
- PriorityQueue boards = new PriorityQueue<>(new UCSPriority());
+ PriorityQueue boards = new PriorityQueue<>(new AStarPriority());
boards.add(new BoardNode(root, null));
BoardNode node = null;
Board current = new Board(root);
@@ -29,7 +29,9 @@ public class AStar {
for (Move move : children) {
Board child = new Board(node.board);
child.swap(move);
- boards.add(new BoardNode(child, node));
+ BoardNode childNode = new BoardNode(child, node);
+ boards.add(childNode);
+ node.addChild(childNode);
}
}
return node;
@@ -39,6 +41,6 @@ public class AStar {
class AStarPriority implements Comparator {
@Override
public int compare(BoardNode o1, BoardNode o2) {
- return Integer.compare(o2.cost, o1.cost);
+ return Integer.compare(o1.expected, o2.expected);
}
}
diff --git a/src/Assignments/A1/solving_algorithms/BFS.java b/src/main/java/Assignments/A1/solving_algorithms/BFS.java
similarity index 100%
rename from src/Assignments/A1/solving_algorithms/BFS.java
rename to src/main/java/Assignments/A1/solving_algorithms/BFS.java
diff --git a/src/Assignments/A1/solving_algorithms/DFS.java b/src/main/java/Assignments/A1/solving_algorithms/DFS.java
similarity index 96%
rename from src/Assignments/A1/solving_algorithms/DFS.java
rename to src/main/java/Assignments/A1/solving_algorithms/DFS.java
index 643fff9..a79ec3d 100644
--- a/src/Assignments/A1/solving_algorithms/DFS.java
+++ b/src/main/java/Assignments/A1/solving_algorithms/DFS.java
@@ -5,7 +5,6 @@ import Assignments.A1.models.BoardGenerator;
import Assignments.A1.models.Move;
import Assignments.A1.models.Pair;
import Assignments.A1.resources.Parameters;
-import org.junit.experimental.theories.internal.ParameterizedAssertionError;
import java.util.*;
diff --git a/src/Assignments/A1/solving_algorithms/UCS.java b/src/main/java/Assignments/A1/solving_algorithms/UCS.java
similarity index 89%
rename from src/Assignments/A1/solving_algorithms/UCS.java
rename to src/main/java/Assignments/A1/solving_algorithms/UCS.java
index 5fd307a..d0a4cb9 100644
--- a/src/Assignments/A1/solving_algorithms/UCS.java
+++ b/src/main/java/Assignments/A1/solving_algorithms/UCS.java
@@ -29,7 +29,9 @@ public class UCS {
for (Move move : children) {
Board child = new Board(node.board);
child.swap(move);
- boards.add(new BoardNode(child, node));
+ BoardNode childNode = new BoardNode(child, node);
+ boards.add(childNode);
+ node.addChild(childNode);
}
}
return node;