public void insere(Individuo x) { this.ultimo.prox = new Celula(); this.ultimo = this.ultimo.prox; this.ultimo.item = x; this.ultimo.prox = null; this.TamanhoLista++; }
/* Metodo que inicia a população */ public void startPopulation() { // For que inicializa todos os individuos da população e calcula o fitness inicial de cadas individuo. for (int i = 0; i < population.Length; i++) { population[i] = new Individuo(i); NewPopulation[i] = new Individuo(i); FitnesCalc(population[i]); } }
public Individuo(Individuo x) { this.individuo = new int[50]; ID = x.getID(); fitness = x.getFitness(); for (int i = 0; i < individuo.Length; i++) { individuo[i] = x.getGeneAt(i); } }
// metodo utilizada para o calculo do fitness de cada individuo. public void FitnesCalc(Individuo x) { double posiçõesCorretas = 0.0; double resultado = 0.0; for (int i = 0; i < gabarito.Length; i++) { if (gabarito[i] == x.getGeneAt(i)) posiçõesCorretas++; } if (posiçõesCorretas == 0) resultado = 0.0; else resultado = (posiçõesCorretas - 1.0) / (gabarito.Length - 1); x.setFitness(resultado); }
/*Metodo para atualizar a nova geração de individuos com os novos individuos gerados*/ public void AtualizaNovaGeração() { for (int i = 0; i < population.Length; i++) { population[i] = new Individuo(NewPopulation[i]); } }
/* Metodo que copia os genes que serão transmitidos para os individuos filhos do cruzamento*/ public Individuo CopiarGenes(Individuo pai1, Individuo pai2, Individuo filho, int tradePosition) { int x = 0; while (x < pai1.returnTamanhoIndividuo()) { if (x <= tradePosition) { filho.setGeneAt(pai1.getGeneAt(x), x); } else { filho.setGeneAt(pai2.getGeneAt(x), x); } x++; } return filho; }
/* Metodo que realiza a mutação de um gene no individuo especifico*/ public Individuo MutationGene(Individuo x) { x.setGeneAt(Random.Next(1, 20), Random.Next(0, x.returnTamanhoIndividuo() - 1)); return x; }
/* Metodo que executa o cruzamento dos individuos da minha população*/ public void StarCrossOver() { int TradePosition; int i = 0; Individuo Pai1; Individuo Pai2; Individuo filho = new Individuo(0); double S = 0.0; bool newPopulationFull = false; foreach (var item in population) { S += item.getFitness(); } while (newPopulationFull == false) { Pai1 = SelectRollet(S); Pai2 = SelectRollet(S); if (crossOverRate <= Random.NextDouble()) { TradePosition = Random.Next(0, Pai1.returnTamanhoIndividuo() - 1); filho = CopiarGenes(Pai1, Pai2, filho, TradePosition); if (mutationRate <= Random.NextDouble()) { filho = MutationGene(filho); } FitnesCalc(filho); if (i < population.Length) { filho.setID(i); NewPopulation[i] = new Individuo(filho); i++; } else newPopulationFull = true; } Pai1.setLivreCruzamento(); Pai2.setLivreCruzamento(); } }