Exemplo n.º 1
0
        private static IMigrationStrategy CreateMigrationStrategy(IslandEngine engine, IRandom random, IFitnessComparer fitnessComparer, ParameterSet parameters, PeaSettings settings)
        {
            //TODO: MigrationFactory!
            var selection   = new TournamentSelection(random, fitnessComparer, parameters);
            var replacement = new ReplaceWorstEntitiesOfPopulation(random, fitnessComparer, parameters);
            var strategy    = new Migration.Implementation.MigrationStrategy(random, selection, replacement, engine.Parameters);

            strategy.Parameters.SetValue(Migration.ParameterNames.MigrationReceptionRate, 0.01);
            return(strategy);
        }
Exemplo n.º 2
0
 private void AddCallbackEvents(IslandEngine engine, List <NewEntitiesMergedToBestDelegate> delegates)
 {
     if (delegates.Count > 0)
     {
         for (int d = 0; d < delegates.Count; d++)
         {
             NewEntitiesMergedToBest += delegates[d];
         }
         engine.NewEntityMergedToBest = NewEntitiesMergetToBestCallback;
     }
 }
Exemplo n.º 3
0
        public static IslandEngine Create(MultiKey islandKey, PeaSettings settings, int seed)
        {
            if (seed == 0)
            {
                seed = islandKey.GetHashCode() + Environment.TickCount;
            }

            var random       = (IRandom)Activator.CreateInstance(settings.Random, seed);
            var parameterSet = CreateParameters(settings);

            var fitness         = (IFitnessFactory)Activator.CreateInstance(settings.Fitness);
            var fitnessComparer = fitness.GetFitnessComparer();

            var engine = new IslandEngine()
            {
                Random     = random,
                Settings   = settings,
                Parameters = parameterSet
            };

            var algorithm         = CreateAlgorithm(engine, settings);
            var conflictDetectors = CreateConflictDetectors(settings.SubProblemList);

            var chromosomeFactories = CreateChromosomeFactories(engine, settings, conflictDetectors, random);
            var defaultCreator      = new EntityCreator(settings.EntityType, chromosomeFactories, random);

            engine.EntityCreators = CreateEntityCreators(settings.SubProblemList, defaultCreator, random);

            IMigrationStrategy migrationStrategy = CreateMigrationStrategy(engine, random, fitnessComparer, parameterSet, settings);

            engine.Algorithm         = algorithm.GetAlgorithm(engine);
            engine.FitnessComparer   = fitnessComparer;
            engine.ConflictDetectors = conflictDetectors;
            engine.Selections        = CreateSelections(algorithm, settings, parameterSet, random, fitnessComparer);
            engine.Replacements      = CreateReinsertions(algorithm, settings, parameterSet, random, fitnessComparer);
            engine.MigrationStrategy = migrationStrategy;

            engine.Reduction = new Population.Reduction.CleanOutTournamentLosers(random, parameterSet);
            //engine.Reduction = new Population.Reduction.DoNothingReduction();

            engine.Parameters.SetValueRange(algorithm.GetParameters());

            engine.EntityMutation  = new EntityMutation(chromosomeFactories, random);
            engine.EntityCrossover = new EntityCrossover(chromosomeFactories, random);
            engine.StopCriteria    = settings.StopCriteria;

            return(engine);
        }