def evoluir(self): self.a = 0 global result_list historico_populacao = [] # melhor populacao em cada evolucao historico_populacao.append(self._cromossomo_inicial) melhor_cromossomo = self._cromossomo_inicial while self.__condicao_parada(extremo(deepcopy(historico_populacao), 1)[0]): #print('evol\t' + str(self.a) + ' - ' + self._experimento) self.a = self.a+1 """prints de controle print("evolucao - " + str(self.a) + ' temperatura - ' + str(self._T)) # Debug print ---- Remover apos corrigir os erros print("Inicio do AG e antes do SA - \n") print(self._populacao) print("\n\n") """ #-------- Simulated Annealing ---------------# pool = Pool() results = [] i = 0 #Dispara as N threads de SA (onde N e o tamanho da populacao) for cromossomo in self._populacao: results.append(pool.apply_async(func = simulated_annealing, args = (cromossomo, self._NR, self._T, self._mutacao_SA, self._argumentos))) i += 1 pool.close() pool.join() self._populacao = list(map(lambda x, y: x.get(timeout = y), results, range(self._tam_populacao))) """ # Debug print ---- Remover apos corrigir os erros print("Depois do SA - \n") print(self._populacao) print("\n\n") """ #-------- Algoritmo genetico -----------------# for _ in range(self._evolucoesAG): # execultar o calculo de aptidao / func avaliacao # for cromossomo in self._populacao: cromossomo.funcao_avaliacao() # atualiza o score do cromossomo # selecao # if self._selecao is extremo: nova_populacao = self._selecao(deepcopy(self._populacao), self._n_melhores) elif self._selecao is media: nova_populacao = self._selecao(deepcopy(self._populacao)) elif self._selecao is roleta: nova_populacao = self._selecao(deepcopy(self._populacao)) # mutacao # n_elementos_mutados = self._tam_populacao - len(nova_populacao) if self._mutacao is embaralhar: nova_populacao.extend(self._mutacao(deepcopy(nova_populacao), n_elementos_mutados)) elif self._mutacao is janela: nova_populacao.extend(self._mutacao(deepcopy(nova_populacao), self._janela, self._randomizar_janela, n_elementos_mutados)) elif self._mutacao is randomPosition: nova_populacao.extend(self._mutacao(deepcopy(nova_populacao), n_elementos_mutados)) elif self._mutacao is trocaFontes: nova_populacao.extend(self._mutacao(deepcopy(nova_populacao), n_elementos_mutados)) elif self._mutacao is centraliza: nova_populacao.extend(self._mutacao(deepcopy(nova_populacao), n_elementos_mutados)) elif self._mutacao is troca_temperatura: nova_populacao.extend(self._mutacao(deepcopy(nova_populacao), self._T, n_elementos_mutados)) elif self._mutacao is colocaFontes: nova_populacao.extend(self._mutacao(deepcopy(nova_populacao), n_elementos_mutados)) self._populacao = deepcopy(nova_populacao) """ # Debug print ---- Remover apos corrigir os erros print("Final do AG - \n") print(self._populacao) print("\n\n") """ #print(extremo(deepcopy(self._populacao), 1)) melhor_cromossomo = extremo(deepcopy(self._populacao), 1)[0] historico_populacao.append(melhor_cromossomo) # vetor com o melhor de cada populacao self._T = self._T * self._alfa if self.a % 5 == 0: desenha_cromossomo("evolucao_" + str(self.a),melhor_cromossomo) melhor_solucao = extremo(deepcopy(historico_populacao), 1) if melhor_solucao[0].score[1] == 1: print("Nenhuma solucao viavel encontrada") else: print("Melhor solucao:") print(melhor_solucao) #desenha_cromossomo("melhor solucao",melhor_solucao[0]) return historico_populacao
if __name__ == '__main__': tipo = "Excel" #medindo o tempo ini = time.time() cromossomo = Cromossomo('0', fontes_iniciais()) #cromossomo = gera_cromossomo_banco() cromossomo.funcao_avaliacao() """<doc>""" print('Cromossomo original') print(cromossomo) desenha_cromossomo('cromossomo_inicial',cromossomo) """</doc>""" if tipo == "Hibrido": #Hibrido - SA hibrido = Hibrido() hibrido.set_Hibrido('teste unico', cromossomo, tam_populacao=100, prob_inicial=0.8, prob_final=0.1, evolucoesH=40, evolucoesAG=50) hibrido.set_selecao(extremo, 10) hibrido.set_mutacao(troca_temperatura) hibrido.set_mutacao_SA(troca_temperatura) hibrido.evoluir() elif tipo == "AG": #AG - Normal