Example #1
0
        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");
            }
        }
Example #2
0
    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);
    }