Example #1
0
        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;
            }
        }
Example #2
0
        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;
            }
        }
Example #3
0
        /// <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);
        }