def dataReceived(self, data): print "Received: %r" % data line = data.strip() items = line.split("\n") if items[-1] == "TEAM": self.transport.write(self.name) elif items[-1] == "MOVE": if items[0] == "RESTART": self.reset() del items[0] for item in items[:-1]: parts = item.split() # think for a random time 1-5 seconds, for testing only # time.sleep(random.randint(1, 5)) player, x, y = parts[0], int(parts[1]), int(parts[2]) # make a random move self.prev_moves.append((x, y)) move = self.make_random_move() print "making move %r" % str(move) scores = genVoronoi.get_scores(2) print scores self.transport.write("{0} {1}".format(move[0], move[1])) elif items[-1] == "END": self.transport.loseConnection() elif items[-1] == "RESTART": self.reset()
def thinkNextMove(self, board, deep, deepSet, points, Moves, OppMoves): if Moves==0 and OppMoves ==0: return (500,500) if deep > deepSet: genVoronoi.generate_voronoi_diagram(2, Moves, points, self.colors, None, 0, 0) scores = genVoronoi.get_scores(2) myScore = scores[self.playerIdx] oppScore = scores[self.oppIdx] return myScore legalMoves = self.legal_plays(board) if deep%2 == 1: randSampling = 10 else: randSampling = 10 randIdx = np.random.choice(len(legalMoves[0]), randSampling) tmp = [] for idx in randIdx: tmp.append((legalMoves[0][idx], legalMoves[1][idx])) legalMoves = tmp score = -sys.maxint - 1 bestMove = () for eachMove in legalMoves: # print deep, eachMove myBoard = np.copy(board) myPoints = np.copy(points) myMoves = copy.copy(Moves) myOppMoves = copy.copy(OppMoves) if deep%2 == 1: # it's me myPoints[self.playerIdx][myMoves][0] = eachMove[0] myPoints[self.playerIdx][myMoves][1] = eachMove[1] tmp_val = self.thinkNextMove(board, deep+1, deepSet, myPoints, myMoves+1, myOppMoves) board[eachMove[0]][eachMove[1]] = self.playerIdx else: myPoints[self.oppIdx][myOppMoves][0] = eachMove[0] myPoints[self.oppIdx][myOppMoves][1] = eachMove[1] tmp_val = self.thinkNextMove(board, deep+1, deepSet, myPoints, myMoves, myOppMoves+1) board[eachMove[0]][eachMove[1]] = self.oppIdx # tmp_val = self.thinkNextMove(board, deep, deepSet, myPoints, myMoves, myOppMoves) if not isinstance(tmp_val, tuple) and tmp_val > score: score = tmp_val bestMove = eachMove print "result in thinkNextMove" print score, bestMove, self.myMoves, deep if deep == 2: return score else: return bestMove
def winner(self, myMoves, myOppMoves, myPoints): # print "winner", myMoves, myOppMoves if myMoves == myOppMoves and myOppMoves == self.numMoves-1: genVoronoi.generate_voronoi_diagram(2, myMoves, myPoints, self.colors, None, 0, 0) scores = genVoronoi.get_scores(2) myScore = scores[self.playerIdx] oppScore = scores[self.oppIdx] print "myScore", myScore if myScore >= oppScore: return self.playerIdx else: return self.oppIdx else: return 0
def findBestLastOne(self, board, deep, deepSet, points, Moves, OppMoves): legalMoves = self.legal_plays(board) randIdx = np.random.choice(len(legalMoves[0]), 100) tmp = [] for idx in randIdx: tmp.append((legalMoves[0][idx], legalMoves[1][idx])) legalMoves = tmp score = -sys.maxint - 1 bestMove = () for eachMove in legalMoves: points[self.playerIdx][Moves+1][0] = eachMove[0] points[self.playerIdx][Moves+1][1] = eachMove[1] genVoronoi.generate_voronoi_diagram(2, Moves+1, points, self.colors, None, 0, 0) scores = genVoronoi.get_scores(2) myScore = scores[self.playerIdx] print "myScore", myScore, eachMove if score < myScore: score = myScore bestMove = eachMove points[self.playerIdx][Moves+1][0] = -1 points[self.playerIdx][Moves+1][1] = -1 return bestMove
def get_scores(self): scores_np = genVoronoi.get_scores(num_players) scores = [scores_np[p] for p in range(num_players)] return scores
def get_score(self): scores = genVoronoi.get_scores(2) return scores[self.playerIdx], scores[self.oppIdx]