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); }
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; } }
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); }