in data/envs/babyai/bot_agent.py [0:0]
def _plan_undo_action(self, action_taken):
"""Plan how to undo the taken action."""
if action_taken == self.actions.forward:
# check if the 'forward' action was successful
if not np.array_equal(self.bot.prev_agent_pos, self.pos):
self.bot.stack.append(GoNextToSubgoal(self.bot, self.pos))
elif action_taken == self.actions.left:
old_fwd_pos = self.pos + self.right_vec
self.bot.stack.append(GoNextToSubgoal(self.bot, old_fwd_pos))
elif action_taken == self.actions.right:
old_fwd_pos = self.pos - self.right_vec
self.bot.stack.append(GoNextToSubgoal(self.bot, old_fwd_pos))
elif action_taken == self.actions.drop and self.bot.prev_carrying != self.carrying:
# get that thing back, if dropping was successful
assert self.fwd_cell.type in ("key", "box", "ball")
self.bot.stack.append(PickupSubgoal(self.bot))
elif action_taken == self.actions.pickup and self.bot.prev_carrying != self.carrying:
# drop that thing where you found it
fwd_cell = self.bot.mission.unwrapped.grid.get(*self.fwd_pos)
self.bot.stack.append(DropSubgoal(self.bot))
elif action_taken == self.actions.toggle:
# if you opened or closed a door, bring it back in the original state
fwd_cell = self.bot.mission.unwrapped.grid.get(*self.fwd_pos)
if fwd_cell and fwd_cell.type == "door" and self.bot.fwd_door_was_open != fwd_cell.is_open:
self.bot.stack.append(CloseSubgoal(self.bot) if fwd_cell.is_open else OpenSubgoal(self.bot))