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

    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(3, best_individuos, score_medias_geracoes)

        geracao.reproduzir(qtInd, chanceCO, mutacao)

    print("melhor individuo!!!")

    gameState = jogo.jogar(geracao.individuos[0], vel_jogo, 1)

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

    plt.title('Fitness Melhores Individuos por Geração')
    plt.plot(best_individuos)
    plt.ylabel("Fitness Melhores Individuos")
    plt.xlabel("Gerações")

    plt.subplot(212)
    print("Medias Fitness por Gerações:")
    print(score_medias_geracoes)
    plt.title('Médias de Fitness de Individuos por Geração')
    plt.plot(score_medias_geracoes)
    plt.ylabel("Media Fitness Geração")
    plt.xlabel("Gerações")
    plt.subplots_adjust(top=0.94, bottom=0.08, left=0.10, right=0.95, hspace=0.25,
                        wspace=0.35)

    plt.show()



    return(geracao)
Exemple #2
0
def jogar():
    print("*************************************")
    print("Escolha um dos dois jogos.")
    print("*************************************")

    print("(1) - Adivinhação | (2) - Forca")

    escolha = int(input("=> "))

    if escolha == 1:
        print("Iniciando jogo da adivinhação")
        jogo.jogar()
    elif escolha == 2:
        print("Iniciando jogo da forca")
        forca.jogar()
Exemple #3
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 #4
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 #5
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 #6
0
    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
    #geracao.selecao(1)
    #print("melhor individuo!!!")
    #gameState = jogo.jogar(geracao.individuos, epoca, 10,scoreMax = 20000, jogoRapido = True)


#-----------------------------------------------

gen = main()

## essa parte serve para você ver o melhor individuo jogando o jogo em sua velocidade normal
gen.selecao(1)
print("melhor individuo!!!")
gameState = jogo.jogar(gen.individuos, 1, 1)
print(gen.individuo[0].score)
Exemple #7
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)