Exemple #1
0
def main():
    '''

    Nessa funcao voce deve procurar um individuo capaz de vencer o jogo,
    Para isso você precisa:

    1) Declarar a Geracao Zero, com 10 individuos

    2) Jogar o jogo com a geração

    3) Avaliar os individuos de cada geracao (fitness)

    4) Selecionar os 4 melhores e utilizar eles para reproduzir a proxima Geracao

    5) Voltar para "2" até a condição de parada seja atingida (ex: conseguir passar de nível, fazer uma pontuação maior que 20.000 pontos)

    6) Retornar um objeto Geracao com os individuos treinados (pode ser apenas 1 individuo)

    Dicas: você ja criou diversas funcoes no outro arquivo e deve chamá-las quando achar necessário.
      As que você vai precisar usar são:
          -ag.Geracoes()
          -individuo.fitness(gameState)
          -geracao.selecao(numSelec)
          -geracao.reproduzir(m, chanceCO, chanceMut)
       Alem disso, você deve usar a funcão ja pronta:
          -gameState = jogo.jogar(geracao.individuos, numerodageracao, vel_jogo,scoreMax = 20000, jogoRapido = False)
          - geracao.individuos é a geracao criada por você
          - numeroDaGeracao é qual a geração atual (1, 2, 3...)
          - vel_jogo é a velocidade do jogo (1 é a velocidade normal, recomendamos 100 para não ficar esperando muito)
          - scoreMax e jogoRapido estão definidos
          -essa função utiliza o individuo para um novo jogo de Tetris, e retorna variáveis do jogo (gameState)
            além disso, deve-se escolher a pontuação máxima para "ganhar" e finalizar o jogo
            e também definir se o jogo estará rápido (True) ou não (False)

         -lembrando que gameState possui:
                    gameState[0] = numero de pecas
                    gameState[1] = linhas destruidas(combos de 1,2,3,4)
                    gameState[2] = pontuação do tetris
                    gameState[3] = ganhou


    '''
    #COMPLETE AQUI:
    geracao = ag.Geracao(20, 7)
    for i in range(20):
        print(geracao.individuos[i])
    epoca = 0
    while geracao.individuos[0].score < 10000:
        gameState = jogo.jogar(geracao.individuos,
                               epoca,
                               100,
                               scoreMax=20000,
                               jogoRapido=False)
        for i in range(len(geracao.individuos)):
            geracao.individuos[i].fitness(gameState[i])
            print(geracao.individuos[i].score)
        geracao.selecao(7)
        geracao.reproduzir(20, 0.2, 0.05)
        epoca += 1
    return geracao
Exemple #2
0
def main():
    generation = ag.Geracao(10)
    fim = False
    while (not fim):
        print('new generation!', generation)
        for individuo in generation.individuos:
            gameState = jogo.jogar(individuo, 30, 100)
            individuo.fitness(gameState)
            print('numero de batidas ', gameState[5])
            fim |= gameState[6]
        generation.selecao()

        print('fim dessa geração', generation)
        generation.reproduzir(.2, .3)

    print('fim porra')
    print(generation)

    ##    Nessa funcao voce deve procurar um individuo capaz de vencer o jogo,
    ##    Para isso você precisa:
    ##
    ##    1) Declarar a Geracao Zero, com 10 individuos
    ##
    ##    2) Avaliar os individuos de cada geracao (jogando o jogo)
    ##
    ##    3) Selecionar os 4 melhores e utilizar eles para reproduzir a proxima Geracao
    ##
    ##    4) Voltar para "2" até a condição de parada seja atingida (ex: rebater mais de 30 vezes, fazer uma pontuação maior que X pontos)
    ##
    ##    5) Retornar um objeto Geracao com os individuos treinados (pode ser apenas 1 individuo)
    ##
    ##
    ##    Dicas: você ja criou diversas funcoes no outro arquivo e deve chamá-las quando achar necessário.
    ##        As que você vai precisar usar são:
    ##            -ag.Geracoes()
    ##            -individuo.fitness(gameState)
    ##            -geracao.selecao(numSelec)
    ##            -geracao.reproduzir(m, chanceCO, chanceMut)
    ##        Alem disso, você deve usar a funcão ja pronta:
    ##            -gameState = jogo.jogar(individuo,numBat,multVelocidade)
    ##                -essa função utiliza o individuo para jogar uma partida de Pong, e retorna variáveis do jogo (gameState)
    ##                    além disso, deve-se escolher o número de batidas para "ganhar" e finalizar o jogo
    ##                    e também definir o quão rápido deve estar o jogo (recomendo usar multVelocidade = 50)
    ##
    ##                -lembrando que gameState possui:
    ##                    #gameState[0] = player.y (normalizado de -1 a +1)
    ##                    #gameState[1] = ball.x   (normalizado de -1 a +1)
    ##                    #gameState[2] = ball.y   (normalizado de -1 a +1)
    ##                    #gameState[3] = ball.speed_x
    ##                    #gameState[4] = ball.speed_y
    ##                    #gameState[5] = numBat (numero de vezes que a bolinha bateu no player)
    ##                    #gameState[6] = ganhou (True/False, se o player sobreviveu o tempo definido)

    #COMPLETE AQUI

    return (generation)
