TrabalhosGratuitos.com - Trabalhos, Monografias, Artigos, Exames, Resumos de livros, Dissertações
Pesquisar

O Algoritmo Genético

Por:   •  27/5/2020  •  Resenha  •  450 Palavras (2 Páginas)  •  220 Visualizações

Página 1 de 2

import java.util.Random;

public class AlgoritmoGenetico {

private Cromossomo populacao[];

private int tabuleiro[][];

private Random gerador;

private int qtdPopulacao;

private int x;

private int y;

public AlgoritmoGenetico(int qtdPais, int qtdFilhosPorCasal, int maximoGeracoes, int x, int y) {

tabuleiro = new int[8][8];

gerador = new Random();

qtdPopulacao = calcularQtdPopulacao(qtdPais, qtdFilhosPorCasal);

System.out.println("Populacao: "+qtdPopulacao);

populacao = new Cromossomo[qtdPopulacao];

this.x = x;

this.y = y;

Cromossomo melhorCromossomo = new Cromossomo(x, y);

int geracao=0;

int ultimaGeracao=0;

long tempoInicial = System.currentTimeMillis();

criarPais(qtdPais);

while(true) {

acasalamento(qtdPais, qtdFilhosPorCasal);

selecaoNatural();

if(populacao[0].getNota() > melhorCromossomo.getNota()) {

ultimaGeracao = geracao;

long tempoFinal = System.currentTimeMillis();

melhorCromossomo = populacao[0];

melhorCromossomo.mostrar();

System.out.println("new AlgoritmoGenetico("+qtdPais+", "+qtdFilhosPorCasal+", "+maximoGeracoes+", "+x+", "+y+")");

System.out.println("Geração: "+geracao+" Tempo: " + (tempoFinal - tempoInicial)/1000.0 + " segundos");

mostrarPercursoMelhorCromossomo();

}

if(melhorCromossomo.getNota()==63) {

System.out.println("Encontrado melhor cromossomo!");

break;

}

if(geracao-ultimaGeracao>maximoGeracoes) {

ultimaGeracao = geracao;

criarPais(qtdPais);

}

geracao++;

}

}

private void criarPais(int qtdPais) {

for(int i=0; i<qtdPais; i++) {

populacao[i] = new Cromossomo(x, y);

gerarNota(populacao[i]);

}

}

private void acasalamento(int qtdPais, int qtdFilhos) {

int posicao = qtdPais;

for(int pai=0; pai<qtdPais-1; pai++) {

for(int mae=pai+1; mae<qtdPais; mae++) {

for(int filho=0; filho<qtdFilhos; filho++) {

populacao[posicao] = crossover(populacao[pai], populacao[mae]);

gerarNota(populacao[posicao]);

posicao++;

}

}

}

}

public void mostrarDados() {

System.out.println("Quantidade de populacao: "+qtdPopulacao);

System.out.println("Populacao: ");

for(int i=0; i<qtdPopulacao; i++) {

if(populacao[i] != null) {

populacao[i].mostrar();

}

}

}

private int calcularQtdPopulacao(int qtdPais, int qtdFilhos) {

return calcularQtdCasais(qtdPais, qtdFilhos)*qtdFilhos + qtdPais;

}

private int calcularQtdCasais(int qtdPais, int qtdFilhos) {

return fatorial(qtdPais) / (fatorial(qtdPais-2)*2);

}

private int fatorial(int n) {

int resultado = 1;

for(int i=1; i<=n; i++) {

resultado = resultado*i;

}

return resultado;

}

private void limparTabuleiro() {

for(int y=0; y<8; y++) {

for(int x=0; x<8; x++) {

tabuleiro[x][y] = 0;

}

}

}

private boolean isMovimentoValido(int movimento, int x, int y) {

switch (movimento) {

case 1: x+=1; y+=2; break;

...

Baixar como (para membros premium)  txt (5.7 Kb)   pdf (42.3 Kb)   docx (11.4 Kb)  
Continuar por mais 1 página »
Disponível apenas no TrabalhosGratuitos.com