Advertisement
Guest User

Untitled

a guest
Apr 19th, 2019
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.64 KB | None | 0 0
  1.         //insere novos indivíduos na nova população, até atingir o tamanho máximo
  2.         while (novaPopulacao.getNumIndividuos() < novaPopulacao.getTamPopulacao()) {
  3.             //seleciona os 2 pais por torneio
  4.             Individuo[] pais = selecaoTorneio(populacao);
  5.  
  6.             Individuo[] filhos = new Individuo[2];
  7.  
  8.             //verifica a taxa de crossover, se sim realiza o crossover, se não, mantém os pais selecionados para a próxima geração
  9.             if (r.nextDouble() <= taxaDeCrossover) {
  10.                 filhos = crossover(pais[1], pais[0]);
  11.             } else {
  12.                 filhos[0] = new Individuo(pais[0].getGenes());
  13.                 filhos[1] = new Individuo(pais[1].getGenes());
  14.             }
  15.  
  16.             //adiciona os filhos na nova geração
  17.             novaPopulacao.setIndividuo(filhos[0]);
  18.             novaPopulacao.setIndividuo(filhos[1]);
  19.         }
  20.  
  21.         //ordena a nova população
  22.         novaPopulacao.ordenaPopulacao();
  23.         return novaPopulacao;
  24.     }
  25.  
  26.     public static Individuo[] crossover(Individuo individuo1, Individuo individuo2) {
  27.         Random r = new Random();
  28.  
  29.         //sorteia o ponto de corte
  30.         int pontoCorte1 = r.nextInt((individuo1.getGenes().length()/2) -2) + 1;
  31.         int pontoCorte2 = r.nextInt((individuo1.getGenes().length()/2) -2) + individuo1.getGenes().length()/2;
  32.  
  33.         Individuo[] filhos = new Individuo[2];
  34.  
  35.         //pega os genes dos pais
  36.         String genePai1 = individuo1.getGenes();
  37.         String genePai2 = individuo2.getGenes();
  38.  
  39.         String geneFilho1;
  40.         String geneFilho2;
  41.  
  42.         //realiza o corte,
  43.         geneFilho1 = genePai1.substring(0, pontoCorte1);
  44.         geneFilho1 += genePai2.substring(pontoCorte1, pontoCorte2);
  45.         geneFilho1 += genePai1.substring(pontoCorte2, genePai1.length());
  46.        
  47.         geneFilho2 = genePai2.substring(0, pontoCorte1);
  48.         geneFilho2 += genePai1.substring(pontoCorte1, pontoCorte2);
  49.         geneFilho2 += genePai2.substring(pontoCorte2, genePai2.length());
  50.  
  51.         //cria o novo indivíduo com os genes dos pais
  52.         filhos[0] = new Individuo(geneFilho1);
  53.         filhos[1] = new Individuo(geneFilho2);
  54.  
  55.         return filhos;
  56.     }
  57.  
  58.     public static double getTaxaDeCrossover() {
  59.         return taxaDeCrossover;
  60.     }
  61.  
  62.     public static void setTaxaDeCrossover(double taxaDeCrossover) {
  63.         Algoritimo.taxaDeCrossover = taxaDeCrossover;
  64.     }
  65.  
  66.  
  67.      public static double getTaxaDeMutacao() {
  68.         return taxaDeMutacao;
  69.     }
  70.  
  71.     public static void setTaxaDeMutacao(double taxaDeMutacao) {
  72.         Algoritimo.taxaDeMutacao = taxaDeMutacao;
  73.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement