Пример #1
0
        /// <summary>
        /// Factory to reproduce generation
        /// </summary>
        /// <param name="parameters">Generation parameters</param>
        /// <param name="evaluation">Generation evaluation. Create via <see cref="Evaluate"/></param>
        /// <param name="generationNumber"></param>
        /// <returns></returns>
        public static Generation Reproduce(GenerationParameters parameters, GenerationEvaluation evaluation, int generationNumber)
        {
            var gen = new Generation(generationNumber, parameters.instancesCount);

            for (var index = 0; index < gen.Instances.Length; index++)
            {
                var instance = gen.Instances[index];

                if (index < parameters.preservedCount)
                {
                    instance.NN.genes = evaluation.pool.Best().Genes;
                    instance.NN.UpdateFromGenes();
                }
                else if (index < parameters.preservedCount + parameters.newRandomCount)
                {
                    instance.NN.SetRandomValues(-1, 1);
                }
                else
                {
                    parameters.crossoverFunction.Crossover(instance.NN, evaluation, parameters.selectionFunction, parameters.fitnessPower);
                    parameters.mutationFunction.Mutate(instance.NN, parameters.mutationProbability, parameters.mutationFactor);

                    instance.NN.UpdateFromGenes();
                }

                instance.dieOnCollision  = parameters.dieOneCollision;
                instance.fitnessFunction = parameters.fitnessFunction;
            }

            return(gen);
        }
Пример #2
0
        /// <summary>
        /// Factory for creating random generation
        /// </summary>
        public static Generation Random(GenerationParameters parameters)
        {
            var gen = new Generation(0, parameters.instancesCount);

            foreach (var instance in gen.Instances)
            {
                instance.NN.SetRandomValues(-1, 1);
                instance.dieOnCollision = parameters.dieOneCollision;
            }

            return(gen);
        }