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