private void repartirOrdenes() { try { GeneticAlgorithm a = new GeneticAlgorithm(agents, requestedServices); agente.hablar("Espera mientras resuelvo el problema"); a.CreateInitialPopulation(); a.CalculateFitnessGenes(); for (int i = 0; i < a.GenerationsNumber; i++) { a.CreateNextGeneration(); a.CalculateFitnessGenes(); } Console.WriteLine(a.BestGenByGeneration()); formResultado = new Form2(); formResultado.Show(); formResultado.cargarGen(a); agente.hablar("Así se debe repartir las órdenes"); } catch (Exception ex) { agente.hablar("Debe cargar los agentes y órdenes primero"); } }
public AICharacter[] NextGen(AICharacter[] population) { #region END GEN int name = 0; var maxFitness = 0; // GET MAX SCORE for (int i = 0; i < population.Length; i++) { var fitness = (double)(population[i].GetScore() + 1); if (fitness > maxFitness) { name = i; maxFitness = (int)fitness; } } // CALCULATE FITNESS for (int i = 0; i < population.Length; i++) { var skipperScore = (double)(population[i].GetScore() + 1); population[i].brain.Fitness = skipperScore / maxFitness; } // SAVE BEST GENOME if (maxFitness > prevMaxFitness) { SaveGenome(maxFitness, population[name].brain.genome); prevMaxFitness = maxFitness; } #endregion // NEW GEN #region NEW GEN brainArr.Clear(); // RETRIEVE BRAINS! for (int i = 0; i < population.Length; i++) { brainArr.Add(population[i].brain); } // GENERATE NEXT GEN GENES! var nextGenBrainArr = geneticAlgorithm.CreateNextGeneration(brainArr); // SET CURRENT GENES for (int i = 0; i < nextGenBrainArr.Count; i++) { population[i].SetGenes(nextGenBrainArr[i].Genes()); } #endregion return(population); }