Exemple #3
0
def main():
    qtdPop = int(input("Quantidade Gerações: "))
    qtInd = int(input("Quantidade de individuos: "))
    mutacao = float(input("Mutação: "))
    chanceCO = float(input("CrossOver: "))
    melhores = int(input("Manter os melhores: "))

    geracao = ag.Geracao(qtInd)

    best_individuos = []
    score_medias_geracoes = []

    vel_jogo = 500
    for j in range(qtdPop):
        print(' \n')
        print(' - - - - Geração atual: {} - - - - '.format(j + 1))
        print(' \n')

        for i in range(qtInd):
            gameState = jogo.jogar(geracao.individuos[i],
                                   vel_jogo,
                                   scoreMax=200000,
                                   jogoRapido=True)
            geracao.individuos[i].fitness(gameState)
            print("Individuo: " + (i + 1).__str__() + " score:" +
                  geracao.individuos[i].score.__str__())
        geracao.selecao(melhores, best_individuos, score_medias_geracoes)

        geracao.reproduzir(qtInd, chanceCO, mutacao)

    print("Melhores Individuos:")
    print(best_individuos)
    plt.subplot(211)

    plt.title('Fitness dos melhores indivíduos por geração')
    plt.plot(best_individuos)
    plt.ylabel("Fitness dos melhores indivíduos")
    plt.xlabel("Gerações")

    plt.subplot(212)
    print("Medias do fitness por gerações:")
    print(score_medias_geracoes)
    plt.title('Médias do fitness dos indivíduos por geração')
    plt.plot(score_medias_geracoes)
    plt.ylabel("Media do Fitness por Geração")
    plt.xlabel("Gerações")
    plt.subplots_adjust(top=0.89,
                        bottom=0.11,
                        left=0.12,
                        right=0.95,
                        hspace=0.85,
                        wspace=0.35)

    plt.show()

    return (geracao)
Exemple #4
0
def main():

    numInd = 10
    geracao = ag.Geracao(numInd)
    #vel_jogo = int(input('Velocidade de jogo desejada: '))*100
    vel_jogo = 500
    for j in range(numInd):
        print (' \n')
        print (' - - - - Geração atual: {} - - - - ' .format(j+1))
        print (' \n')
        #print("   Score: ",geracao.individuos[i].fitness(gameState),"\n")
        for i in range(10):
            gameState = jogo.jogar(geracao.individuos[i], vel_jogo, scoreMax = 200000, jogoRapido = False)
            geracao.individuos[i].fitness(gameState)
            geracao.selecao(1)
            print("melhor individuo da geração!!!")
        geracao.selecao(3)
        geracao.reproduzir(10)

    geracao.selecao(1)
    print("melhor individuo!!!")
    gameState = jogo.jogar(geracao.individuos[0], vel_jogo, 1)    

    return(geracao)
Exemple #5
0
def main():
    '''
    Nessa funcao voce deve vai procurar um individuo capaz de vencer o jogo,
    Para isso você precisa:

    1) Declarar a Geracao Zero, com 10 individuos

    2) Avaliar os individuos de cada geracao

    3) Selecionar os 3 melhores e utilizar eles para reproduzir a proxima Geracao


    Dicas: você ja criou diversas funcoes no outro arquivo e deve chamá-las quando achar necessário.
        As que você vai precisar usar são:        
            -ag.Geracoes()
            -individuo.fitness(gameState)
            -geracao.selecao(numSelec)
            -geracao.reproduzir(m, chanceCO, chanceMut)
        Alem disso, você pode usar a funcão:
            -gameState = jogo.jogar(individuo,numBat,multVelocidade)
                -essa função utiliza o individuo para jogar uma partida de Pong,
                    além disso, deve-se escolher o número de batidas para "ganhar" e finalizar o jogo
                    e também definir o quão rápido deve estar o jogo

                -lembrando que gameState possui:    
                    #gameState[0] = player.y (normalizado de -1 a +1)
                    #gameState[1] = ball.x   (normalizado de -1 a +1)
                    #gameState[2] = ball.y   (normalizado de -1 a +1)
                    #gameState[3] = ball.speed_x
                    #gameState[4] = ball.speed_y
                    #gameState[5] = numBat (numero de vezes que a bolinha bateu no player)
                    #gameState[6] = ganhou (True/False, se o player sobreviveu o tempo definido)

    '''

    multVel = 100
    i = 0
    #geracao0
    generation = ag.Geracao(10)

    cont = True
    while cont:
        print('geracao %d' % i)
        for individuo in generation.individuos:
            gameState = jogo.jogar(individuo, 40, multVel)
            individuo.fitness(gameState)

            if gameState[6] == True:
                cont = False
                print('Ganhei!')
            #print(individuo)
            #print(individuo.score)

        #condicao de parada
        if cont == True and i < 100:
            generation.selecao(3)
            generation.reproduzir(10)
            i += 1
        else:
            cont = False

    generation.selecao(1)

    return (generation)