Beispiel #1
0
class BotAgent:
    def __init__(self, env):
        """An agent based on a GOFAI bot."""
        self.env = env
        self.on_reset()

    def on_reset(self):
        self.bot = Bot(self.env)

    def act(self, obs=None, update_internal_state=True, *args, **kwargs):
        action = self.bot.get_action()
        if update_internal_state:
            self.bot.take_action(action)
        return {'action': action}

    def analyze_feedback(self, reward, done):
        pass
Beispiel #2
0
        if options.verbose:
            print(
                '%s/%s: %s, seed=%d' %
                (run_no + 1, options.num_runs, mission.surface, mission_seed))

        optimal_actions = []
        before_optimal_actions = []
        non_optimal_steps = options.non_optimal_steps or int(
            mission.max_steps // 3)
        rng = Random(mission_seed)

        try:
            episode_steps = 0
            while True:
                action = expert.get_action()
                if options.advise_mode and episode_steps < non_optimal_steps:
                    if rng.random() < options.bad_action_proba:
                        while True:
                            action = bad_agent.act(
                                mission.gen_obs())['action'].item()

                            # To make things simple, only allow random left/right/fwd moves, and opening of doors
                            if action in (mission.actions.left,
                                          mission.actions.right,
                                          mission.actions.forward):
                                break
                            fwd_pos = mission.agent_pos + mission.dir_vec
                            fwd_cell = mission.grid.get(*fwd_pos)
                            if action == mission.actions.toggle and fwd_cell is not None and fwd_cell.type == 'door':
                                break