From 7df7885cbff5a2d0e04df105064bcce8f2372108 Mon Sep 17 00:00:00 2001 From: Dawid Pylak Date: Thu, 7 Apr 2022 13:06:25 +0200 Subject: [PATCH] fixed bfs algorythm 2 --- src/utils/bfs.py | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/src/utils/bfs.py b/src/utils/bfs.py index 06083c5..05e1e93 100644 --- a/src/utils/bfs.py +++ b/src/utils/bfs.py @@ -5,6 +5,7 @@ class Node: def __init__(self, current_x, current_y, agent_direction, action=None, parent=None): self.current_x = current_x self.current_y = current_y + self.state = tuple([self.current_x, self.current_y]) self.action = action self.parent = parent self.agent_direction = agent_direction @@ -39,7 +40,7 @@ class Node: neighbours.append((actions, (x - 1, y), C.LEFT)) - if y > 0: # upper neighbour + if y < 9: # upper neighbour if self.agent_direction == C.RIGHT: actions = [C.ROTATE_LEFT, C.MOVE] elif self.agent_direction == C.LEFT: @@ -49,9 +50,9 @@ class Node: elif self.agent_direction == C.DOWN: actions = [C.ROTATE_LEFT, C.ROTATE_LEFT, C.MOVE] - neighbours.append((actions, (x, y - 1), C.UP)) + neighbours.append((actions, (x, y + 1), C.UP)) - if y < 9: # down neighbour + if y > 0: # down neighbour if self.agent_direction == C.RIGHT: actions = [C.ROTATE_RIGHT, C.MOVE] elif self.agent_direction == C.LEFT: @@ -61,10 +62,12 @@ class Node: elif self.agent_direction == C.DOWN: actions = C.MOVE - neighbours.append((actions, (x, y + 1), C.DOWN)) - + neighbours.append((actions, (x, y - 1), C.DOWN)) return neighbours + def __str__(self): + return self.state + ' ' + self.parent + class BFSSearcher: @@ -73,30 +76,27 @@ class BFSSearcher: self.explored_states = [] self.path = [] - def search(self, first_state: tuple, goal, agent_direction): + def search(self, first_state: tuple, goal: tuple, agent_direction: list): self.fringe.append(Node(first_state[0], first_state[1], agent_direction)) while True: if not self.fringe: return False - element = self.fringe.pop(0) + element: Node = self.fringe.pop(0) if element.state == goal: return self.__state_eq_goal_action(element) self.explored_states.append(element) - - for action, state, direction in element.succesor(): + for action, state, direction in element.successor(): fringe_states = [] explored_states = [] for node in self.fringe: fringe_states.append(node.state) for node in self.explored_states: - explored_states.append(node) - if state not in fringe_states and state not in explored_states: - x = Node(state[0], state[1], direction) - x.parent = element - x.action = action + explored_states.append(node.state) + if (state not in fringe_states) and (state not in explored_states): + x = Node(state[0], state[1], direction, action, element) self.fringe.append(x) def __state_eq_goal_action(self, current_element: Node): @@ -107,5 +107,7 @@ class BFSSearcher: self.path.append(action) else: self.path.append(current_element.action) + current_element = current_element.parent - return self.path.reverse() + self.path.reverse() + return self.path