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]))
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]
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)
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]
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
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):