Exemple #1
0
def look_best_future(board, pf, times=0):
    if times == 0:
        max_prize_1 = []
        possb = [game.up_possible(board),game.down_possible(board),game.left_possible(board),game.right_possible(board)]
        for i in range(4):
            if possb[i] == 1:
                y = copy.deepcopy(board)
                y = action(y,i)
                max_prize_1.append(get_prize(y, pf))
            else:
                max_prize_1.append(0)
        return max_prize_1
    else:
        max_prize = 0
        move = -1
        possb = [game.up_possible(board),game.down_possible(board),game.left_possible(board),game.right_possible(board)]
        for i in range(4):
            if possb[i] == 1:
                y = copy.deepcopy(board)
                y = action(y,i)
                y = populate_all_possible(y)
                max_prize_2 = 0
                for j in y:
                    prize = look_best_future(j, pf, times-1)
                    prize = max(prize) 
                    if prize > max_prize_2:
                        max_prize_2 = prize
                if max_prize_2 >= max_prize:
                    max_prize = max_prize_2
                    move = i
        return move
Exemple #2
0
def eval_genomes(genomes, config):
    for genome_id, genome in genomes:
        net = neat.nn.recurrent.RecurrentNetwork.create(genome, config)
        x = game.start_game()
        possb = [game.up_possible(x),game.down_possible(x),game.left_possible(x),game.right_possible(x)]
        y = [0 for i in range(16)]
        y = game.matrix_to_vector(x)
        death = 1
        death_flag = 0
        while possb != [0,0,0,0]:
            output = net.activate(format_input(x))
            x = action(output, x)
            if game.matrix_to_vector(x) == y:
                if death_flag == 0:
                    death = -3
                    death_flag = 1
                else:
                    death += 1 
            else:
                # print("not equal! \n")
                # print(game.matrix_to_vector(x), y)
                death = 1
                death_flag = 0
                y = game.matrix_to_vector(x)
            if death == 0:
                break
            scr = game.score(x)
            genome.fitness = scr
            possb = [game.up_possible(x),game.down_possible(x),game.left_possible(x),game.right_possible(x)]
Exemple #3
0
    def eval_fitness(genomes, config):

        for idx, g in genomes:
            cppn = neat.nn.FeedForwardNetwork.create(g, config)
            network = ESNetwork(substrate, cppn, params)
            net = network.create_phenotype_network()

            fitnesses = []

            for i in range(trials):
                x = game.start_game()
                possb = [
                    game.up_possible(x),
                    game.down_possible(x),
                    game.left_possible(x),
                    game.right_possible(x)
                ]
                scr = 0
                y = [0 for z in range(16)]
                y = game.matrix_to_vector(x)
                death = 1
                death_flag = 0
                net.reset()

                for j in range(max_steps):
                    for k in range(network.activations):
                        o = net.activate(format_input(x))
                    x = action(np.argmax(o), x)
                    if game.matrix_to_vector(x) == y:
                        if death_flag == 0:
                            death = -3
                            death_flag = 1
                        else:
                            death += 1
                    else:
                        death = 1
                        death_flag = 0
                        y = game.matrix_to_vector(x)
                    if death == 0:
                        break
                    scr = game.score(x)
                    possb = [
                        game.up_possible(x),
                        game.down_possible(x),
                        game.left_possible(x),
                        game.right_possible(x)
                    ]
                    if possb == [0, 0, 0, 0]:
                        break

                fitnesses.append(scr)

            g.fitness = np.array(fitnesses).mean()
Exemple #4
0
def run(pf):
    x = game.start_game()
    prev_x = copy.deepcopy(x)
    possb = [game.up_possible(x),game.down_possible(x),game.left_possible(x),game.right_possible(x)]
    while possb != [0,0,0,0]:
        temp = copy.deepcopy(x)
        move = look_avg_future(temp, pf, 0)
        move = move.index(max(move))
        if(possb[move]==1):
            x = action(x,move)
            x = game.populate(x)
            # game.print_board(x)
            # print("maxtile: ",game.maxtile(x))
        if prev_x == x:
            print("breaking ###################################################################################################################################################")
            break
        else:
            prev_x = x
        # game.print_board(x)
        # print(possb)
        possb = [game.up_possible(x),game.down_possible(x),game.left_possible(x),game.right_possible(x)]
    print("maxtile: ", game.maxtile(x))
    return game.score(x)
Exemple #5
0
def look_avg_future(board, pf, times=0):
    if times == 0:
        max_prize_1 = []
        possb = [game.up_possible(board),game.down_possible(board),game.left_possible(board),game.right_possible(board)]
        for i in range(4):
            if possb[i] == 1:
                y = copy.deepcopy(board)
                y = action(y,i)
                max_prize_1.append(get_prize(y, pf))
            else:
                max_prize_1.append(-100000000)
        return max_prize_1
    else:
        max_prize = 0
        move = -1
        possb = [game.up_possible(board),game.down_possible(board),game.left_possible(board),game.right_possible(board)]
        for i in range(4):
            if possb[i] == 1:
                y = copy.deepcopy(board)
                y = action(y,i)
                y2 = populate_all_possible2(y)
                y4 = populate_all_possible4(y)
                prizes = []
                for j in y2:
                    prize = look_avg_future(j, pf, times-1)
                    prize = max(prize) 
                    prizes.append(prize)
                for j in y4:
                    prize = look_avg_future(j, pf, times-1)
                    prize = max(prize)/10
                    prizes.append(prize)
                avg_prize = sum(prizes)/len(prizes)
                if avg_prize >= max_prize:
                    max_prize = avg_prize
                    move = i
        return move