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(); NewPopulation[i] = new Individuo(); FitnesCalc(population[i]); } }
public Individuo(Individuo x) { CadeiaAmino = new List<Aminoacido>(); foreach (var item in x.getlistaAmino()) { this.CadeiaAmino.Add(item); } fitness = x.fitness; this.diferencial = x.diferencial; Rank = x.Rank; }
public void FitnesCalc(Individuo x) { double PonderaFitnessAlvo = (100.0 / this.gabarito.Count) / 100; int PCorretas = GetposiçõesCorretas(x); double PorcentagemPosições = ((Convert.ToDouble(PCorretas) * 100) / x.returnTamanhoIndividuo())/100; double Diferencial = 1 - PorcentagemPosições; double resultado = 0.0; resultado = (PorcentagemPosições * PonderaFitnessAlvo)*PCorretas; //for (int i = 0; i < gabarito.Length; i++) //{ // if (i < x.returnTamanhoIndividuo()) // { // 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.setDiferencial(Diferencial); x.setFitness(resultado); }
public void AtualizaNovaGeração() { for (int i = 0; i < population.Length; i++) { population[i] = new Individuo(NewPopulation[i]); } }
public void InsereImigrantes() { for (int i = 0; i < population.Length; i++) { if (population[i].getDiferencial() > 0.60) { population[i] = new Individuo(); FitnesCalc(population[i]); } } }
public Individuo CopiarGenes(Individuo pai1, Individuo pai2, Individuo filho) { filho.getlistaAmino().Clear(); foreach (var item in pai1.getlistaAmino()) { filho.getlistaAmino().Add(item); } foreach (var item in pai2.getlistaAmino()) { filho.getlistaAmino().Add(item); } return filho; // CrossOver de um ponto //int x = 0; //while (x < pai1.returnTamanhoIndividuo()) //{ // if (x <= tradePosition) // { // filho.setGeneAt(pai1.getGeneAt(x), x); // } // else // { // filho.setGeneAt(pai2.getGeneAt(x), x); // } // x++; //} //CrossOver uniforme de varios pontos //for (int i = 0; i < pai1.returnTamanhoIndividuo(); i++) //{ // if (Random.NextDouble() >= 0.5) // { // filho.setGeneAt(pai1.getGeneAt(i), i); // } // else // { // filho.setGeneAt(pai2.getGeneAt(i), i); // } //} }
public Individuo MutationGene(Individuo x) { x.setGeneAt(Random.Next(1, 20), Random.Next(0, x.returnTamanhoIndividuo() - 1)); return x; }
public void StarCrossOver() { int i = 0; Individuo Pai1; Individuo Pai2; Individuo filho = new Individuo(); double S = 0.0; bool newPopulationFull = false; this.GerarRank(); foreach (var item in population) { S += item.getRank(); } while (i < 2) { NewPopulation[i] = new Individuo(population.OrderByDescending(x => x.getFitness()).ElementAt(i)); i++; } //for (int j = 0; j < 50; j++) //{ // NewPopulation[i] = new Individuo(); // FitnesCalc(NewPopulation[i]); // i++; //} while (newPopulationFull == false) { Pai1 = SelectIndividuo(S); Pai2 = SelectIndividuo(S); if (crossOverRate <= Random.NextDouble()) { filho = CopiarGenes(Pai1, Pai2, filho); if (Random.NextDouble() <= mutationRate) { filho = MutationGene(filho); } FitnesCalc(filho); if (i < population.Length) { NewPopulation[i] = new Individuo(filho); i++; } else newPopulationFull = true; } Pai1.setLivreCruzamento(); Pai2.setLivreCruzamento(); } }
public int GetposiçõesCorretas(Individuo x) { int indexTeste = 0; int MaxPosCorretas = 0; int ContagemAux = 0; while (indexTeste < x.returnTamanhoIndividuo()) { List<int> IndexOco = GetIndexOcorrencias(x.getGeneAt(indexTeste)); if (IndexOco.Count != 0) { foreach (var item in IndexOco) { if ((gabarito.Count- item ) > (x.returnTamanhoIndividuo() - indexTeste)) { for (int j = item, k = indexTeste; k < x.returnTamanhoIndividuo(); j++, k++) { if (gabarito.ElementAt(j).Equals(x.getGeneAt(k))) ContagemAux++; } } else { for (int j = item, k = indexTeste; j < gabarito.Count; j++, k++) { if (gabarito.ElementAt(j).Equals(x.getGeneAt(k))) ContagemAux++; } } if (ContagemAux > MaxPosCorretas) MaxPosCorretas = ContagemAux; ContagemAux = 0; } } indexTeste++; ContagemAux = 0; } return MaxPosCorretas; }
public Individuo MutationGene(Individuo x) { x.setGeneAt(Random.Next(1, 20), Random.Next(0, x.returnTamanhoIndividuo() - 1)); return(x); }