in data/envs/babyai/bot_agent.py [0:0]
def replan(self, action_taken=None):
"""Replan and suggest an action.
Call this method once per every iteration of the environment.
Args:
action_taken: The last action that the agent took. Can be `None`, in which
case the bot assumes that the action it suggested was taken (or that it is
the first iteration).
Returns:
suggested_action: The action that the bot suggests. Can be `done` if the
bot thinks that the mission has been accomplished.
"""
self._process_obs()
# Check that no box has been opened
self._check_erroneous_box_opening(action_taken)
# TODO: instead of updating all subgoals, just add a couple
# properties to the `Subgoal` class.
for subgoal in self.stack:
subgoal.update_agent_attributes()
if self.stack:
self.stack[-1].replan_after_action(action_taken)
# Clear the stack from the non-essential subgoals
while self.stack and self.stack[-1].is_exploratory():
self.stack.pop()
suggested_action = None
while self.stack:
subgoal = self.stack[-1]
suggested_action = subgoal.replan_before_action()
# If is not clear what can be done for the current subgoal
# (because it is completed, because there is blocker,
# or because exploration is required), keep replanning
if suggested_action is not None:
break
if not self.stack:
suggested_action = self.mission.unwrapped.actions.done
self._remember_current_state()
return suggested_action