コード例 #1
0
ファイル: ga.py プロジェクト: Haiga/gaTesteEinstein
def ga(populacao_inicial,
       tipo_selecao=selecaoTorneio,
       tipo_crossover=crossoverUniforme,
       tipo_mutacao=mutacaoMudancaPontos,
       max_num_geracoes=300):
    populacao = populacao_inicial
    geracao = 0
    while (geracao < max_num_geracoes):
        u = [ft.fitnessByRules(ind) for ind in populacao]
        print(max(u))
        for i in range(tamanho_populacao):
            if (ft.fitnessByRules(populacao[i]) >= 15):
                result = populacao[i]
                show(result)
                return

        temp = []
        for i in range(int(tamanho_populacao / 2)):
            [pai, mae] = tipo_selecao(populacao)
            [filho, filha] = tipo_crossover(populacao[pai], populacao[mae])

            tipo_mutacao(filho)
            tipo_mutacao(filha)
            temp.append(filho)
            temp.append(filha)

        nova_populacao = []
        for i in range(tamanho_populacao):
            nova_populacao.append(populacao[i])
            nova_populacao.append(temp[i])

        i = 0
        while (i < tamanho_populacao * 2):
            j = i
            while (j < tamanho_populacao * 2):
                #print(fitnessByRules(nova_populacao[i]))
                #print(fitnessByRules(nova_populacao[j]))
                if (ft.fitnessByRules(nova_populacao[i]) < ft.fitnessByRules(
                        nova_populacao[j])):

                    individuo_temp = copy.deepcopy(nova_populacao[i])
                    nova_populacao[i] = copy.deepcopy(nova_populacao[j])
                    nova_populacao[j] = copy.deepcopy(individuo_temp)
                j += 1
            i += 1
        populacao = []
        for i in range(tamanho_populacao):
            populacao.append(nova_populacao[i])
        geracao += 1
    show(populacao[0])
    print(ft.fitnessByRules(populacao[0]))
コード例 #2
0
ファイル: ga.py プロジェクト: Haiga/gaTesteEinstein
def selecaoRoleta(populacao):
    fitness_by_individuo_in_populacao = [
        ft.fitnessByRules(individuo) for individuo in populacao
    ]
    indice_maior1 = 0
    tam_populacao = len(fitness_by_individuo_in_populacao)
    for indice_fit in range(tam_populacao):
        if (fitness_by_individuo_in_populacao[indice_fit] >
                fitness_by_individuo_in_populacao[indice_maior1]):
            indice_maior1 = indice_fit
    fitness_by_individuo_in_populacao[indice_maior1] = 0
    indice_maior2 = 0
    for indice_fit in range(tam_populacao):
        if (fitness_by_individuo_in_populacao[indice_fit] >
                fitness_by_individuo_in_populacao[indice_maior2]):
            indice_maior2 = indice_fit
    return [indice_maior1, indice_maior2]
コード例 #3
0
def ordene(permList, key):
    teste = zerarSolucao()
    values = []
    total_perm = len(permList)
    for indice_perm in range(total_perm):
        insert(teste, key, permList[indice_perm], caracteristicas[key])
        values.append(ft.fitnessByRules(teste))
        teste = zerarSolucao()

    for i in range(total_perm):
        for j in range(i, total_perm):
            if (values[i] < values[j]):
                temp = values[i]
                values[i] = values[j]
                values[j] = temp
                temp_perm = deepcopy(permList[i])
                permList[i] = deepcopy(permList[j])
                permList[j] = deepcopy(temp_perm)
コード例 #4
0
ファイル: ga.py プロジェクト: Haiga/gaTesteEinstein
def selecaoTorneio(populacao, tam_amostra=4):
    random_indices = random.sample(range(0, tamanho_populacao), tam_amostra)
    fitness_by_individuo_in_populacao = [
        ft.fitnessByRules(individuo) for individuo in populacao
    ]
    indice_pai = 0
    indice_mae = 1
    for i in range(tam_amostra):
        k = random_indices[i]
        if (fitness_by_individuo_in_populacao[k] >
                fitness_by_individuo_in_populacao[indice_pai]):
            indice_pai = k
    for i in range(tam_amostra):
        k = random_indices[i]
        if (fitness_by_individuo_in_populacao[k] >
                fitness_by_individuo_in_populacao[indice_mae]):
            if (indice_pai != k):
                indice_mae = k
    return [indice_pai, indice_mae]
コード例 #5
0
            if (ft.isValid(m)):
                for c3 in range(tam):
                    m["bebida"] = []
                    insert(m, "bebida", permList[c3],
                           caracteristicas["bebida"])
                    if (ft.isValid(m)):
                        for c4 in range(tam):
                            m["cigarro"] = []
                            insert(m, "cigarro", permList[c4],
                                   caracteristicas["cigarro"])
                            if (ft.isValid(m)):
                                for c5 in range(tam):
                                    m["animal"] = []
                                    insert(m, "animal", permList[c5],
                                           caracteristicas["animal"])
                                    if (ft.fitnessByRules(m) >= 15):
                                        for key in m:
                                            print(m[key])
                                        #print(m)
                                        print(ft.fitnessByRules(m))
                                        resolvido = 1
                                        break
                            if (resolvido):
                                break
                    if (resolvido):
                        break
            if (resolvido):
                break
    if (resolvido):
        break
コード例 #6
0
            solucao_corrente = deepcopy(solucao)
            flag_final = 0
            for i1 in range(len(permList1)):
                for i2 in range(len(permList2)):
                    for i3 in range(len(permList3)):
                        for i4 in range(len(permList4)):
                            for i5 in range(len(permList5)):

                                complete(solucao_corrente, "cor", permList1[i1], faltantes["cor"])
                                complete(solucao_corrente, "nacionalidade", permList2[i2], faltantes["nacionalidade"])
                                complete(solucao_corrente, "bebida", permList3[i3], faltantes["bebida"])
                                complete(solucao_corrente, "cigarro", permList4[i4], faltantes["cigarro"])
                                complete(solucao_corrente, "animal", permList5[i5], faltantes["animal"])


                                if(ft.fitnessByRules(solucao_corrente)==15):
                                    for i in solucao_corrente:
                                        print(solucao_corrente[i])
                                    print(ft.fitnessByRules(solucao_corrente))
                                    #print(solucao_corrente)
                                    flag_final = 1
                                    break

                                solucao_corrente = deepcopy(solucao)
                            if(flag_final):
                                break
                        if(flag_final):
                            break
                    if(flag_final):
                        break
                if(flag_final):