Ejemplo n.º 1
0
    
    def isWinner(self):
        return self.utils.isWinner(self.board)
    
    def printBoard(self):
        self.utils.printBoard(self.board)
       
if __name__ == "__main__":
    #players = [ dumb.dumb(1), dumb.dumb(2) ]
    #players = [ dumb.url(1,'http://dl.no.de/ai/twostep/move'), genetic.genetic(2, 'best.c4') ]
    #players = [ dumb.url(1,'http://dl.no.de/ai/random/move'), genetic.genetic(2, 'best.c4') ]
    #players = [ genetic.genetic(1, 'best.c4'), dumb.url(2,'http://dl.no.de/ai/random/move') ]
    #players = [ genetic.genetic(1, 'best_so_far2.c4'), dumb.dumb(2) ]
    #players = [ genetic.genetic(1, 'best_so_far2.c4'), dumb.url(2,'http://dl.no.de/ai/twostep/move') ]
    #players = [ genetic.genetic(1, 'best.c4'), dumb.url(2,'http://dl.no.de/ai/twostep/move') ]
    players = [ genetic.genetic(1, 'best.c4'), dumb.url(2,'http://dl.no.de/ai/random/move') ]
    NUM_GAMES = 200 
    ROWS = 6
    COLS = 7

    win_stats = defaultdict(int)
    for g in range(NUM_GAMES):
        c = c4(rows=ROWS,cols=COLS)
        for i in range(c.rows * c.cols):
            #c.printBoard()
            winner = c.isWinner()
            if winner <> 0:
                print 'Player %d has won' % winner
                #c.printBoard()
                #exit()
                break
Ejemplo n.º 2
0
def eval_func(chromosome):
    try:
        old_best_comp = compile(pickle.load(open('best.c4', 'rb')), "<string>", "eval")
    except:
        old_best_comp = None
    code_comp = chromosome.getCompiledCode()

    win = lose = tie = 0.0
    for rnd in range(ROUNDS):
        c = c4(rows=ROWS,cols=COLS)
        if rnd % 2 == 0:
            other_player = dumb.url(1,'http://dl.no.de/ai/twostep/move')
        else:
            other_player = dumb.url(2,'http://dl.no.de/ai/twostep/move')
        winner = 0
        turns = 0
        total_turns = c.rows * c.cols
        for i in range(total_turns):
            winner = c.isWinner()
            if winner <> 0:
                break
            board = c.getBoard(is_json=False)
            player = (i % 2) + 1
            # Train if we're not the genetic player
            if other_player.getPlayer() == player:
                json_state = json.dumps( { "rows":ROWS,
                                           "cols":COLS,
                                           "board":board,
                                           "currentTurn":player,
                                           "moveNumber":i} )
                column = other_player.getMoveJSON(json_state)
            else: # Otherwise let's eval and see what we get
                col_scores = []
                for col in utils.getFreeCols(board):
                    const, aps, apo, nlts, nlto, nr = utils.getStats(board,player,col)
                    score = eval(code_comp)
                    col_scores.append((score, col))
                random.shuffle(col_scores)
                sc = sorted(col_scores, key=itemgetter(0), reverse=True)
                #print 'Col Scores', str(sc)
                column = sc[0][1]
            c.move(player, column)            
            # This is to compete against self, to do later
            #if False: #old_best_comp is not None:
            #    col_scores = []
            #    for col in utils.getFreeCols(board):
            #        aps, apo, nlts, nlto, nr = utils.getStats(board,player,col)
            #        score = eval(old_best_comp)
            #        col_scores.append((score, col))
            #    random.shuffle(col_scores)
            #    sc = sorted(col_scores, key=itemgetter(0), reverse=True)
            #    #print 'Col Scores', str(sc)
            #    column = sc[0][1]
            turns += 1

        if winner == 0:
            tie += 1.0
        elif winner == other_player.getPlayer():
            lose += 1.0
        else:
            win += 1.0
    
    return (win + tie * 0.5)/ROUNDS