total_reward = score_A = score_B = 0
            ale.setMode(1)  # Switch Boxing to two player mode

            while not ale.game_over():
                # Set action for agent A
                if frame_counter % frame_skip_agent_A == 0:
                    a = legal_actions[randrange(len(legal_actions))]
                # Set action for agent B
                if frame_counter % frame_skip_agent_B == 0:
                    b = legal_actionsB[randrange(len(legal_actionsB))]

                # Reset frame counter to prevent overflow
                frame_counter += 1
                if frame_counter == frame_counter_reset:
                    frame_counter = 0

                # Apply actions and get the resulting reward
                reward = ale.actAB(a, b)
                if reward > 0:
                    score_A += reward
                if reward < 0:
                    score_B += -reward
                total_reward += reward

            result_file.write("%d,%d,%d,%d,%d,%d\n" %
                              (frame_skip_agent_A, frame_skip_agent_B, episode,
                               score_A, score_B, total_reward))
            result_file.flush()
            ale.reset_game()
result_file.close()
Esempio n. 2
0
class AleInterface(object):
    def __init__(self, game, args):

        #self.game = game

        self.ale = ALEInterface()

        # if sys.platform == 'darwin':
        #     self.ale.setBool('sound', False)  # Sound doesn't work on OSX
        # elif sys.platform.startswith('linux'):
        #     self.ale.setBool('sound', True)
        # self.ale.setBool('display_screen', True)
        #

        self.ale.setBool('display_screen', args.display_screen)
        self.ale.setInt('frame_skip', args.frame_skip)
        self.ale.setFloat('repeat_action_probability',
                          args.repeat_action_probability)
        self.ale.setBool('color_averaging', args.color_averaging)
        self.ale.setInt('random_seed', args.random_seed)

        #
        # if rand_seed is not None:
        #     self.ale.setInt('random_seed', rand_seed)

        rom_file = "./roms/%s.bin" % game
        if not os.path.exists(rom_file):
            print "not found rom file:", rom_file
            sys.exit(-1)
        self.ale.loadROM(rom_file)

        self.actions = self.ale.getMinimalActionSet()
        self.actionsB = self.ale.getMinimalActionSetB()

    def get_actions_num(self):
        return len(self.actions)

    def get_actions_numB(self):
        return len(self.actionsB)

    def act(self, action):
        reward = self.ale.act(self.actions[action])
        return reward

    def actAB(self, actionA, actionB):
        reward = self.ale.actAB(self.actions[actionA],
                                self.actionsB[actionB - 18])
        return reward

    def get_screen_gray(self):
        return self.ale.getScreenGrayscale()

    def get_screen_rgb(self):
        return self.ale.getScreenRGB()

    def game_over(self):
        return self.ale.game_over()

    def reset_game(self):
        return self.ale.reset_game()

    def set_mode(self, mode):
        return self.ale.setMode(mode)