diff --git a/jupyddl/automated_planner.py b/jupyddl/automated_planner.py index 3ef74db..6c34cb8 100644 --- a/jupyddl/automated_planner.py +++ b/jupyddl/automated_planner.py @@ -100,12 +100,21 @@ def get_actions_from_path(self, path): return [] actions = [] for node in path: - actions.append((node.parent_action, node.g_cost)) - - cost = self.pddl.get_value(path[-1].state, "total-cost") - if not cost: - return actions - return (actions, cost) + if not node.parent_action: + break + act = str(node.parent_action).replace("', "total-cost =") + state_str = state_str.replace("))>", "") + return state_str def get_state_def_from_path(self, path): if not path: @@ -113,7 +122,8 @@ def get_state_def_from_path(self, path): return [] trimmed_path = [] for node in path: - trimmed_path.append(node.state) + state = self.__stringify_state(node.state) + trimmed_path.append(state) return trimmed_path def breadth_first_search(self): diff --git a/jupyddl/node.py b/jupyddl/node.py index aacaff6..ed96797 100644 --- a/jupyddl/node.py +++ b/jupyddl/node.py @@ -17,6 +17,7 @@ def __init__( self.state = state self.parent_action = parent_action self.parent = parent + self.automated_planner = automated_planner temp_cost = automated_planner.pddl.get_value(state, "total-cost") if temp_cost: self.g_cost = temp_cost @@ -51,5 +52,24 @@ def __init__( self.is_closed = is_closed self.is_open = is_open + def __stringify_state(self, state): + state_str = str(state).replace("', "total-cost =") + state_str = state_str.replace("))>", "") + return state_str + def __lt__(self, other): return self.f_cost <= other.f_cost + + def __str__(self): + state = self.__stringify_state(self.state) + return "Node { %s | g = %.2f | h = %.2f | open = %s | closed = %s }" % (state, self.g_cost, self.h_cost, self.is_open, self.is_closed) + +class Path: + def __init__(self, nodes): + self.nodes = nodes + + def __str__(self): + return str([str(n) for n in self.nodes]) diff --git a/tests/test_dfs.py b/tests/test_dfs.py new file mode 100644 index 0000000..ee9a69d --- /dev/null +++ b/tests/test_dfs.py @@ -0,0 +1,2 @@ +import sys +from os import path diff --git a/tests/test_node.py b/tests/test_node.py index 0008b0f..98834f8 100644 --- a/tests/test_node.py +++ b/tests/test_node.py @@ -5,7 +5,7 @@ sys.path.append(path.dirname(path.dirname(path.abspath(__file__)))) from jupyddl.automated_planner import AutomatedPlanner -from jupyddl.node import Node +from jupyddl.node import Node, Path def test_node_equality_cost(): @@ -36,3 +36,25 @@ def test_node_equality_no_cost(): assertion2 = next_node < next_node_v2 assert assertion and assertion2 + +def test_stringified_node(): + apla = AutomatedPlanner( + "pddl-examples/dinner/domain.pddl", "pddl-examples/dinner/problem.pddl" + ) + actions = apla.available_actions(apla.initial_state) + for act in actions: + next_state = apla.transition(apla.initial_state, act) + next_node = Node(next_state, apla, heuristic_based=True) + assert "