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