Beispiel #1
0
        public IOptimizationResults <T> Evolve()
        {
            IObjectiveScores[] scores = evaluateScores(initialisePopulation());
            var tags = LoggerMhHelper.CreateTag(LoggerMhHelper.MkTuple("Category", "URS"));

            loggerWrite(scores, tags);

            var paretoRanking = new ParetoRanking <IObjectiveScores>(scores, new ParetoComparer <IObjectiveScores>());

            IObjectiveScores[] paretoScores = paretoRanking.GetDominatedByParetoRank(1);
            return(new BasicOptimizationResults <T>(paretoScores));
        }
        public FitnessAssignedScores <double>[] AssignFitness(IObjectiveScores[] scores)
        {
            var paretoRanking = new ParetoRanking <IObjectiveScores>(scores);

            IObjectiveScores[] nonDominated          = paretoRanking.GetParetoRank(1);
            IObjectiveScores[] dominated             = paretoRanking.GetDominatedByParetoRank(1);
            double[]           fitnessesNonDominated = new double[nonDominated.Length];
            double[]           fitnessesDominated    = new double[dominated.Length];
            for (int j = 0; j < nonDominated.Length; j++)
            {
                fitnessesNonDominated[j] = (double)paretoRanking.GetNumDominated(nonDominated[j], dominated) / scores.Length;
            }
            for (int j = 0; j < dominated.Length; j++)
            {
                double fitness = 1.0;
                for (int k = 0; k < nonDominated.Length; k++)
                {
                    if (paretoRanking.IsDominated(dominated[j], nonDominated[k]))
                    {
                        fitness += fitnessesNonDominated[k];
                    }
                }
                fitnessesDominated[j] = fitness;
            }
            List <double> fitnesses = new List <double>( );

            fitnesses.AddRange(fitnessesNonDominated);
            fitnesses.AddRange(fitnessesDominated);
            List <IObjectiveScores> orderedScores = new List <IObjectiveScores>( );

            orderedScores.AddRange(nonDominated);
            orderedScores.AddRange(dominated);
            FitnessAssignedScores <double>[] result = new FitnessAssignedScores <double> [fitnesses.Count];
            for (int i = 0; i < fitnesses.Count; i++)
            {
                result[i] = new FitnessAssignedScores <double>(orderedScores[i], fitnesses[i]);
            }
            return(result);
        }
            public Tuple <IBase, IObjectiveScores <T>, IObjectiveScores <T>[]> Evolve()
            {
                moveFailedOnce   = createNegBoolArray(b.NumDimensions);
                moveSuccededOnce = createNegBoolArray(b.NumDimensions);
                List <IObjectiveScores <T> > scores = new List <IObjectiveScores <T> >();

                while (stageIsComplete( ) == false)
                {
                    var triedPoints = makeAMove(b, currentPoint);
                    currentPoint = triedPoints.Last();
                    scores.AddRange(triedPoints);
                    LoggerMhHelper.Write(new IObjectiveScores[] { currentPoint },
                                         createTag(),
                                         Logger);
                }
                endPoint = currentPoint;
                b        = createNewBase(b, startingPoint, endPoint);

                var paretoRanking = new ParetoRanking <IObjectiveScores <T> >(scores, new ParetoComparer <IObjectiveScores <T> >());

                IObjectiveScores <T>[] paretoScores = paretoRanking.GetDominatedByParetoRank(1);

                return(Tuple.Create(b, currentPoint, paretoScores));
            }