public Individuo Roleta(Populacao pop) { double numSorteado = (Constants.random.NextDouble() * 100); foreach (Individuo ind in pop.getPopulacao()) { if (numSorteado >= ind.getRangeRoleta()[0] && numSorteado <= ind.getRangeRoleta()[1]) { return(ind); } } //Nunca vai acontecer return(null); }
/* * Retorna um individuo a partir da populacao, sendo esse individuo retornado conforme * sorteio */ public Individuo Roleta(Populacao pop) { double numSorteado = Constants.random.NextDouble() * 100; foreach (Individuo ind in pop.GetPopulacao()) { if (numSorteado >= ind.GetRangeRoleta()[0] && numSorteado <= ind.GetRangeRoleta()[1]) { return(ind); } } return(null); }
public Individuo Roleta(Populacao pop) { //Numero sorteado randomico gerado double numSorteado = (Constants.random.NextDouble() * 100); foreach (Individuo ind in pop.getPopulacao()) { if (numSorteado >= ind.getRangeRoleta()[0] && numSorteado <= ind.getRangeRoleta()[1]) { //Se ele estiver entre a posição inicial e final da pizza, retorne return(ind); } } //Nunca vai acontecer return(null); }
//Método qual aplica a operação genética public Populacao executaAG(Populacao pop) { //Inicio do AG //Avaliação da População Populacao novaPopulacao = new Populacao(); List <Individuo> popBuffer = new List <Individuo>(); for (int i = 0; i < (Constants.sizePopulacao / 2); i++) { //Selecionar os pais para cruzamento Individuo pai = Roleta(pop); Individuo mae = Roleta(pop); //Realizar o Cruzamento Individuo[] filhos = Crossover(pai, mae); //Aplicar a mutação (Se necessario) Individuo filhoA = Mutacao(filhos[0]); Individuo filhoB = Mutacao(filhos[1]); popBuffer.Add(filhoA); popBuffer.Add(filhoB); } //Apagar velhos membros da população //Inserir novos membros for (int i = 0; i < Constants.sizePopulacao; i++) { novaPopulacao.setIndividuo(i, popBuffer[i]); } popBuffer = null; //Re-avalizar a pop novaPopulacao.atualizarValores(); return(novaPopulacao); }
//Métodos /* * Método que executa o algoritmo genétrico */ public Populacao ExecutaAG(Populacao pop) { //Início do algoritmo genético //Avaliação da população Populacao novaPopulacao = new Populacao(); List <Individuo> popBuffer = new List <Individuo>(); for (int i = 0; i < Constants.sizePopulacao / 2; i++) { //Selecionar os pais para cruzamento Individuo pai = Roleta(pop); Individuo mae = Roleta(pop); //Realizar cruzamento Individuo[] filhos = Crossover(pai, mae); //Aplicar mutação Individuo filhoA = Mutacao(filhos[0]); Individuo filhoB = Mutacao(filhos[1]); popBuffer.Add(filhoA); popBuffer.Add(filhoB); } //Apagar velhos membros //Inserir novos membros for (int i = 0; i < Constants.sizePopulacao; i++) { novaPopulacao.SetIndividuo(i, popBuffer[i]); } popBuffer = null; //reavaliar a população novaPopulacao.AtualizarValores(); return(novaPopulacao); }