コード例 #1
0
        private static IBitMutation <IBitIndividual> CreateAlgo(Func <IBitMutation <IBitIndividual> > mutation,
                                                                int geneCount)
        {
            var m    = mutation.Invoke();
            var algo = new BitEvolutionaryAlgorithm <IBitIndividual>()
                       .UsingBasicStatistics()
                       .UsingRandomPopulation()
                       .UsingParameters(new Parameters
            {
                Mu           = 1,
                Lambda       = 2,
                GeneCount    = geneCount,
                MutationRate = 2
            }).UsingEvaluation(new OneMaxFitness <IBitIndividual>())
                       .UsingHeuristic(
                e => e
                .CloneGenesFrom(new FirstParentSelector <IBitIndividual>())
                .ThenApplyMutation(m),
                new BitElitismGenerationFilter <IBitIndividual>(true));

            algo.Initialize();
            return(m);
        }
コード例 #2
0
        public void Func()
        {
            const int    geneCount        = 500;
            const int    mutationRate     = 2;
            const int    repairRate       = 2;
            const int    learningRate     = 2;
            const int    observationPhase = 10;
            const double beta             = 1.5;

            var endogenous = new BitEvolutionaryAlgorithm <IBitIndividual>()
                             .UsingParameters(new Parameters
            {
                GeneCount = geneCount,
                // Self adapting
                MutationRate = mutationRate,
                // Constant, based on gene count
                Lambda = (int)(5 * Math.Log(geneCount)),
                // Always 1
                Mu = 1,
            })
                             .UsingBasicStatistics()
                             .UsingRandomPopulation(mutationRate)
                             .UsingHeuristic(SingleEndogenous(learningRate))
                             .UsingEvaluation(new OneMaxFitness <IBitIndividual>());

            var stagnation = new BitEvolutionaryAlgorithm <IBitIndividual>()
                             .UsingParameters(new Parameters
            {
                GeneCount = geneCount,
                // Self adapting
                MutationRate = mutationRate,
                // Constant, based on gene count
                Lambda = (int)(3 * Math.Log(geneCount)),
                // Always 1
                Mu = 1,
            })
                             .UsingStagnationStatistics()
                             .UsingRandomPopulation(learningRate)
                             .UsingHeuristic(StagnationDetection(learningRate, mutationRate, 1))
                             .UsingEvaluation(new OneMaxFitness <IBitIndividual>());

            var asymmetric = new BitEvolutionaryAlgorithm <IBitIndividual>()
                             .UsingParameters(new Parameters
            {
                GeneCount = geneCount,
                // Self adapting, based on learning rate
                MutationRate = 3,
                // Always 1
                Lambda = 1,
                // Always 1
                Mu = 1,
            })
                             .UsingRandomPopulation(mutationRate)
                             .UsingStatistics(new AsymmetricBasicEvolutionaryStatistics <IBitIndividual>())
                             .UsingHeuristic(Asymmetric(0.05, observationPhase))
                             .UsingEvaluation(new OneMaxFitness <IBitIndividual>());

            var oneLambdaLambda = new BitEvolutionaryAlgorithm <IBitIndividual>()
                                  .UsingParameters(new Parameters
            {
                GeneCount = geneCount,
                // Constant
                MutationRate = mutationRate,
                // Self-adapting, initial 1
                Lambda = 1,
                // Always 1
                Mu = 1,
            })
                                  .UsingStatistics(new LambdaBasicStatistics <IBitIndividual>())
                                  .UsingRandomPopulation(mutationRate)
                                  .UsingHeuristic(Repair(learningRate, repairRate))
                                  .UsingEvaluation(new OneMaxFitness <IBitIndividual>());

            var heavyTail = new BitEvolutionaryAlgorithm <IBitIndividual>()
                            .UsingParameters(new Parameters
            {
                GeneCount = geneCount,
                // Self adapting
                MutationRate = mutationRate,
                // Constant
                Lambda = (int)(3 * Math.Log(geneCount)),
                // Always 1
                Mu = 1,
            })
                            .UsingBasicStatistics()
                            .UsingRandomPopulation(mutationRate)
                            .UsingHeuristic(HeavyTail(learningRate, beta))
                            .UsingEvaluation(new OneMaxFitness <IBitIndividual>());

            var lambdaEndogenous = new BitEvolutionaryAlgorithm <IBitIndividual>()
                                   .UsingParameters(new Parameters
            {
                GeneCount = geneCount,
                // Self adapting
                MutationRate = mutationRate,
                // Constant, based on gene count
                Lambda = (int)(3 * Math.Log(geneCount)),
                // Constant, based on gene count
                Mu = (int)(3 * Math.Log(geneCount)),
            })
                                   .UsingStatistics(new EndogenousBasicEvolutionaryStatistics())
                                   .UsingRandomPopulation(mutationRate)
                                   .UsingHeuristic(MultiEndogenous(learningRate))
                                   .UsingEvaluation(new OneMaxFitness <IBitIndividual>());
        }