Example #1
0
    def test(self, q_values):
        # load environment
        loader = EnvironmentLoader("environments/maps")
        env = loader.load_map(self.map)

        # set up agent

        agent = QLearningAgent(alpha=0,
                               epsilon_policy=self.epsilon_policy,
                               discount=0,
                               action_space=env.action_space,
                               state_space=env.state_space,
                               q_values=q_values)

        # reset everything
        agent.reset()
        env.reset()

        # generate epsilon values (runs infinitely long)
        for epsilon in self.epsilon_policy:

            # set epsilon for current epoch
            agent.epsilon = epsilon

            env.reset_position()
            done = False

            pygame.display.set_caption(f'KI-Labor GridWorld - Test')

            while not done:
                env.renderer.update_info(self.hyperparameters, epsilon)

                event = self.event_occured(
                    timeout_ms=RenderSettings.TIME_BETWEEN_FRAMES,
                    renderer=env.renderer)
                env.render(q_values)

                done = self.step(agent, env)

                if done and event is None:
                    event = self.event_occured(
                        timeout_ms=RenderSettings.TIME_BETWEEN_FRAMES,
                        renderer=env.renderer)
                    env.render(q_values, True)

                # handle events
                if event == "reset":
                    return
                elif event == "skip":
                    break
                elif event == "pause":
                    while self.event_occured(renderer=env.renderer) != "pause":
                        continue
Example #2
0
    def train(self):
        # load environment
        loader = EnvironmentLoader("environments/maps")
        env = loader.load_map(self.map)

        # set up agent

        agent = QLearningAgent(self.hyperparameters["alpha"],
                               self.epsilon_policy,
                               self.hyperparameters["discount"],
                               env.action_space, env.state_space)

        # reset everything
        epoch_counter = 0
        agent.reset()
        env.reset()

        # generate epsilon values (runs infinitely long)
        for epsilon in self.epsilon_policy:

            # set epsilon for current epoch
            agent.epsilon = epsilon

            env.reset_position()
            done = False

            while not done:
                render_current_epoch = RenderSettings.ENABLED and epoch_counter % RenderSettings.INTERVAL == 0
                save_current_epoch = SaveSettings.ENABLED and epoch_counter % SaveSettings.INTERVAL == 0

                if epoch_counter % RenderSettings.UPDATE_FREQ_TITLE == 0 or render_current_epoch:
                    pygame.display.set_caption(
                        f'KI-Labor GridWorld - Epoch {epoch_counter}'
                    )  # takes around 0.1ms on average
                    env.renderer.update_info(self.hyperparameters, epsilon)

                if render_current_epoch:
                    event = self.event_occured(
                        timeout_ms=RenderSettings.TIME_BETWEEN_FRAMES,
                        renderer=env.renderer)
                else:
                    event = self.event_occured(renderer=env.renderer)

                if render_current_epoch:
                    env.render(agent.get_q__values())

                if save_current_epoch and self.save_name is not None:
                    AgentManager.save_agent_state(
                        agent,
                        f"{SaveSettings.SAVE_PATH}/{self.save_name}_{epoch_counter}.txt"
                    )

                done = self.step(agent, env)

                if done and render_current_epoch and event is None:
                    event = self.event_occured(
                        timeout_ms=RenderSettings.TIME_BETWEEN_FRAMES,
                        renderer=env.renderer)
                    env.render(agent.get_q__values(), True)

                # handle events
                if event == "reset":
                    return
                elif event == "skip":
                    break
                elif event == "pause":
                    while self.event_occured(renderer=env.renderer) != "pause":
                        continue

            epoch_counter += 1