def run(self): while True: moves = [] self.enemies_locations = [] self.player_sites = [] self.game_map = getFrame() start_time = time.time() for y in range(self.game_map.height): for x in range(self.game_map.width): if self.game_map.contents[y][x].owner != self.my_id: self.enemies_locations.append(Location(x, y)) else: self.player_sites.append(self.game_map.contents[y][x]) self.player_sites = sorted(self.player_sites, key=lambda s: s.strength, reverse=True) while len(self.player_sites): current_site = self.player_sites.pop() movement = self.get_movement(current_site) moves.append(movement) if movement != STILL: self.player_sites = sorted(self.player_sites, key=lambda s: s.strength, reverse=True) if time.time() - start_time > 0.9: logging.info("AVOIDING TIMEOUT!! %d", len(self.player_sites)) for site in self.player_sites: moves.append(Move(Location(site.x, site.y), STILL)) break sendFrame(moves)
def main(): state = { 'seen_combat': False, } myID, gameMap = networking.getInit() networking.sendInit("Orez[Miner]") while True: gameMap = networking.getFrame() moves = [ hlt.Move( hlt.Location(x, y), direction, ) for (x, y), direction in turn(gameMap, myID, state) ] networking.sendFrame(moves)
filename="bot.log") myID, gameMap = getInit() run_id = 0 if len(sys.argv) > 1: run_id = int(sys.argv[1]) model = load_model("data/qmodel_%s.h5" % (run_id - 1)) # load previous model else: model = get_new_model() sendInit('joelator') logging.info("My ID: %s", myID) turn = 0 frame = getFrame() stack = frame_to_stack(frame, myID) allQs = [] # Only pick one random position for easier q-learning while True: position = random.choice(np.transpose(np.nonzero(stack[0]))) area_inputs = stack_to_input(stack, position) possible_moves, Qinputs, Qs = predict_for_pos(area_inputs, model) # Epsilon greedy strategy if random.random() < 0.1: index = np.random.choice(range(len(possible_moves))) else: index = np.argmax(Qs) Q = Qs[index] move = possible_moves[index] allQs.append(Q)
Naive bot """ #!/usr/bin/python3 from hlt import (Location, Move, CARDINALS, STILL) from networking import (getInit, sendInit, getFrame, sendFrame) from helper import (getStrength, getTerritory, getProduction) sendInit('zyzo') FILE_WRITER = open('log-ANALYTICS.log', 'w') FILE_WRITER.write('') FILE_WRITER.close() MY_ID, GAME_MAP = getInit() while True: MOVES = [] GAME_MAP = getFrame() FILE_WRITER = open('log-analytics.log', 'a') ANALYTICS = {'s': 0, 'a': 0, 'm': 0} for y in range(GAME_MAP.height): for x in range(GAME_MAP.width): curLoc = Location(x, y) if GAME_MAP.getSite(curLoc).owner == MY_ID: movedPiece = False for d in CARDINALS: if (GAME_MAP.getSite(curLoc, d).owner != MY_ID and GAME_MAP.getSite(curLoc, d).strength < GAME_MAP.getSite(curLoc).strength): MOVES.append(Move(curLoc, d)) ANALYTICS['a'] += 1 movedPiece = True break