public ParIndividuo cruzar(Individuo paiA, Individuo paiB) { //Define de forma aleatória os pontos de corte DoisPontos points = new DoisPontos(paiA.cromossomo.Length - 1, random); //Gera um primeiro indivíduo considerando o cruzamento entre os pontos de corte Individuo individuoA = cruzar(paiA, paiB, points.dentro); //Gera um segundo indivíduo considerando o cruzamento fora dos pontos de corte Individuo individuoB = cruzar(paiB, paiA, points.fora); //Retorna os indivíduos gerados return(new ParIndividuo(individuoA, individuoB)); }
public void mutar(Individuo individuo) { //Verifica a taxa de mutação if (random.NextDouble() <= this.taxaMutacao) { //Gera dois pontos aleatórios onde os genes serão trocados DoisPontos pontos = new DoisPontos(individuo.cromossomo.Length - 1, random); //Acessa os genes que serão trocados int geneA = individuo.cromossomo[pontos.pontoA]; int geneB = individuo.cromossomo[pontos.pontoB]; //Troca o valor de um gene pelo outro individuo.cromossomo[pontos.pontoA] = geneB; individuo.cromossomo[pontos.pontoB] = geneA; } }