def get_all_states(self): """Returns all states. """ states = [] for x in range(1, self.width + 1): for y in range(1, self.height + 1): state = NavigationWorldState(x, y) if self.is_goal(x, y) and self.is_goal_terminal: state.set_terminal(True) states.append(state) return states
def _transition_func(self, state, action): """ Args: state (State) action (str) Returns (State) """ if state.is_terminal(): return state r = random.random() if self.slip_prob > r: # Flip dir. if action == "up": action = random.choice(["left", "right"]) elif action == "down": action = random.choice(["left", "right"]) elif action == "left": action = random.choice(["up", "down"]) elif action == "right": action = random.choice(["up", "down"]) if action == "up" and state.y < self.height and not self.is_wall( state.x, state.y + 1): next_state = NavigationWorldState(state.x, state.y + 1) elif action == "down" and state.y > 1 and not self.is_wall( state.x, state.y - 1): next_state = NavigationWorldState(state.x, state.y - 1) elif action == "right" and state.x < self.width and not self.is_wall( state.x + 1, state.y): next_state = NavigationWorldState(state.x + 1, state.y) elif action == "left" and state.x > 1 and not self.is_wall(state.x - 1, state.y): next_state = NavigationWorldState(state.x - 1, state.y) else: next_state = NavigationWorldState(state.x, state.y) if self.is_goal(next_state.x, next_state.y) and self.is_goal_terminal: next_state.set_terminal(True) return next_state