Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //insere novos indivíduos na nova população, até atingir o tamanho máximo
- while (novaPopulacao.getNumIndividuos() < novaPopulacao.getTamPopulacao()) {
- //seleciona os 2 pais por torneio
- Individuo[] pais = selecaoTorneio(populacao);
- Individuo[] filhos = new Individuo[2];
- //verifica a taxa de crossover, se sim realiza o crossover, se não, mantém os pais selecionados para a próxima geração
- if (r.nextDouble() <= taxaDeCrossover) {
- filhos = crossover(pais[1], pais[0]);
- } else {
- filhos[0] = new Individuo(pais[0].getGenes());
- filhos[1] = new Individuo(pais[1].getGenes());
- }
- //adiciona os filhos na nova geração
- novaPopulacao.setIndividuo(filhos[0]);
- novaPopulacao.setIndividuo(filhos[1]);
- }
- //ordena a nova população
- novaPopulacao.ordenaPopulacao();
- return novaPopulacao;
- }
- public static Individuo[] crossover(Individuo individuo1, Individuo individuo2) {
- Random r = new Random();
- //sorteia o ponto de corte
- int pontoCorte1 = r.nextInt((individuo1.getGenes().length()/2) -2) + 1;
- int pontoCorte2 = r.nextInt((individuo1.getGenes().length()/2) -2) + individuo1.getGenes().length()/2;
- Individuo[] filhos = new Individuo[2];
- //pega os genes dos pais
- String genePai1 = individuo1.getGenes();
- String genePai2 = individuo2.getGenes();
- String geneFilho1;
- String geneFilho2;
- //realiza o corte,
- geneFilho1 = genePai1.substring(0, pontoCorte1);
- geneFilho1 += genePai2.substring(pontoCorte1, pontoCorte2);
- geneFilho1 += genePai1.substring(pontoCorte2, genePai1.length());
- geneFilho2 = genePai2.substring(0, pontoCorte1);
- geneFilho2 += genePai1.substring(pontoCorte1, pontoCorte2);
- geneFilho2 += genePai2.substring(pontoCorte2, genePai2.length());
- //cria o novo indivíduo com os genes dos pais
- filhos[0] = new Individuo(geneFilho1);
- filhos[1] = new Individuo(geneFilho2);
- return filhos;
- }
- public static double getTaxaDeCrossover() {
- return taxaDeCrossover;
- }
- public static void setTaxaDeCrossover(double taxaDeCrossover) {
- Algoritimo.taxaDeCrossover = taxaDeCrossover;
- }
- public static double getTaxaDeMutacao() {
- return taxaDeMutacao;
- }
- public static void setTaxaDeMutacao(double taxaDeMutacao) {
- Algoritimo.taxaDeMutacao = taxaDeMutacao;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement