public Cromossomo cruza(Cromossomo parceiro) { Cromossomo filho = new Cromossomo { Genes = this.Genes.Substring(0, 10) + parceiro.Genes.Substring(10, 10) }; return(filho); }
public Cromossomo[] crossover() { Cromossomo[] novaPop = new Cromossomo[Populacao.Length]; Cromossomo parceiroA; Cromossomo parceiroB; double somaFit = 0; double bestFit = 0; double averageFit = 0; foreach (var cromo in Populacao) { somaFit += cromo.Fitness; if (cromo.Fitness >= bestFit) { bestFit = cromo.Fitness; } } averageFit = somaFit / Populacao.Length; AveragefitList.Add(averageFit); BestfitList.Add(bestFit); for (int i = 0; i < novaPop.Length; i += 2) { parceiroA = roleta(somaFit); parceiroB = roleta(somaFit); if (vaiCruzar) { novaPop[i] = parceiroA.cruza(parceiroB); novaPop[i + 1] = parceiroB.cruza(parceiroA); } else { novaPop[i] = parceiroA; novaPop[i + 1] = parceiroB; } } return(novaPop); }
public string printaDados() { int bestCount = 0; double somafit = 0; Cromossomo melhorCromo = Populacao[0]; foreach (var cromo in Populacao) { if (cromo.Fitness == 1) { bestCount++; } somafit += cromo.Fitness; melhorCromo = (cromo.Fitness > melhorCromo.Fitness) ? cromo : melhorCromo; } double[] par = melhorCromo.decodificaGenes(); string result = "Melhor cromossomo: " + melhorCromo.Fitness + "\nMelhor resposta x: " + par[0] + " y: " + par[1] + "\nMédia da população: " + somafit / Populacao.Length + "\nNumero de casos ótimos: " + bestCount; return(result); }
//CHECK public void criaPopInicial() { double somaFit = 0;//avaliar qual vai ser a logica pra isso, talvez não fique aqui double bestFit = 0; double averageFit = 0; for (int i = 0; i < Populacao.Length; i++) { Populacao[i] = new Cromossomo(); somaFit += Populacao[i].Fitness; if (Populacao[i].Fitness >= bestFit) { bestFit = Populacao[i].Fitness; } } averageFit = somaFit / Populacao.Length; AveragefitList.Add(averageFit); BestfitList.Add(bestFit); geracao++; }