- Timestamp:
- 07/12/20 11:16:10 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2825-NSGA3/HeuristicLab.Algorithms.NSGA3/3.3/ReferencePoint.cs
r17661 r17663 40 40 41 41 /// <summary> 42 /// Returns the number of reference points that would be created when using <see 43 /// cref="GenerateReferencePoints(IRandom, int)" />. 44 /// </summary> 45 /// <param name="nDim"></param> 46 /// <returns></returns> 47 internal static int GetNumberOfGeneratedReferencePoints(int nDim) 48 { 49 int outerDiv; 50 int innerDiv; 51 switch (nDim) 52 { 53 case 3: 54 outerDiv = 12; 55 innerDiv = 0; 56 break; 57 58 case 5: 59 outerDiv = 6; 60 innerDiv = 0; 61 break; 62 63 case 8: 64 outerDiv = 3; 65 innerDiv = 2; 66 break; 67 68 case 10: 69 outerDiv = 3; 70 innerDiv = 2; 71 break; 72 73 case 15: 74 outerDiv = 2; 75 innerDiv = 1; 76 break; 77 78 default: 79 return -1; 80 } 81 82 return GetNumberOfGeneratedReferencePoints(nDim, outerDiv, innerDiv); 83 } 84 85 internal static int GetNumberOfGeneratedReferencePoints(int nDim, int outerDiv, int innerDiv = 0) 86 { 87 return Utility.NCR(nDim + outerDiv - 1, outerDiv) + (innerDiv == 0 ? 0 : Utility.NCR(nDim + innerDiv - 1, innerDiv)); 88 } 89 90 /// <summary> 42 91 /// Generate reference points that are evenly distributed over a hyperplane with dimensions 43 92 /// <paramref name="nDim" /> - 1 with the sum of the values in all dimensions being equal to … … 45 94 /// -> The number of inner divisions and outer divisions are determined based on the 46 95 /// values provided in the NSGA-III paper, chapter V: Results. If different dimensions are 47 /// given, null is returned.96 /// given, a NotSupportedException is thrown. 48 97 /// </summary> 49 98 /// <param name="random"> … … 78 127 79 128 default: 80 referencePoints = null; 81 break; 129 throw new NotSupportedException("Only the reference points for 3, 5, 8, 10 or 15 dimensions can be created."); 82 130 } 83 131 84 132 return referencePoints; 85 }86 87 internal static List<ReferencePoint> GenerateReferencePoints(IRandom random, int nDim, int outerDiv)88 {89 return GenerateReferencePoints(random, nDim, outerDiv, 0);90 133 } 91 134 … … 108 151 /// not have inner reference points 109 152 /// </returns> 110 internal static List<ReferencePoint> GenerateReferencePoints(IRandom random, int nDim, int outerDiv, int innerDiv )153 internal static List<ReferencePoint> GenerateReferencePoints(IRandom random, int nDim, int outerDiv, int innerDiv = 0) 111 154 { 112 155 if (nDim <= 0) throw new ArgumentException("nDim must be greater than 0");
Note: See TracChangeset
for help on using the changeset viewer.