Changeset 17309 for branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/MultiObjective/DominationCalculator.cs
- Timestamp:
- 10/03/19 17:43:11 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/MultiObjective/DominationCalculator.cs
r17230 r17309 47 47 /// <param name="dominateOnEqualQualities">Whether solutions of exactly equal quality should dominate one another.</param> 48 48 /// <returns>The pareto front containing the best solutions and their associated quality resp. fitness.</returns> 49 public static List<Tuple<T, double[]>> CalculateBestParetoFront<T>(T[] solutions, double[][] qualities, bool[]maximization, bool dominateOnEqualQualities = true) {49 public static List<Tuple<T, double[]>> CalculateBestParetoFront<T>(T[] solutions, double[][] qualities, IReadOnlyList<bool> maximization, bool dominateOnEqualQualities = true) { 50 50 var populationSize = solutions.Length; 51 51 Dictionary<T, List<int>> dominatedIndividuals; … … 72 72 /// <param name="dominateOnEqualQualities">Whether solutions of exactly equal quality should dominate one another.</param> 73 73 /// <returns>A sorted list of the pareto fronts from best to worst.</returns> 74 public static List<List<Tuple<T, double[]>>> CalculateAllParetoFronts<T>(T[] solutions, double[][] qualities, bool[]maximization, out int[] rank, bool dominateOnEqualQualities = true) {74 public static List<List<Tuple<T, double[]>>> CalculateAllParetoFronts<T>(T[] solutions, double[][] qualities, IReadOnlyList<bool> maximization, out int[] rank, bool dominateOnEqualQualities = true) { 75 75 var populationSize = solutions.Length; 76 76 … … 101 101 } 102 102 103 private static List<Tuple<T, double[]>> CalculateBestFront<T>(T[] solutions, double[][] qualities, bool[]maximization, bool dominateOnEqualQualities, int populationSize, out Dictionary<T, List<int>> dominatedIndividuals, out int[] dominationCounter, out int[] rank) {103 private static List<Tuple<T, double[]>> CalculateBestFront<T>(T[] solutions, double[][] qualities, IReadOnlyList<bool> maximization, bool dominateOnEqualQualities, int populationSize, out Dictionary<T, List<int>> dominatedIndividuals, out int[] dominationCounter, out int[] rank) { 104 104 var front = new List<Tuple<T, double[]>>(); 105 105 dominatedIndividuals = new Dictionary<T, List<int>>(); … … 155 155 /// <param name="dominateOnEqualQualities">Whether solutions of exactly equal quality should dominate one another.</param> 156 156 /// <returns>A sorted list of the pareto fronts where each front contains the indices of the <paramref name="solutions"/> and <paramref name="qualities"/>.</returns> 157 public static List<List<int>> CalculateAllParetoFrontsIndices<T>(T[] solutions, double[][] qualities, bool[]maximization, bool dominateOnEqualQualities = true) {157 public static List<List<int>> CalculateAllParetoFrontsIndices<T>(T[] solutions, double[][] qualities, IReadOnlyList<bool> maximization, bool dominateOnEqualQualities = true) { 158 158 return CalculateAllParetoFrontsIndices(solutions, qualities, maximization, out var rank, dominateOnEqualQualities); 159 159 } … … 178 178 /// <param name="dominateOnEqualQualities">Whether solutions of exactly equal quality should dominate one another.</param> 179 179 /// <returns>A sorted list of the pareto fronts where each front contains the indices of the <paramref name="solutions"/> and <paramref name="qualities"/>.</returns> 180 public static List<List<int>> CalculateAllParetoFrontsIndices<T>(T[] solutions, double[][] qualities, bool[]maximization, out int[] rank, bool dominateOnEqualQualities = true) {180 public static List<List<int>> CalculateAllParetoFrontsIndices<T>(T[] solutions, double[][] qualities, IReadOnlyList<bool> maximization, out int[] rank, bool dominateOnEqualQualities = true) { 181 181 var populationSize = solutions.Length; 182 182 … … 207 207 } 208 208 209 private static List<int> CalculateBestFrontIndices<T>(T[] solutions, double[][] qualities, bool[]maximization, bool dominateOnEqualQualities, int populationSize, List<int>[] dominatedIndividuals, int[] dominationCounter, int[] rank) {209 private static List<int> CalculateBestFrontIndices<T>(T[] solutions, double[][] qualities, IReadOnlyList<bool> maximization, bool dominateOnEqualQualities, int populationSize, List<int>[] dominatedIndividuals, int[] dominationCounter, int[] rank) { 210 210 var front = new List<int>(); 211 211 for (var pI = 0; pI < populationSize - 1; pI++) { … … 244 244 /// <param name="dominateOnEqualQualities">Whether the result should be Dominates in case both fitness vectors are exactly equal</param> 245 245 /// <returns>Dominates if left dominates right, IsDominated if right dominates left and IsNonDominated otherwise.</returns> 246 public static DominationResult Dominates(double[] left, double[] right, bool[]maximizations, bool dominateOnEqualQualities) {246 public static DominationResult Dominates(double[] left, double[] right, IReadOnlyList<bool> maximizations, bool dominateOnEqualQualities) { 247 247 //mkommend Caution: do not use LINQ.SequenceEqual for comparing the two quality arrays (left and right) due to performance reasons 248 248 if (dominateOnEqualQualities) {
Note: See TracChangeset
for help on using the changeset viewer.