public void StarCrossOver() { int i = 0; Individuo Pai1; Individuo Pai2; Individuo filho = new Individuo(); double S = 0.0; bool newPopulationFull = false; this.GerarRank(); foreach (var item in population) { S += item.getRank(); } while (i < 2) { NewPopulation[i] = new Individuo(population.OrderByDescending(x => x.getFitness()).ElementAt(i)); i++; } //for (int j = 0; j < 50; j++) //{ // NewPopulation[i] = new Individuo(); // FitnesCalc(NewPopulation[i]); // i++; //} while (newPopulationFull == false) { Pai1 = SelectIndividuo(S); Pai2 = SelectIndividuo(S); if (crossOverRate <= Random.NextDouble()) { filho = CopiarGenes(Pai1, Pai2, filho); if (Random.NextDouble() <= mutationRate) { filho = MutationGene(filho); } FitnesCalc(filho); if (i < population.Length) { NewPopulation[i] = new Individuo(filho); i++; } else { newPopulationFull = true; } } Pai1.setLivreCruzamento(); Pai2.setLivreCruzamento(); } }
/* Metodo que executa o cruzamento dos individuos da minha população*/ public void StarCrossOver() { int TradePosition; int i = 0; Individuo Pai1; Individuo Pai2; Individuo filho = new Individuo(0); double S = 0.0; bool newPopulationFull = false; foreach (var item in population) { S += item.getFitness(); } while (newPopulationFull == false) { Pai1 = SelectRollet(S); Pai2 = SelectRollet(S); if (crossOverRate <= Random.NextDouble()) { TradePosition = Random.Next(0, Pai1.returnTamanhoIndividuo() - 1); filho = CopiarGenes(Pai1, Pai2, filho, TradePosition); if (mutationRate <= Random.NextDouble()) { filho = MutationGene(filho); } FitnesCalc(filho); if (i < population.Length) { filho.setID(i); NewPopulation[i] = new Individuo(filho); i++; } else { newPopulationFull = true; } } Pai1.setLivreCruzamento(); Pai2.setLivreCruzamento(); } }