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
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