Implemented iteration counter and modified some doucmentation.
This commit is contained in:
parent
3ac16301fb
commit
136c78cd9d
@ -1,10 +1,11 @@
|
|||||||
<component name="ProjectRunConfigurationManager">
|
<component name="ProjectRunConfigurationManager">
|
||||||
<configuration default="false" name="CS3642-Artificial_Intelligence [javafx:run]" type="MavenRunConfiguration" factoryName="Maven" nameIsGenerated="true">
|
<configuration default="false" name="CS3642-Artificial_Intelligence [javafx:run]" type="MavenRunConfiguration" factoryName="Maven" activateToolWindowBeforeRun="false" nameIsGenerated="true">
|
||||||
<MavenSettings>
|
<MavenSettings>
|
||||||
<option name="myGeneralSettings" />
|
<option name="myGeneralSettings" />
|
||||||
<option name="myRunnerSettings" />
|
<option name="myRunnerSettings" />
|
||||||
<option name="myRunnerParameters">
|
<option name="myRunnerParameters">
|
||||||
<MavenRunnerParameters>
|
<MavenRunnerParameters>
|
||||||
|
<option name="cmdOptions" />
|
||||||
<option name="profiles">
|
<option name="profiles">
|
||||||
<set />
|
<set />
|
||||||
</option>
|
</option>
|
||||||
@ -17,6 +18,9 @@
|
|||||||
<option name="profilesMap">
|
<option name="profilesMap">
|
||||||
<map />
|
<map />
|
||||||
</option>
|
</option>
|
||||||
|
<option name="projectsCmdOptionValues">
|
||||||
|
<list />
|
||||||
|
</option>
|
||||||
<option name="resolveToWorkspace" value="false" />
|
<option name="resolveToWorkspace" value="false" />
|
||||||
<option name="workingDirPath" value="$PROJECT_DIR$" />
|
<option name="workingDirPath" value="$PROJECT_DIR$" />
|
||||||
</MavenRunnerParameters>
|
</MavenRunnerParameters>
|
||||||
|
9
src/main/java/Assignments/A1/GUILauncher.java
Normal file
9
src/main/java/Assignments/A1/GUILauncher.java
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
package Assignments.A1;
|
||||||
|
|
||||||
|
public class GUILauncher {
|
||||||
|
|
||||||
|
public static void main(final String[] args) {
|
||||||
|
MainScene.main(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -6,7 +6,7 @@ import javafx.scene.Parent;
|
|||||||
import javafx.scene.Scene;
|
import javafx.scene.Scene;
|
||||||
import javafx.stage.Stage;
|
import javafx.stage.Stage;
|
||||||
|
|
||||||
public class GUIDriver extends Application {
|
public class MainScene extends Application {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void start(Stage stage) throws Exception {
|
public void start(Stage stage) throws Exception {
|
@ -29,9 +29,6 @@ public class BoardViewCodeBehind {
|
|||||||
@FXML
|
@FXML
|
||||||
private ToggleButton expanded;
|
private ToggleButton expanded;
|
||||||
|
|
||||||
@FXML
|
|
||||||
private ToggleButton showOnlySolvedPath;
|
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private MenuItem AStar;
|
private MenuItem AStar;
|
||||||
|
|
||||||
@ -44,6 +41,12 @@ public class BoardViewCodeBehind {
|
|||||||
@FXML
|
@FXML
|
||||||
private MenuItem UCS;
|
private MenuItem UCS;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private Button openPerformance;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private Button runPerformanceCHeck;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private Button solve_button;
|
private Button solve_button;
|
||||||
|
|
||||||
@ -53,6 +56,9 @@ public class BoardViewCodeBehind {
|
|||||||
@FXML
|
@FXML
|
||||||
private Label no_solv_alg_err;
|
private Label no_solv_alg_err;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private Label iteration_count;
|
||||||
|
|
||||||
private MainViewModel viewModel;
|
private MainViewModel viewModel;
|
||||||
|
|
||||||
public BoardViewCodeBehind() {
|
public BoardViewCodeBehind() {
|
||||||
@ -71,10 +77,18 @@ public class BoardViewCodeBehind {
|
|||||||
this.expanded.selectedProperty().bindBidirectional(viewModel.expandedProperty());
|
this.expanded.selectedProperty().bindBidirectional(viewModel.expandedProperty());
|
||||||
this.alg_speed.textProperty().bindBidirectional(viewModel.algSpeedProperty());
|
this.alg_speed.textProperty().bindBidirectional(viewModel.algSpeedProperty());
|
||||||
this.disclaimer.visibleProperty().bindBidirectional(viewModel.disclaimerProperty());
|
this.disclaimer.visibleProperty().bindBidirectional(viewModel.disclaimerProperty());
|
||||||
|
this.runPerformanceCHeck.visibleProperty().bindBidirectional(viewModel.runPerfProperty());
|
||||||
|
this.openPerformance.visibleProperty().bindBidirectional(viewModel.openPerfProperty());
|
||||||
|
this.iteration_count.textProperty().bindBidirectional(viewModel.iterationCounterProperty());
|
||||||
|
|
||||||
this.current_board.textProperty().setValue(new Board().toString());
|
this.current_board.textProperty().setValue(new Board().toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
void runPerformanceCheck(ActionEvent event) {
|
||||||
|
this.viewModel.runPerformanceCheck();
|
||||||
|
}
|
||||||
|
|
||||||
public void onGenerateBoard(ActionEvent actionEvent) {
|
public void onGenerateBoard(ActionEvent actionEvent) {
|
||||||
this.viewModel.generateBoard();
|
this.viewModel.generateBoard();
|
||||||
}
|
}
|
||||||
@ -97,6 +111,11 @@ public class BoardViewCodeBehind {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
void openPerformance(ActionEvent event) {
|
||||||
|
this.viewModel.openPerf();
|
||||||
|
}
|
||||||
|
|
||||||
public void onDFS(ActionEvent actionEvent) {
|
public void onDFS(ActionEvent actionEvent) {
|
||||||
viewModel.setSelectedAlg("DFS");
|
viewModel.setSelectedAlg("DFS");
|
||||||
this.menu_alg.textProperty().set(this.menu_alg.getItems().get(0).textProperty().get());
|
this.menu_alg.textProperty().set(this.menu_alg.getItems().get(0).textProperty().get());
|
||||||
|
@ -10,6 +10,7 @@ import Assignments.A1.solving_algorithms.comparators.BFS;
|
|||||||
import Assignments.A1.solving_algorithms.DFS;
|
import Assignments.A1.solving_algorithms.DFS;
|
||||||
import Assignments.A1.solving_algorithms.comparators.UCS;
|
import Assignments.A1.solving_algorithms.comparators.UCS;
|
||||||
import javafx.beans.property.*;
|
import javafx.beans.property.*;
|
||||||
|
import javafx.scene.control.Alert;
|
||||||
import javafx.scene.control.TreeItem;
|
import javafx.scene.control.TreeItem;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
@ -17,32 +18,91 @@ import java.util.Stack;
|
|||||||
|
|
||||||
public class MainViewModel {
|
public class MainViewModel {
|
||||||
|
|
||||||
|
/* Private Fields used to bind */
|
||||||
private StringProperty currentBoardProperty, algSpeedProperty;
|
private StringProperty currentBoardProperty, algSpeedProperty;
|
||||||
private BooleanProperty expanded, DFS, UCS, BFS, AStar, solvingAlgErr, genBoardErr, disclaimer;
|
private StringProperty iterationCounter;
|
||||||
private String selectedAlg;
|
private BooleanProperty expanded, DFS, UCS, BFS, AStar, solvingAlgErr, genBoardErr, disclaimer, openPerf, runPerf;
|
||||||
|
|
||||||
private BoardNode current = new BoardNode(new Board(), null);
|
private BoardNode current = new BoardNode(new Board(), null);
|
||||||
private TreeItem<BoardNode> solvedRootNode = null;
|
private TreeItem<BoardNode> solvedRootNode = null;
|
||||||
private BoardNode solvedRootBoardNode = null;
|
|
||||||
|
|
||||||
|
/* Private Fields used for traversing/creating nodes. */
|
||||||
|
private BoardNode solvedRootBoardNode = null;
|
||||||
|
private long[][] hasRanPerformance;
|
||||||
|
private String selectedAlg;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes all the Properties and initial values for any fields.
|
||||||
|
*
|
||||||
|
* @precondition none
|
||||||
|
* @postcondition a VM is created.
|
||||||
|
*/
|
||||||
public MainViewModel() {
|
public MainViewModel() {
|
||||||
this.currentBoardProperty = new SimpleStringProperty();
|
this.currentBoardProperty = new SimpleStringProperty();
|
||||||
this.algSpeedProperty = new SimpleStringProperty();
|
this.algSpeedProperty = new SimpleStringProperty();
|
||||||
this.disclaimer = new SimpleBooleanProperty();
|
this.disclaimer = new SimpleBooleanProperty();
|
||||||
this.expanded = new SimpleBooleanProperty();
|
this.expanded = new SimpleBooleanProperty();
|
||||||
|
this.openPerf = new SimpleBooleanProperty();
|
||||||
|
this.runPerf = new SimpleBooleanProperty();
|
||||||
this.DFS = new SimpleBooleanProperty();
|
this.DFS = new SimpleBooleanProperty();
|
||||||
this.UCS = new SimpleBooleanProperty();
|
this.UCS = new SimpleBooleanProperty();
|
||||||
this.BFS = new SimpleBooleanProperty();
|
this.BFS = new SimpleBooleanProperty();
|
||||||
this.AStar = new SimpleBooleanProperty();
|
this.AStar = new SimpleBooleanProperty();
|
||||||
|
this.iterationCounter = new SimpleStringProperty();
|
||||||
|
|
||||||
this.solvingAlgErr = new SimpleBooleanProperty();
|
this.solvingAlgErr = new SimpleBooleanProperty();
|
||||||
this.genBoardErr = new SimpleBooleanProperty();
|
this.genBoardErr = new SimpleBooleanProperty();
|
||||||
this.solvingAlgErr.set(false);
|
this.solvingAlgErr.set(false);
|
||||||
this.genBoardErr.set(false);
|
this.genBoardErr.set(false);
|
||||||
|
|
||||||
|
this.hasRanPerformance = new long[4][102];
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getSelectedAlg() {
|
|
||||||
return this.selectedAlg;
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public void runPerformanceCheck() {
|
||||||
|
Solver solver = null;
|
||||||
|
int alg = -1;
|
||||||
|
if (this.selectedAlg.equals("DFS") && this.hasRanPerformance[0][0] == 0) {
|
||||||
|
solver = new DFS();
|
||||||
|
alg = 0;
|
||||||
|
} else if (this.selectedAlg.equals("UCS") && this.hasRanPerformance[1][0] == 0) {
|
||||||
|
solver = new PriorityTraversal(new UCS());
|
||||||
|
alg = 1;
|
||||||
|
} else if (this.selectedAlg.equals("BFS") && this.hasRanPerformance[2][0] == 0) {
|
||||||
|
solver = new PriorityTraversal(new BFS());
|
||||||
|
alg = 2;
|
||||||
|
} else if (this.selectedAlg.equals("AStar") && this.hasRanPerformance[3][0] == 0) {
|
||||||
|
solver = new PriorityTraversal(new AStar());
|
||||||
|
alg = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (solver != null) {
|
||||||
|
for (int i = 0; i < 100; i++) {
|
||||||
|
Board board = BoardGenerator.generateBoard();
|
||||||
|
System.out.println(board);
|
||||||
|
long start = new Date().getTime();
|
||||||
|
BoardNode node = solver.traverse(board);
|
||||||
|
long end = new Date().getTime();
|
||||||
|
System.out.println(node.board + "\n");
|
||||||
|
if (node != null) {
|
||||||
|
this.hasRanPerformance[alg][i + 2] = end - start;
|
||||||
|
this.currentBoardProperty.setValue(node.board.toString());
|
||||||
|
} else {
|
||||||
|
this.hasRanPerformance[alg][i+2] = -1;
|
||||||
|
}
|
||||||
|
iterationCounter.setValue("Performing Analysis Iteration: " + (i+1) + "/100");
|
||||||
|
}
|
||||||
|
this.hasRanPerformance[alg][0] = 1;
|
||||||
|
|
||||||
|
this.runPerf.setValue(false);
|
||||||
|
this.openPerf.setValue(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 1; i < this.hasRanPerformance[alg].length; i++) {
|
||||||
|
System.out.println(this.hasRanPerformance[alg][i]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSelectedAlg(String value) {
|
public void setSelectedAlg(String value) {
|
||||||
@ -53,6 +113,18 @@ public class MainViewModel {
|
|||||||
this.AStar.set(value.equals("AStar"));
|
this.AStar.set(value.equals("AStar"));
|
||||||
|
|
||||||
this.disclaimer.setValue(value.equals("DFS"));
|
this.disclaimer.setValue(value.equals("DFS"));
|
||||||
|
this.openPerf.setValue(this.hasRanPerformance[convertValueToInt(value)][0] == 1);
|
||||||
|
this.runPerf.setValue(this.hasRanPerformance[convertValueToInt(value)][0] == 0);
|
||||||
|
if (this.hasRanPerformance[convertValueToInt(value)][0] == 0) {
|
||||||
|
this.iterationCounter.set("");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private int convertValueToInt(String value) {
|
||||||
|
if (value.equals("DFS")) return 0;
|
||||||
|
if (value.equals("UCS")) return 1;
|
||||||
|
if (value.equals("BFS")) return 2;
|
||||||
|
return 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
public StringProperty getCurrentBoardProperty() {
|
public StringProperty getCurrentBoardProperty() {
|
||||||
@ -86,6 +158,7 @@ public class MainViewModel {
|
|||||||
} else if (AStar.getValue()) {
|
} else if (AStar.getValue()) {
|
||||||
solver = new PriorityTraversal(new AStar());
|
solver = new PriorityTraversal(new AStar());
|
||||||
}
|
}
|
||||||
|
|
||||||
Date start = new Date();
|
Date start = new Date();
|
||||||
BoardNode solved = solver.traverse(this.current.board);
|
BoardNode solved = solver.traverse(this.current.board);
|
||||||
Date end = new Date();
|
Date end = new Date();
|
||||||
@ -102,40 +175,43 @@ public class MainViewModel {
|
|||||||
this.current = solved;
|
this.current = solved;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void openPerf() {
|
||||||
|
long totalTime = 0;
|
||||||
|
int success = 0;
|
||||||
|
long shortest = 1000000;
|
||||||
|
long longest = -1;
|
||||||
|
for (int i = 2; i < this.hasRanPerformance[convertValueToInt(this.selectedAlg)].length; i++) {
|
||||||
|
long current = this.hasRanPerformance[convertValueToInt(this.selectedAlg)][i];
|
||||||
|
if (current != -1) {
|
||||||
|
success++;
|
||||||
|
totalTime += current;
|
||||||
|
if (current < shortest) {
|
||||||
|
shortest = current;
|
||||||
|
}
|
||||||
|
if (longest < current) {
|
||||||
|
longest = current;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
long average = totalTime / (long) success;
|
||||||
|
|
||||||
|
Alert perf = new Alert(Alert.AlertType.INFORMATION);
|
||||||
|
|
||||||
|
perf.setTitle(this.selectedAlg + " Performance Report");
|
||||||
|
perf.setHeaderText(success + "/" + 100 + " Succeeded.");
|
||||||
|
String results = "Shortest Run: " + shortest + "ms\n" +
|
||||||
|
"Longest Run: " + longest + "ms\n" +
|
||||||
|
"Average Time: " + average + "ms";
|
||||||
|
perf.setContentText(results);
|
||||||
|
perf.show();
|
||||||
|
}
|
||||||
|
|
||||||
public void updateDisplay() {
|
public void updateDisplay() {
|
||||||
TreeItem<BoardNode> newRoot = null;
|
TreeItem<BoardNode> newRoot = null;
|
||||||
newRoot = this.rebuildTree(this.solvedRootBoardNode, this.expanded.getValue());
|
newRoot = this.rebuildTree(this.solvedRootBoardNode, this.expanded.getValue());
|
||||||
this.solvedRootNode = newRoot;
|
this.solvedRootNode = newRoot;
|
||||||
}
|
}
|
||||||
|
|
||||||
public TreeItem<BoardNode> getSolvedRootNode() {
|
|
||||||
return solvedRootNode;
|
|
||||||
}
|
|
||||||
|
|
||||||
public BooleanProperty DFSProperty() {
|
|
||||||
return DFS;
|
|
||||||
}
|
|
||||||
|
|
||||||
public BooleanProperty UCSProperty() {
|
|
||||||
return UCS;
|
|
||||||
}
|
|
||||||
|
|
||||||
public BooleanProperty BFSProperty() {
|
|
||||||
return BFS;
|
|
||||||
}
|
|
||||||
|
|
||||||
public BooleanProperty AStarProperty() {
|
|
||||||
return AStar;
|
|
||||||
}
|
|
||||||
|
|
||||||
public BooleanProperty solvingAlgErrProperty() {
|
|
||||||
return solvingAlgErr;
|
|
||||||
}
|
|
||||||
|
|
||||||
public BooleanProperty genBoardErrProperty() {
|
|
||||||
return genBoardErr;
|
|
||||||
}
|
|
||||||
|
|
||||||
private TreeItem<BoardNode> rebuildTree(BoardNode root, boolean expanded) {
|
private TreeItem<BoardNode> rebuildTree(BoardNode root, boolean expanded) {
|
||||||
if (this.selectedAlg != null) {
|
if (this.selectedAlg != null) {
|
||||||
if (this.selectedAlg.equals("DFS")) {
|
if (this.selectedAlg.equals("DFS")) {
|
||||||
@ -168,6 +244,36 @@ public class MainViewModel {
|
|||||||
return new TreeItem<>();
|
return new TreeItem<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Getters for bindings */
|
||||||
|
|
||||||
|
|
||||||
|
public TreeItem<BoardNode> getSolvedRootNode() {
|
||||||
|
return solvedRootNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BooleanProperty DFSProperty() {
|
||||||
|
return DFS;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BooleanProperty UCSProperty() {
|
||||||
|
return UCS;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BooleanProperty BFSProperty() {
|
||||||
|
return BFS;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BooleanProperty AStarProperty() {
|
||||||
|
return AStar;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BooleanProperty solvingAlgErrProperty() {
|
||||||
|
return solvingAlgErr;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BooleanProperty genBoardErrProperty() {
|
||||||
|
return genBoardErr;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean getExpanded() {
|
public boolean getExpanded() {
|
||||||
return expanded.get();
|
return expanded.get();
|
||||||
@ -177,14 +283,14 @@ public class MainViewModel {
|
|||||||
return expanded;
|
return expanded;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getAlgSpeedProperty() {
|
|
||||||
return algSpeedProperty.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
public StringProperty algSpeedProperty() {
|
public StringProperty algSpeedProperty() {
|
||||||
return algSpeedProperty;
|
return algSpeedProperty;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public StringProperty iterationCounterProperty() {
|
||||||
|
return iterationCounter;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isDisclaimer() {
|
public boolean isDisclaimer() {
|
||||||
return disclaimer.get();
|
return disclaimer.get();
|
||||||
}
|
}
|
||||||
@ -192,4 +298,12 @@ public class MainViewModel {
|
|||||||
public BooleanProperty disclaimerProperty() {
|
public BooleanProperty disclaimerProperty() {
|
||||||
return disclaimer;
|
return disclaimer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public BooleanProperty openPerfProperty() {
|
||||||
|
return openPerf;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BooleanProperty runPerfProperty() {
|
||||||
|
return runPerf;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,36 +10,37 @@
|
|||||||
<?import javafx.scene.text.Font?>
|
<?import javafx.scene.text.Font?>
|
||||||
|
|
||||||
<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="591.0" prefWidth="928.0" xmlns="http://javafx.com/javafx/21" xmlns:fx="http://javafx.com/fxml/1" fx:controller="Assignments.A1.view.BoardViewCodeBehind">
|
<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="591.0" prefWidth="928.0" xmlns="http://javafx.com/javafx/21" xmlns:fx="http://javafx.com/fxml/1" fx:controller="Assignments.A1.view.BoardViewCodeBehind">
|
||||||
<children>
|
<TreeView fx:id="spanning_tree" layoutX="334.0" layoutY="67.0" prefHeight="416.0" prefWidth="532.0" />
|
||||||
<TreeView fx:id="spanning_tree" layoutX="334.0" layoutY="67.0" prefHeight="416.0" prefWidth="532.0" />
|
<ToggleButton fx:id="expanded" layoutX="547.0" layoutY="33.0" mnemonicParsing="false" onAction="#showSolvedPath" text="Expand Directory" />
|
||||||
<ToggleButton fx:id="expanded" layoutX="547.0" layoutY="33.0" mnemonicParsing="false" onAction="#showSolvedPath" text="Expand Directory" />
|
<Button id="generate_board" fx:id="generate_board" layoutX="97.0" layoutY="367.0" mnemonicParsing="false" onAction="#onGenerateBoard" text="Generate Random Board" />
|
||||||
<Button id="generate_board" fx:id="generate_board" layoutX="97.0" layoutY="367.0" mnemonicParsing="false" onAction="#onGenerateBoard" text="Generate Random Board" />
|
<Label fx:id="current_board" alignment="CENTER" layoutX="104.0" layoutY="129.0" prefHeight="184.0" prefWidth="134.0" textAlignment="JUSTIFY" wrapText="true">
|
||||||
<Label fx:id="current_board" alignment="CENTER" layoutX="104.0" layoutY="129.0" prefHeight="184.0" prefWidth="134.0" textAlignment="JUSTIFY" wrapText="true">
|
<font>
|
||||||
<font>
|
<Font size="41.0" />
|
||||||
<Font size="41.0" />
|
</font>
|
||||||
</font>
|
</Label>
|
||||||
</Label>
|
<Button id="solve_board" fx:id="solve_button" layoutX="561.0" layoutY="503.0" mnemonicParsing="false" onAction="#onSolveButton" text="Solve Board" />
|
||||||
<Button id="solve_board" fx:id="solve_button" layoutX="561.0" layoutY="503.0" mnemonicParsing="false" onAction="#onSolveButton" text="Solve Board" />
|
<MenuButton fx:id="menu_alg" layoutX="103.0" layoutY="416.0" mnemonicParsing="false" onAction="#onAlgChange" text="Traversal Algorithm">
|
||||||
<MenuButton fx:id="menu_alg" layoutX="103.0" layoutY="416.0" mnemonicParsing="false" onAction="#onAlgChange" text="Traversal Algorithm">
|
<items>
|
||||||
<items>
|
<MenuItem fx:id="DFS" mnemonicParsing="false" onAction="#onDFS" text="Depth-First Search" />
|
||||||
<MenuItem fx:id="DFS" mnemonicParsing="false" onAction="#onDFS" text="Depth-First Search" />
|
<MenuItem fx:id="UCS" mnemonicParsing="false" onAction="#onUCS" text="Uniform-Cost Search" />
|
||||||
<MenuItem fx:id="UCS" mnemonicParsing="false" onAction="#onUCS" text="Uniform-Cost Search" />
|
<MenuItem fx:id="BFS" mnemonicParsing="false" onAction="#onBFS" text="Best-First Search" />
|
||||||
<MenuItem fx:id="BFS" mnemonicParsing="false" onAction="#onBFS" text="Best-First Search" />
|
<MenuItem fx:id="AStar" mnemonicParsing="false" onAction="#onAStar" text="A* (A Star)" />
|
||||||
<MenuItem fx:id="AStar" mnemonicParsing="false" onAction="#onAStar" text="A* (A Star)" />
|
</items>
|
||||||
</items>
|
</MenuButton>
|
||||||
</MenuButton>
|
<Label layoutX="728.0" layoutY="507.0" text="Algorithm Speed (ms): " />
|
||||||
<Label layoutX="728.0" layoutY="507.0" text="Algorithm Speed (ms): " />
|
<Label fx:id="alg_speed" layoutX="849.0" layoutY="507.0" text="0" />
|
||||||
<Label fx:id="alg_speed" layoutX="849.0" layoutY="507.0" text="0" />
|
<Label fx:id="gen_board_err" layoutX="37.0" layoutY="525.0" prefHeight="26.0" prefWidth="325.0" text="You must generate a board before solving" textFill="RED" visible="false">
|
||||||
<Label fx:id="gen_board_err" layoutX="37.0" layoutY="525.0" prefHeight="26.0" prefWidth="325.0" text="You must generate a board before solving" textFill="RED" visible="false">
|
<font>
|
||||||
<font>
|
<Font size="17.0" />
|
||||||
<Font size="17.0" />
|
</font>
|
||||||
</font>
|
</Label>
|
||||||
</Label>
|
<Label fx:id="no_solv_alg_err" layoutX="37.0" layoutY="525.0" prefHeight="26.0" prefWidth="408.0" text="You must select a Traversal Algorithm before solving" textFill="RED" visible="false">
|
||||||
<Label fx:id="no_solv_alg_err" layoutX="37.0" layoutY="525.0" prefHeight="26.0" prefWidth="408.0" text="You must select a Traversal Algorithm before solving" textFill="RED" visible="false">
|
<font>
|
||||||
<font>
|
<Font size="14.0" />
|
||||||
<Font size="14.0" />
|
</font>
|
||||||
</font>
|
</Label>
|
||||||
</Label>
|
<Label fx:id="disclaimer" layoutX="176.0" layoutY="541.0" prefHeight="42.0" prefWidth="558.0" text="**Note: If traversing with DFS, it only shows the solving directory to prevent JavaFX StackOverflow.** However, the traversal algorithm and algorithm speed does explore all nodes despite directory display." textAlignment="CENTER" wrapText="true" />
|
||||||
<Label fx:id="disclaimer" layoutX="176.0" layoutY="541.0" prefHeight="42.0" prefWidth="558.0" text="**Note: If traversing with DFS, it only shows the solving directory to prevent JavaFX StackOverflow.** However, the traversal algorithm and algorithm speed does explore all nodes despite directory display." textAlignment="CENTER" wrapText="true" />
|
<Button fx:id="runPerformanceCHeck" layoutX="77.0" layoutY="471.0" mnemonicParsing="false" onAction="#runPerformanceCheck" text="Performance Analysis (100 Runs)" visible="false" />
|
||||||
</children>
|
<Button fx:id="openPerformance" layoutX="54.0" layoutY="471.0" mnemonicParsing="false" onAction="#openPerformance" text="Open Performance Analysis (Default Editor)" />
|
||||||
|
<Label fx:id="iteration_count" layoutX="123.0" layoutY="506.0" prefHeight="36.0" prefWidth="106.0" wrapText="true" />
|
||||||
</Pane>
|
</Pane>
|
||||||
|
Loading…
Reference in New Issue
Block a user