public MultiObjectiveListEvaluator(IGenomeDecoder <TGenome, TPhenome> genomeDecoder, IMultiObjectiveEvaluator <TPhenome> phenomeEvaluator, INoveltyScorer <TGenome> noveltyScorer, IGeneticDiversityScorer <TGenome> geneticDiversityScorer, IMultiObjectiveScorer multiObjectiveScorer, bool enableMultiThreading, ParallelOptions options) { _genomeDecoder = genomeDecoder; _phenomeEvaluator = phenomeEvaluator; _noveltyScorer = noveltyScorer; _geneticDiversityScorer = geneticDiversityScorer; _multiObjectiveScorer = multiObjectiveScorer; _parallelOptions = options; _generation = 0; // Determine the appropriate evaluation method. if (enableMultiThreading) { _evalMethod = EvaluateParallel; } else { _evalMethod = EvaluateSerial; } }
public MultiObjectiveListEvaluator(IGenomeDecoder <TGenome, TPhenome> genomeDecoder, IMultiObjectiveEvaluator <TPhenome> phenomeEvaluator, INoveltyScorer <TGenome> noveltyScorer, IList <IObjectiveScorer <TGenome> > objectiveScorers, IMultiObjectiveScorer multiObjectiveScorer, bool enableMultiThreading, ParallelOptions options) { _genomeDecoder = genomeDecoder; _phenomeEvaluator = phenomeEvaluator; _noveltyScorer = noveltyScorer; _objectiveScorers = objectiveScorers; for (int i = 0; i < _objectiveScorers.Count; i++) { _objectiveScorers[i].Objective = i + 1; } _multiObjectiveScorer = multiObjectiveScorer; _parallelOptions = options; _generation = 0; // Determine the appropriate evaluation method. if (enableMultiThreading) { _evalMethod = EvaluateParallel; } else { _evalMethod = EvaluateSerial; } }
/// <summary> /// Create and return a NeatEvolutionAlgorithm object ready for running the NEAT algorithm/search. Various sub-parts /// of the algorithm are also constructed and connected up. /// This overload accepts a pre-built genome population and their associated/parent genome factory. /// </summary> public NeatEvolutionAlgorithm <NeatGenome> CreateEvolutionAlgorithm(IGenomeFactory <NeatGenome> genomeFactory, List <NeatGenome> genomeList) { // Create distance metric. Mismatched genes have a fixed distance of 10; for matched genes the distance is their weigth difference. IDistanceMetric distanceMetric = new ManhattanDistanceMetric(1.0, 0.0, 10.0); ISpeciationStrategy <NeatGenome> speciationStrategy = new ParallelKMeansClusteringStrategy <NeatGenome>(distanceMetric, _parallelOptions); // Create the evolution algorithm. NeatEvolutionAlgorithm <NeatGenome> ea = new NeatEvolutionAlgorithm <NeatGenome>(_eaParams, speciationStrategy, _complexityRegulationStrategy); // Create genome decoder. IGenomeDecoder <NeatGenome, IBlackBox> genomeDecoder = CreateGenomeDecoder(); bool noveltySearchEnabled = _noveltySearchParams?.Enabled ?? false; bool multiObjectiveEnabled = _multiObjectiveParams?.Enabled ?? false; INoveltyScorer <NeatGenome> noveltyScorer = null; IMultiObjectiveScorer multiObjectiveScorer = null; IList <IObjectiveScorer <NeatGenome> > objectiveScorers = new List <IObjectiveScorer <NeatGenome> >(); if (noveltySearchEnabled) { noveltyScorer = new TuringNoveltyScorer <NeatGenome>(_noveltySearchParams); } if (multiObjectiveEnabled) { multiObjectiveScorer = new NSGAII(_multiObjectiveParams); if (NoveltySearchEnabled) { objectiveScorers.Add(noveltyScorer); } if (_multiObjectiveParams.GeneticDiversityEnabled) { objectiveScorers.Add(new GeneticDiversityKnn <NeatGenome>(_neatGenomeParams.ConnectionWeightRange)); } if (_multiObjectiveParams.TapeSizeCostEnabled) { objectiveScorers.Add(new TapeSizeCostScorer <NeatGenome>()); } if (_multiObjectiveParams.ConnectionCostEnabled) { objectiveScorers.Add(new ConnectionCostScorer <NeatGenome>()); } } _listEvaluator = new MultiObjectiveListEvaluator <NeatGenome, IBlackBox>( genomeDecoder, _evaluator, noveltyScorer, objectiveScorers, multiObjectiveScorer, _multiThreading, _parallelOptions); _listEvaluator.MultiObjectiveParams = _multiObjectiveParams; _listEvaluator.ReportInterval = _logInterval; NoveltySearchEnabled = noveltySearchEnabled; MultiObjectiveEnabled = multiObjectiveEnabled; // Initialize the evolution algorithm. ea.Initialize(_listEvaluator, genomeFactory, genomeList); // Finished. Return the evolution algorithm return(ea); }