From f941ef93c3d9c5c8a08b2745d4c36732e2861126 Mon Sep 17 00:00:00 2001 From: Berack96 Date: Wed, 13 Dec 2023 10:01:24 +0100 Subject: [PATCH] Fixes - static member in Puzzle8 - added docs - added statistic in AStar visit --- .../net/berack/upo/ai/problem1/AStar.java | 19 +++++++++++++++++++ .../net/berack/upo/ai/problem1/Puzzle8.java | 2 +- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/berack/upo/ai/problem1/AStar.java b/src/main/java/net/berack/upo/ai/problem1/AStar.java index 5d49b9b..731ed1a 100644 --- a/src/main/java/net/berack/upo/ai/problem1/AStar.java +++ b/src/main/java/net/berack/upo/ai/problem1/AStar.java @@ -22,6 +22,9 @@ public class AStar { private BiFunction heuristic; private TriFunction 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 * e una funzione di transizione che dato uno stato permette di raggiungerne un'altro tramite un'azione. @@ -92,11 +95,16 @@ public class AStar { Objects.requireNonNull(initial); Objects.requireNonNull(goal); + this.lastStateVisitedCount = 0; + this.lastStateTotalCount = 1; + NodeState found = null; var list = new PriorityQueue(); list.add(new NodeState(null, initial, null, 0, 0)); while(list.size() > 0) { + this.lastStateVisitedCount += 1; + var current = list.poll(); if(current.state.equals(goal)) { found = current; @@ -105,6 +113,7 @@ public class AStar { for(var action : this.actions.apply(current.state)) try { + this.lastStateTotalCount += 1; var next = this.transition.apply(current.state, action); var cost = this.cost.apply(current.state, next, action); var dist = this.heuristic.apply(next, goal); @@ -129,8 +138,18 @@ public class AStar { } + public int lastStateVisitedCount() { + return this.lastStateVisitedCount; + } + + public int lastStateTotalCount() { + return this.lastStateTotalCount; + } + + /** * 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 parent; diff --git a/src/main/java/net/berack/upo/ai/problem1/Puzzle8.java b/src/main/java/net/berack/upo/ai/problem1/Puzzle8.java index bed0cf0..866b160 100644 --- a/src/main/java/net/berack/upo/ai/problem1/Puzzle8.java +++ b/src/main/java/net/berack/upo/ai/problem1/Puzzle8.java @@ -21,7 +21,7 @@ public class Puzzle8 implements Iterable { /** * Possibili movimenti della tessera "vuota" */ - public enum Move { + public static enum Move { UP, DOWN, LEFT,