コード例 #1
0
    def reset(self):
        shift = 0x2A
        f = 0x21
        # r = 0x13

        release_key(W)
        release_key(A)
        release_key(D)
        press_key(shift)
        press_key(f)
        release_key(shift)
        release_key(f)

        self.reward -= 1.
        self.current_screen = None
        self.done = True

        for i in list(range(2))[::-1]:
            print(i + 1)
            time.sleep(1)
コード例 #2
0
 def right(self):
     if random.randrange(0, 3) == 1:
         press_key(W)
     else:
         release_key(W)
     press_key(D)
     release_key(A)
     release_key(S)
コード例 #3
0
def main():
    # for i in list(range(4))[::-1]:
    #     print(i + 1)
    #     time.sleep(1)

    episodes = 25000

    agent = Agent(63 * 206 * 3, 4)
    # (state_space_size, action_space_size)
    # (state_space_size = image size[h*w*c] -> first layer input)
    # (action_space_size = last layer output -> action[0,...,3])

    observation = Observe()
    agent.handle_episode_start()

    paused = False
    for _ in range(episodes):
        observation.done = False
        agent.steps = 0
        while not observation.done:

            if not paused:
                observation.state = observation.get_state(
                )  # maybe move to Agent.step()
                action = agent.step(observation)
                agent.take_action(action)
                observation.reset_check()

                # reward += 1 if X steps were made without ending an episode
                if agent.steps % 500 == 0:
                    observation.reward += 1.
                print(f"steps = {agent.steps}")

            keys = key_check()
            if 'T' in keys:
                if paused:
                    paused = False
                    print('unpaused!')
                    time.sleep(1)
                else:
                    print('Pausing!')
                    release_key(W)
                    release_key(A)
                    release_key(D)
                    paused = True
                    time.sleep(1)

            # press 'q' to close the window
            if cv2.waitKey(25) & 0xFF == ord('q'):
                cv2.destroyAllWindows()
                break
コード例 #4
0
 def reverse(self):
     press_key(S)
     release_key(A)
     release_key(W)
     release_key(D)
コード例 #5
0
 def straight(self):
     press_key(W)
     release_key(A)
     release_key(D)
     release_key(S)