Fixes
- static member in Puzzle8 - added docs - added statistic in AStar visit
This commit is contained in:
@@ -22,6 +22,9 @@ public class AStar<State, Action> {
|
|||||||
private BiFunction<State, State, Integer> heuristic;
|
private BiFunction<State, State, Integer> heuristic;
|
||||||
private TriFunction<State, State, Action, Integer> cost;
|
private TriFunction<State, State, Action, Integer> cost;
|
||||||
|
|
||||||
|
private int lastStateVisitedCount = 0;
|
||||||
|
private int lastStateTotalCount = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Crea una istanza dell'algoritmo A* con una funzione di azioni possibili da compiere dato uno stato
|
* Crea una istanza dell'algoritmo A* con una funzione di azioni possibili da compiere dato uno stato
|
||||||
* e una funzione di transizione che dato uno stato permette di raggiungerne un'altro tramite un'azione.
|
* e una funzione di transizione che dato uno stato permette di raggiungerne un'altro tramite un'azione.
|
||||||
@@ -92,11 +95,16 @@ public class AStar<State, Action> {
|
|||||||
Objects.requireNonNull(initial);
|
Objects.requireNonNull(initial);
|
||||||
Objects.requireNonNull(goal);
|
Objects.requireNonNull(goal);
|
||||||
|
|
||||||
|
this.lastStateVisitedCount = 0;
|
||||||
|
this.lastStateTotalCount = 1;
|
||||||
|
|
||||||
NodeState found = null;
|
NodeState found = null;
|
||||||
var list = new PriorityQueue<NodeState>();
|
var list = new PriorityQueue<NodeState>();
|
||||||
list.add(new NodeState(null, initial, null, 0, 0));
|
list.add(new NodeState(null, initial, null, 0, 0));
|
||||||
|
|
||||||
while(list.size() > 0) {
|
while(list.size() > 0) {
|
||||||
|
this.lastStateVisitedCount += 1;
|
||||||
|
|
||||||
var current = list.poll();
|
var current = list.poll();
|
||||||
if(current.state.equals(goal)) {
|
if(current.state.equals(goal)) {
|
||||||
found = current;
|
found = current;
|
||||||
@@ -105,6 +113,7 @@ public class AStar<State, Action> {
|
|||||||
|
|
||||||
for(var action : this.actions.apply(current.state)) try {
|
for(var action : this.actions.apply(current.state)) try {
|
||||||
|
|
||||||
|
this.lastStateTotalCount += 1;
|
||||||
var next = this.transition.apply(current.state, action);
|
var next = this.transition.apply(current.state, action);
|
||||||
var cost = this.cost.apply(current.state, next, action);
|
var cost = this.cost.apply(current.state, next, action);
|
||||||
var dist = this.heuristic.apply(next, goal);
|
var dist = this.heuristic.apply(next, goal);
|
||||||
@@ -129,8 +138,18 @@ public class AStar<State, Action> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public int lastStateVisitedCount() {
|
||||||
|
return this.lastStateVisitedCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int lastStateTotalCount() {
|
||||||
|
return this.lastStateTotalCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Classe privata per mantenere i dati all'interno della PriorityQueue.
|
* Classe privata per mantenere i dati all'interno della PriorityQueue.
|
||||||
|
* Non è stata messa statica dato che ho bisogno dello stato e dell'azione.
|
||||||
*/
|
*/
|
||||||
private class NodeState implements Comparable<NodeState> {
|
private class NodeState implements Comparable<NodeState> {
|
||||||
NodeState parent;
|
NodeState parent;
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ public class Puzzle8 implements Iterable<Integer> {
|
|||||||
/**
|
/**
|
||||||
* Possibili movimenti della tessera "vuota"
|
* Possibili movimenti della tessera "vuota"
|
||||||
*/
|
*/
|
||||||
public enum Move {
|
public static enum Move {
|
||||||
UP,
|
UP,
|
||||||
DOWN,
|
DOWN,
|
||||||
LEFT,
|
LEFT,
|
||||||
|
|||||||
Reference in New Issue
Block a user