public Specimen[] Crossover(Specimen[] population) { var newPopulation = new List <Specimen>(); var stack = new Stack <Specimen>(population); while (stack.Count > 0) { var parent1 = stack.Pop(); var parent2 = stack.Pop(); var rand = new Random(); var randomNumber = rand.NextDouble(); if (randomNumber <= Config.CrossProb) { // var crossover = new CrossoverCX(parent1, parent2, _data); var crossover = new CrossoverPmx(parent1, parent2, _data); var(child1, child2) = crossover.GetChildren(); newPopulation.Add(child1); newPopulation.Add(child2); } else { newPopulation.Add(parent1); newPopulation.Add(parent2); } } return(newPopulation.ToArray()); }
private void btnExecutar_Click(object sender, EventArgs e) { buttonCriarPop.Enabled = false; int torneio = int.Parse(labelTamannhoTorneio.Text); evolucoes += int.Parse(labelEvolucao.Text); positivoInfinito = double.PositiveInfinity; Configuracao.numeroCompetidores = torneio; Configuracao.Tipo tipo = Configuracao.Tipo.FIXO; if (rbDHM_ILC.Checked) { tipo = Configuracao.Tipo.DHM_ILC; } else if (rbILM_DHC.Checked) { tipo = Configuracao.Tipo.ILM_DHC; } Configuracao.tipo = tipo; AlgoritmoGenetico algoritmoGenetico = new AlgoritmoGenetico(); algoritmoGenetico.aptidao = new AptidaoDistancia(mapa); algoritmoGenetico.selecao = new SelecaoTorneio(Configuracao.numeroCompetidores, Configuracao.aleatorio); algoritmoGenetico.mutacao = mutacao = new MutacaoDoisGenes(Configuracao.taxaMutacao, Configuracao.aleatorio); algoritmoGenetico.solucao = new SolucaoLimiteGeracao(evolucoes); algoritmoGenetico.crossover = crossover = new CrossoverPmx(Configuracao.aleatorio, Configuracao.taxaCrossover); algoritmoGenetico.substituicao = new SubstituicaoTotal(); algoritmoGenetico.observadores.Add(this); algoritmoGenetico.execute(populacao); g.Clear(Color.White); desenharLinhas(populacao, Color.Blue); desenharPontos(); botaoExportarMelhorIndiv.Enabled = true; }