private static void checkParetoRankings(ParetoComparer <MockDualObjective> comparer, MockDualObjective rank_1_a, MockDualObjective rank_1_b, MockDualObjective rank_1_c, MockDualObjective rank_2_a, MockDualObjective rank_2_b, MockDualObjective rank_2_c, MockDualObjective rank_3_a, MockDualObjective rank_3_b) { Assert.AreEqual(-1, comparer.Compare(rank_1_a, rank_2_a)); Assert.AreEqual(+1, comparer.Compare(rank_2_a, rank_1_a)); Assert.AreEqual(-1, comparer.Compare(rank_1_a, rank_3_b)); Assert.AreEqual(0, comparer.Compare(rank_1_a, rank_1_a)); Assert.AreEqual(0, comparer.Compare(rank_1_a, rank_1_b)); Assert.AreEqual(0, comparer.Compare(rank_1_a, rank_1_c)); Assert.AreEqual(0, comparer.Compare(rank_1_b, rank_1_c)); MockDualObjective[] scores = new MockDualObjective[] { rank_2_c, rank_1_b, rank_3_b, rank_2_b, rank_1_a, rank_1_c, rank_3_a, rank_2_a }; ParetoRanking <MockDualObjective> paretoRanking = new ParetoRanking <MockDualObjective>(scores, comparer); MockDualObjective[] rank1 = paretoRanking.GetParetoRank(1); Assert.AreEqual(3, rank1.Length); Assert.IsTrue(rank1.Contains(rank_1_a)); Assert.IsTrue(rank1.Contains(rank_1_b)); Assert.IsTrue(rank1.Contains(rank_1_c)); MockDualObjective[] rank2 = paretoRanking.GetParetoRank(2); Assert.AreEqual(3, rank2.Length); Assert.IsTrue(rank2.Contains(rank_2_a)); Assert.IsTrue(rank2.Contains(rank_2_b)); Assert.IsTrue(rank2.Contains(rank_2_c)); MockDualObjective[] rank3 = paretoRanking.GetParetoRank(3); Assert.AreEqual(2, rank3.Length); Assert.IsTrue(rank3.Contains(rank_3_a)); Assert.IsTrue(rank3.Contains(rank_3_b)); }
private static void checkParetoRankings(ParetoComparer<MockDualObjective> comparer, MockDualObjective rank_1_a, MockDualObjective rank_1_b, MockDualObjective rank_1_c, MockDualObjective rank_2_a, MockDualObjective rank_2_b, MockDualObjective rank_2_c, MockDualObjective rank_3_a, MockDualObjective rank_3_b) { Assert.AreEqual(-1, comparer.Compare(rank_1_a, rank_2_a)); Assert.AreEqual(+1, comparer.Compare(rank_2_a, rank_1_a)); Assert.AreEqual(-1, comparer.Compare(rank_1_a, rank_3_b)); Assert.AreEqual(0, comparer.Compare(rank_1_a, rank_1_a)); Assert.AreEqual(0, comparer.Compare(rank_1_a, rank_1_b)); Assert.AreEqual(0, comparer.Compare(rank_1_a, rank_1_c)); Assert.AreEqual(0, comparer.Compare(rank_1_b, rank_1_c)); MockDualObjective[] scores = new MockDualObjective[] { rank_2_c, rank_1_b, rank_3_b, rank_2_b, rank_1_a, rank_1_c, rank_3_a, rank_2_a }; ParetoRanking<MockDualObjective> paretoRanking = new ParetoRanking<MockDualObjective>(scores, comparer); MockDualObjective[] rank1 = paretoRanking.GetParetoRank(1); Assert.AreEqual(3, rank1.Length); Assert.IsTrue(rank1.Contains(rank_1_a)); Assert.IsTrue(rank1.Contains(rank_1_b)); Assert.IsTrue(rank1.Contains(rank_1_c)); MockDualObjective[] rank2 = paretoRanking.GetParetoRank(2); Assert.AreEqual(3, rank2.Length); Assert.IsTrue(rank2.Contains(rank_2_a)); Assert.IsTrue(rank2.Contains(rank_2_b)); Assert.IsTrue(rank2.Contains(rank_2_c)); MockDualObjective[] rank3 = paretoRanking.GetParetoRank(3); Assert.AreEqual(2, rank3.Length); Assert.IsTrue(rank3.Contains(rank_3_a)); Assert.IsTrue(rank3.Contains(rank_3_b)); }
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); }
private IObjectiveScores[] getParetoFront(IObjectiveScores[] scores) { var paretoRanking = new ParetoRanking <IObjectiveScores>(scores, new ParetoComparer <IObjectiveScores>()); return(paretoRanking.GetParetoRank(1)); }