Changeset 13451
- Timestamp:
- 12/11/15 15:19:24 (9 years ago)
- Location:
- branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3
- Files:
-
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/MultiObjectiveTestFunctionProblem.cs
r13448 r13451 148 148 || ProblemSize > TestFunction.MaximumProblemSize) 149 149 ProblemSize = Math.Min(TestFunction.MaximumProblemSize, Math.Max(TestFunction.MinimumProblemSize, ProblemSize)); 150 //TODO problemsize dominates solutionSize 151 SolutionSizeOnValueChanged(sender, eventArgs); 150 if (SolutionSize < TestFunction.MinimumSolutionSize 151 || SolutionSize > TestFunction.MaximumSolutionSize) 152 SolutionSize = Math.Min(TestFunction.MaximumSolutionSize, Math.Max(TestFunction.MinimumSolutionSize, SolutionSize)); 153 TestFunction.ActualSolutionSize = SolutionSize; 152 154 } 153 155 … … 157 159 SolutionSize = Math.Min(TestFunction.MaximumSolutionSize, Math.Max(TestFunction.MinimumSolutionSize, SolutionSize)); 158 160 TestFunction.ActualSolutionSize = SolutionSize; 159 OnReset(); 161 if (ProblemSize < TestFunction.MinimumProblemSize 162 || ProblemSize > TestFunction.MaximumProblemSize) 163 ProblemSize = Math.Min(TestFunction.MaximumProblemSize, Math.Max(TestFunction.MinimumProblemSize, ProblemSize)); 160 164 } 161 165 … … 174 178 } 175 179 176 180 177 181 #endregion 178 182 } 179 183 } 180 184 181 -
branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/DTLZ1.cs
r13448 r13451 36 36 public override bool[] Maximization { 37 37 get { 38 bool[] res = new bool[actualSolutionSize]; 39 for(int i =0; i < res.Length; i++) res[i] = false; //TODO: diligent initialzation 40 return res; 38 return new bool[actualSolutionSize]; 41 39 } 42 40 } … … 57 55 public override int MinimumProblemSize { 58 56 get { 59 return Math.Max(2, ActualSolutionSize +1);57 return Math.Max(2, ActualSolutionSize); 60 58 } 61 59 } … … 84 82 85 83 private double[] Evaluate(RealVector r, int objectives) { 84 if (r.Length < objectives) { 85 throw new Exception("The dimensionality of the problem(ProblemSize) must be larger or equal than the dimensionality of the solution(SolutionSize) "); 86 } 87 86 88 double[] res = new double[objectives]; 87 89 … … 98 100 //calculating f0...fM-1 99 101 for (int i = 0; i < objectives; i++) { 100 double f = 0.5 * i == 0 ? 1 : (1 - r[objectives - i - 1]) * (1 + g);102 double f = 0.5 * (i == 0 ? 1 : (1 - r[objectives - i - 1])) * (1 + g); 101 103 for (int j = 0; j < objectives - i - 1; j++) { 102 104 f *= r[j]; -
branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/DTLZ2.cs
r13448 r13451 36 36 public override bool[] Maximization { 37 37 get { 38 bool[] res = new bool[actualSolutionSize]; 39 for(int i =0; i < res.Length; i++) res[i] = false; //TODO: diligent initialzation 40 return res; 38 return new bool[actualSolutionSize]; 41 39 } 42 40 } … … 48 46 } 49 47 50 public override int MaximumSolutionSize { //TODO ask Michael48 public override int MaximumSolutionSize { 51 49 get { 50 52 51 return int.MaxValue; 53 52 } … … 56 55 public override int MinimumProblemSize { 57 56 get { 58 return Math.Max(2, actualSolutionSize);57 return Math.Max(2, ActualSolutionSize); 59 58 } 60 59 } … … 82 81 83 82 private double[] Evaluate(RealVector r, int objectives) { 83 if (r.Length < objectives) { 84 throw new Exception("The dimensionality of the problem(ProblemSize) must be larger or equal than the dimensionality of the solution(SolutionSize) "); 85 } 86 84 87 double[] res = new double[objectives]; 85 88 -
branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/DTLZ3.cs
r13448 r13451 17 17 public class DTLZ3 : MultiObjectiveTestFunction { 18 18 19 private int actualSolutionSize = 2; 20 public override int ActualSolutionSize { 21 get { 22 return actualSolutionSize; 23 } 24 25 set { 26 actualSolutionSize = value; 27 } 28 } 29 19 30 public override DoubleMatrix Bounds { 20 31 get { … … 25 36 public override bool[] Maximization { 26 37 get { 27 bool[] res = new bool[((ValueParameter<IntValue>)Parameters["SolutionSize"]).Value.Value]; 28 for(int i =0; i < res.Length; i++) res[i] = false; //TODO: diligent initialzation 29 return res; 38 return new bool[actualSolutionSize]; 30 39 } 31 40 } … … 37 46 } 38 47 39 public override int MaximumSolutionSize { //TODO ask Michael48 public override int MaximumSolutionSize { 40 49 get { 41 return ((ValueParameter<IntValue>)Parameters["ProblemSize"]).Value.Value; 50 51 return int.MaxValue; 42 52 } 43 53 } … … 45 55 public override int MinimumProblemSize { 46 56 get { 47 return 2;57 return Math.Max(2, ActualSolutionSize); 48 58 } 49 59 } … … 52 62 get { 53 63 return 2; 54 }55 }56 57 public override int ActualSolutionSize {58 get {59 throw new NotImplementedException();60 }61 62 set {63 throw new NotImplementedException();64 64 } 65 65 } … … 77 77 78 78 public override double[] Evaluate(RealVector r) { 79 return Evaluate(r, ((ValueParameter<IntValue>)Parameters["SolutionSize"]).Value.Value);79 return Evaluate(r, ActualSolutionSize); 80 80 } 81 81 82 82 private double[] Evaluate(RealVector r, int objectives) { 83 if (r.Length < objectives) { 84 throw new Exception("The dimensionality of the problem(ProblemSize) must be larger or equal than the dimensionality of the solution(SolutionSize) "); 85 } 83 86 double[] res = new double[objectives]; 84 87 -
branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/DTLZ4.cs
r13448 r13451 17 17 public class DTLZ4 : MultiObjectiveTestFunction { 18 18 19 private int actualSolutionSize = 2; 20 public override int ActualSolutionSize { 21 get { 22 return actualSolutionSize; 23 } 24 25 set { 26 actualSolutionSize = value; 27 } 28 } 29 19 30 public override DoubleMatrix Bounds { 20 31 get { … … 25 36 public override bool[] Maximization { 26 37 get { 27 bool[] res = new bool[((ValueParameter<IntValue>)Parameters["SolutionSize"]).Value.Value]; 28 for(int i =0; i < res.Length; i++) res[i] = false; //TODO: diligent initialzation 29 return res; 38 return new bool[actualSolutionSize]; 30 39 } 31 40 } … … 37 46 } 38 47 39 public override int MaximumSolutionSize { //TODO ask Michael48 public override int MaximumSolutionSize { 40 49 get { 41 return ((ValueParameter<IntValue>)Parameters["ProblemSize"]).Value.Value; 50 51 return int.MaxValue; 42 52 } 43 53 } … … 45 55 public override int MinimumProblemSize { 46 56 get { 47 return 2;57 return Math.Max(3, ActualSolutionSize+1); 48 58 } 49 59 } … … 52 62 get { 53 63 return 2; 54 }55 }56 57 public override int ActualSolutionSize {58 get {59 throw new NotImplementedException();60 }61 62 set {63 throw new NotImplementedException();64 64 } 65 65 } … … 77 77 78 78 public override double[] Evaluate(RealVector r) { 79 return Evaluate(r, ((ValueParameter<IntValue>)Parameters["SolutionSize"]).Value.Value);79 return Evaluate(r, ActualSolutionSize); 80 80 } 81 81 82 82 private double[] Evaluate(RealVector r, int objectives) { 83 if (r.Length < objectives) { 84 throw new Exception("The dimensionality of the problem(ProblemSize) must be larger or equal than the dimensionality of the solution(SolutionSize) "); 85 } 83 86 double[] res = new double[objectives]; 84 87 -
branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/DTLZ5.cs
r13448 r13451 17 17 public class DTLZ5 : MultiObjectiveTestFunction { 18 18 19 private int actualSolutionSize = 2; 20 public override int ActualSolutionSize { 21 get { 22 return actualSolutionSize; 23 } 24 25 set { 26 actualSolutionSize = value; 27 } 28 } 29 19 30 public override DoubleMatrix Bounds { 20 31 get { … … 25 36 public override bool[] Maximization { 26 37 get { 27 bool[] res = new bool[((ValueParameter<IntValue>)Parameters["SolutionSize"]).Value.Value]; 28 for(int i =0; i < res.Length; i++) res[i] = false; //TODO: diligent initialzation 29 return res; 38 return new bool[actualSolutionSize]; 30 39 } 31 40 } … … 37 46 } 38 47 39 public override int MaximumSolutionSize { //TODO ask Michael48 public override int MaximumSolutionSize { 40 49 get { 41 return ((ValueParameter<IntValue>)Parameters["ProblemSize"]).Value.Value; 50 51 return int.MaxValue; 42 52 } 43 53 } … … 45 55 public override int MinimumProblemSize { 46 56 get { 47 return 2;57 return Math.Max(2, ActualSolutionSize+1); 48 58 } 49 59 } … … 52 62 get { 53 63 return 2; 54 }55 }56 57 public override int ActualSolutionSize {58 get {59 throw new NotImplementedException();60 }61 62 set {63 throw new NotImplementedException();64 64 } 65 65 } … … 77 77 78 78 public override double[] Evaluate(RealVector r) { 79 return Evaluate(r, ((ValueParameter<IntValue>)Parameters["SolutionSize"]).Value.Value);79 return Evaluate(r, ActualSolutionSize); 80 80 } 81 81 82 82 private double[] Evaluate(RealVector r, int objectives) { 83 if (r.Length < objectives) { 84 throw new Exception("The dimensionality of the problem(ProblemSize) must be larger than the dimensionality of the solution(SolutionSize) "); 85 } 83 86 double[] res = new double[objectives]; 84 87 -
branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/DTLZ6.cs
r13448 r13451 17 17 public class DTLZ6 : MultiObjectiveTestFunction { 18 18 19 private int actualSolutionSize = 2; 20 public override int ActualSolutionSize { 21 get { 22 return actualSolutionSize; 23 } 24 25 set { 26 actualSolutionSize = value; 27 } 28 } 29 19 30 public override DoubleMatrix Bounds { 20 31 get { … … 25 36 public override bool[] Maximization { 26 37 get { 27 bool[] res = new bool[((ValueParameter<IntValue>)Parameters["SolutionSize"]).Value.Value]; 28 for(int i =0; i < res.Length; i++) res[i] = false; //TODO: diligent initialzation 29 return res; 38 return new bool[actualSolutionSize]; 30 39 } 31 40 } … … 37 46 } 38 47 39 public override int MaximumSolutionSize { //TODO ask Michael48 public override int MaximumSolutionSize { 40 49 get { 41 return ((ValueParameter<IntValue>)Parameters["ProblemSize"]).Value.Value; 50 51 return int.MaxValue; 42 52 } 43 53 } … … 45 55 public override int MinimumProblemSize { 46 56 get { 47 return 2;57 return Math.Max(2, ActualSolutionSize); 48 58 } 49 59 } … … 52 62 get { 53 63 return 2; 54 }55 }56 57 public override int ActualSolutionSize {58 get {59 throw new NotImplementedException();60 }61 62 set {63 throw new NotImplementedException();64 64 } 65 65 } … … 77 77 78 78 public override double[] Evaluate(RealVector r) { 79 return Evaluate(r, ((ValueParameter<IntValue>)Parameters["SolutionSize"]).Value.Value);79 return Evaluate(r, ActualSolutionSize); 80 80 } 81 81 82 82 private double[] Evaluate(RealVector r, int objectives) { 83 if (r.Length < objectives) { 84 throw new Exception("The dimensionality of the problem(ProblemSize) must be larger than or equal to the dimensionality of the solution(SolutionSize) "); 85 } 83 86 double[] res = new double[objectives]; 84 87 … … 91 94 length = Math.Sqrt(length); 92 95 g = 1.0 + 9.0 / length * g; 96 if (length == 0) { g = 1; } 93 97 94 98 //calculating f0...fM-2 -
branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/DTLZ7.cs
r13448 r13451 17 17 public class DTLZ7 : MultiObjectiveTestFunction { 18 18 19 private int actualSolutionSize = 2; 20 public override int ActualSolutionSize { 21 get { 22 return actualSolutionSize; 23 } 24 25 set { 26 actualSolutionSize = value; 27 } 28 } 29 19 30 public override DoubleMatrix Bounds { 20 31 get { … … 25 36 public override bool[] Maximization { 26 37 get { 27 bool[] res = new bool[((ValueParameter<IntValue>)Parameters["SolutionSize"]).Value.Value]; 28 for(int i =0; i < res.Length; i++) res[i] = false; //TODO: diligent initialzation 29 return res; 38 return new bool[actualSolutionSize]; 30 39 } 31 40 } … … 37 46 } 38 47 39 public override int MaximumSolutionSize { //TODO ask Michael48 public override int MaximumSolutionSize { 40 49 get { 41 return ((ValueParameter<IntValue>)Parameters["ProblemSize"]).Value.Value; 50 51 return int.MaxValue; 42 52 } 43 53 } … … 45 55 public override int MinimumProblemSize { 46 56 get { 47 return 2;57 return Math.Max(2, ActualSolutionSize*10); 48 58 } 49 59 } … … 52 62 get { 53 63 return 2; 54 }55 }56 57 public override int ActualSolutionSize {58 get {59 throw new NotImplementedException();60 }61 62 set {63 throw new NotImplementedException();64 64 } 65 65 } … … 77 77 78 78 public override double[] Evaluate(RealVector r) { 79 return Evaluate(r, ((ValueParameter<IntValue>)Parameters["SolutionSize"]).Value.Value);79 return Evaluate(r, ActualSolutionSize); 80 80 } 81 81 82 82 private double[] Evaluate(RealVector r, int objectives) { 83 if (r.Length < objectives) { 84 throw new Exception("The dimensionality of the problem(ProblemSize) must be larger than or equal to ten times the dimensionality of the solution(SolutionSize) "); 85 } 83 86 double[] res = new double[objectives]; 84 87 85 88 //calculate f0...fM-1; 86 89 double n = 10 * objectives; 87 for (int i = 0; i <objectives; i++) {90 for (int i = 1; i <= objectives; i++) { 88 91 double d = 0; 89 for (int j = (int)Math.Floor((i - 1) * n / objectives); j < (int)Math.Floor(i * n / objectives); j++) { 92 int c = 0; 93 for (int j = (int)Math.Floor((i - 1) * n / objectives); j < Math.Min((int)Math.Floor(i * n / objectives), r.Length); j++) { 90 94 d += r[j]; 95 c++; 91 96 } 92 d *= 1 / Math.Floor(n / objectives);93 res[i ] = d;97 d *= 1.0 / c; 98 res[i-1] = d; 94 99 } 95 100 96 101 //evaluate constraints g0...gM-2 97 102 for (int i = 0; i < objectives - 1; i++) { 98 if (res[objectives - 1] + 4 * res[i] - 1 < 0) return null; //TODO null is not the way to go103 if (res[objectives - 1] + 4 * res[i] - 1 < 0) return MultiObjectiveTestFunction.IllegalValue(objectives,Maximization); 99 104 } 100 105 //evaluate gM-1 … … 103 108 for (int j = 0; j < i; j++) min = Math.Min(min, res[i] + res[j]); 104 109 }; 105 if (2 * res[objectives - 1] + min - 1 < 0) return null; //TODO null is not the way to go110 if (2 * res[objectives - 1] + min - 1 < 0) return MultiObjectiveTestFunction.IllegalValue(objectives, Maximization); 106 111 107 112 return res; -
branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/Kursawe.cs
r13448 r13451 42 42 public override int MinimumProblemSize { 43 43 get { 44 return 2;44 return 3; 45 45 } 46 46 } … … 75 75 //objective 1 76 76 double f0 = 0.0; 77 for (int i = 0; i < r.Length - 1; i++) {77 for (int i = 0; i < 2; i++) { 78 78 f0 += -10 * Math.Exp(-0.2 * Math.Sqrt(r[i] * r[i] + r[i + 1] * r[i + 1])); 79 79 } 80 80 //objective2 81 81 double f1 = 0.0; 82 for (int i = 0; i < r.Length; i++) {83 f1 += Math.Pow(Math.Abs(r[i]), 0. 2) + 5 * Math.Sin(Math.Pow(r[i], 3));82 for (int i = 0; i < 3; i++) { 83 f1 += Math.Pow(Math.Abs(r[i]), 0.8) + 5 * Math.Sin(Math.Pow(r[i], 3)); 84 84 } 85 85 -
branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/MultiObjectiveTestFunction.cs
r13448 r13451 31 31 /// Base class for a test function evaluator. 32 32 /// </summary> 33 [Item(" Single-Objective Function", "Base class for singleobjective functions.")]33 [Item("Multi-Objective Function", "Base class for multi objective functions.")] 34 34 [StorableClass] 35 35 public abstract class MultiObjectiveTestFunction : ParameterizedNamedItem, IMultiObjectiveTestFunction { 36 public static double[] IllegalValue(int size, bool[] maximization) { 37 double[] res = new double[size]; 38 for(int i =0; i< size; i++) { 39 res[i] = maximization[i] ? Double.MinValue : Double.MaxValue; 40 } 41 return res; 42 } 43 36 44 /// <summary> 37 45 /// These operators should not change their name through the GUI -
branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/SchafferN2.cs
r13448 r13451 77 77 //objective1 78 78 double f0; 79 if (x <= 1 1) f0 = -x;79 if (x <= 1) f0 = -x; 80 80 else if (x <= 3) f0 = x - 2; 81 81 else if (x <= 4) f0 = 4 - x; -
branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/ZDT1.cs
r13448 r13451 76 76 for (int i = 1; i < r.Length; i++) g += r[i]; 77 77 g = 1.0 + 9.0 * g / (r.Length - 1); 78 return new double[] { r[0], g * (1.0 - Math.Sqrt(r[0] / g)) }; 78 double f1 = g * (1.0 - Math.Sqrt(r[0] / g)); 79 return new double[] { r[0], f1}; 79 80 } 80 81 } -
branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/ZDT4.cs
r13448 r13451 18 18 public override DoubleMatrix Bounds { 19 19 get { 20 return new DoubleMatrix(new double[,] { { -5, 5 } }); //TODO definition in the source is contradicting itself20 return new DoubleMatrix(new double[,] { { 0, 1 } }); //definition in the source is contradicting itself the known paretofront is for [0,1] 21 21 } 22 22 } -
branches/HeuristicLab.Problems.MultiObjectiveTestFunctions/HeuristicLab.Problems.MultiObjectiveTestFunctions/3.3/Testfunctions/ZDT6.cs
r13448 r13451 75 75 double g = 0; 76 76 for (int i = 1; i < r.Length; i++) g += r[i]; 77 g = g = 1.0 + 9.0 * Math.Pow(g / (r.Length - 1), 0.25); 78 double d = r[0] / g; 79 return new double[] { 1 - Math.Exp(-4 * r[0]) * Math.Pow(Math.Sin(6 * Math.PI * r[0]), 6), g * (1.0 - d * d) }; 77 g = 1.0 + 9.0 * Math.Pow(g / (r.Length - 1), 0.25); 78 double f1 = 1 - Math.Exp(-4 * r[0]) * Math.Pow(Math.Sin(6 * Math.PI * r[0]), 6); 79 double d = f1 / g; 80 return new double[] { f1, g*(1.0 - d * d) }; 80 81 } 81 82 }
Note: See TracChangeset
for help on using the changeset viewer.