- Timestamp:
- 08/29/19 13:53:26 (5 years ago)
- Location:
- branches/2521_ProblemRefactoring/HeuristicLab.Optimization.Operators/3.3/MultiObjective
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2521_ProblemRefactoring/HeuristicLab.Optimization.Operators/3.3/MultiObjective/CrowdingDistanceAssignment.cs
r16723 r17225 34 34 [StorableType("F7DF8B74-F1E6-45D6-A1A8-5D381F20B382")] 35 35 public class CrowdingDistanceAssignment : SingleSuccessorOperator, IMultiObjectiveOperator { 36 37 36 public ScopeTreeLookupParameter<DoubleArray> QualitiesParameter { 38 37 get { return (ScopeTreeLookupParameter<DoubleArray>)Parameters["Qualities"]; } … … 66 65 67 66 public static void Apply(DoubleArray[] qualities, DoubleValue[] distances) { 68 int populationSize = qualities.Length; 69 int objectiveCount = qualities[0].Length; 70 for (int m = 0; m < objectiveCount; m++) { 71 Array.Sort<DoubleArray, DoubleValue>(qualities, distances, new QualitiesComparer(m)); 72 73 distances[0].Value = double.MaxValue; 74 distances[populationSize - 1].Value = double.MaxValue; 75 76 double minQuality = qualities[0][m]; 77 double maxQuality = qualities[populationSize - 1][m]; 78 for (int i = 1; i < populationSize - 1; i++) { 79 distances[i].Value += (qualities[i + 1][m] - qualities[i - 1][m]) / (maxQuality - minQuality); 80 } 81 } 67 var dist = CrowdingCalculator.CalculateCrowdingDistances(qualities.Select(x => x.ToArray()).ToArray()); 68 for (var i = 0; i < distances.Length; i++) distances[i].Value = dist[i]; 82 69 } 83 70 84 71 public override IOperation Apply() { 85 DoubleArray[] qualities = QualitiesParameter.ActualValue.ToArray(); 86 int populationSize = qualities.Length; 87 DoubleValue[] distances = new DoubleValue[populationSize]; 88 for (int i = 0; i < populationSize; i++) 89 distances[i] = new DoubleValue(0); 90 91 CrowdingDistanceParameter.ActualValue = new ItemArray<DoubleValue>(distances); 92 93 Apply(qualities, distances); 94 72 var dist = CrowdingCalculator.CalculateCrowdingDistances(QualitiesParameter.ActualValue.Select(x => x.ToArray()).ToArray()); 73 CrowdingDistanceParameter.ActualValue = new ItemArray<DoubleValue>(dist.Select(d => new DoubleValue(d))); 95 74 return base.Apply(); 96 }97 98 private void Initialize(ItemArray<DoubleValue> distances) {99 for (int i = 0; i < distances.Length; i++) {100 if (distances[i] == null) distances[i] = new DoubleValue(0);101 else distances[i].Value = 0;102 }103 }104 105 [StorableType("30fd1927-b268-4ce7-8960-b04bfa83f1e6")]106 private class QualitiesComparer : IComparer<DoubleArray> {107 private int index;108 109 public QualitiesComparer(int index) {110 this.index = index;111 }112 113 #region IComparer<DoubleArray> Members114 115 public int Compare(DoubleArray x, DoubleArray y) {116 if (x[index] < y[index]) return -1;117 else if (x[index] > y[index]) return +1;118 else return 0;119 }120 121 #endregion122 75 } 123 76 -
branches/2521_ProblemRefactoring/HeuristicLab.Optimization.Operators/3.3/MultiObjective/FastNonDominatedSort.cs
r16723 r17225 74 74 75 75 int[] rank; 76 var fronts = DominationCalculator <IScope>.CalculateAllParetoFronts(scope.SubScopes.ToArray(), qualities, maximization, out rank, dominateOnEqualQualities);76 var fronts = DominationCalculator.CalculateAllParetoFronts(scope.SubScopes.ToArray(), qualities, maximization, out rank, dominateOnEqualQualities); 77 77 78 78 RankParameter.ActualValue = new ItemArray<IntValue>(rank.Select(x => new IntValue(x)));
Note: See TracChangeset
for help on using the changeset viewer.