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));
        }
示例#2
0
        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;
            }
        }