- Timestamp:
- 05/18/20 18:55:08 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2521_ProblemRefactoring/HeuristicLab.Problems.TestFunctions/3.3/SingleObjectiveTestFunctionProblem.cs
r17382 r17544 42 42 43 43 #region Parameter Properties 44 private IFixedValueParameter<IntValue> ProblemSizeParameter {45 get { return (IFixedValueParameter<IntValue>)Parameters["ProblemSize"]; }46 }47 private IValueParameter<DoubleMatrix> BoundsParameter {48 get { return (IValueParameter<DoubleMatrix>)Parameters["Bounds"]; }49 }50 44 public OptionalValueParameter<RealVector> BestKnownSolutionParameter { 51 45 get { return (OptionalValueParameter<RealVector>)Parameters["BestKnownSolution"]; } … … 57 51 58 52 #region Properties 59 public int ProblemSize {60 get { return ProblemSizeParameter.Value.Value; }61 set { ProblemSizeParameter.Value.Value = value; }62 }63 public DoubleMatrix Bounds {64 get { return BoundsParameter.Value; }65 set { BoundsParameter.Value = value; }66 }67 53 public ISingleObjectiveTestFunction TestFunction { 68 54 get { return TestFunctionParameter.Value; } … … 79 65 public SingleObjectiveTestFunctionProblem() 80 66 : base(new RealVectorEncoding("Point")) { 81 Parameters.Add(new FixedValueParameter<IntValue>("ProblemSize", "The dimensionality of the problem instance (number of variables in the function).", new IntValue(2)));82 Parameters.Add(new ValueParameter<DoubleMatrix>("Bounds", "The bounds of the solution given as either one line for all variables or a line for each variable. The first column specifies lower bound, the second upper bound.", new DoubleMatrix(new double[,] { { -100, 100 } })));83 67 Parameters.Add(new OptionalValueParameter<RealVector>("BestKnownSolution", "The best known solution for this test function instance.")); 84 68 Parameters.Add(new ValueParameter<ISingleObjectiveTestFunction>("TestFunction", "The function that is to be optimized.", new Ackley())); 85 69 Maximization = TestFunction.Maximization; 86 70 87 Encoding.LengthParameter = ProblemSizeParameter;88 Encoding.BoundsParameter = BoundsParameter;89 71 BestKnownQuality = TestFunction.BestKnownQuality; 90 72 … … 105 87 Evaluator.QualityParameter.ActualNameChanged += Evaluator_QualityParameter_ActualNameChanged; 106 88 TestFunctionParameter.ValueChanged += TestFunctionParameterOnValueChanged; 107 ProblemSizeParameter.Value.ValueChanged += ProblemSizeOnValueChanged;108 BoundsParameter.ValueChanged += BoundsParameterOnValueChanged;109 89 } 110 90 … … 156 136 Parameterize(); 157 137 } 138 protected override void DimensionOnChanged() { 139 base.DimensionOnChanged(); 140 if (Dimension < TestFunction.MinimumProblemSize || Dimension > TestFunction.MaximumProblemSize) 141 Dimension = Math.Min(TestFunction.MaximumProblemSize, Math.Max(TestFunction.MinimumProblemSize, Dimension)); 142 } 143 protected override void BoundsOnChanged() { 144 base.BoundsOnChanged(); 145 Parameterize(); 146 } 158 147 private void Evaluator_QualityParameter_ActualNameChanged(object sender, EventArgs e) { 159 148 Parameterize(); 160 149 } 161 150 private void TestFunctionParameterOnValueChanged(object sender, EventArgs eventArgs) { 162 var problemSizeChange = ProblemSize< TestFunction.MinimumProblemSize163 || ProblemSize> TestFunction.MaximumProblemSize;151 var problemSizeChange = Dimension < TestFunction.MinimumProblemSize 152 || Dimension > TestFunction.MaximumProblemSize; 164 153 if (problemSizeChange) { 165 ProblemSize = Math.Max(TestFunction.MinimumProblemSize, Math.Min(ProblemSize, TestFunction.MaximumProblemSize));154 Dimension = Math.Max(TestFunction.MinimumProblemSize, Math.Min(Dimension, TestFunction.MaximumProblemSize)); 166 155 } 167 156 BestKnownQuality = TestFunction.BestKnownQuality; 168 157 Bounds = (DoubleMatrix)TestFunction.Bounds.Clone(); 169 var bestSolution = TestFunction.GetBestKnownSolution( ProblemSize);158 var bestSolution = TestFunction.GetBestKnownSolution(Dimension); 170 159 BestKnownSolutionParameter.Value = bestSolution; 171 160 Maximization = TestFunction.Maximization; 172 161 173 162 OnReset(); 174 }175 private void ProblemSizeOnValueChanged(object sender, EventArgs eventArgs) {176 if (ProblemSize < TestFunction.MinimumProblemSize177 || ProblemSize > TestFunction.MaximumProblemSize)178 ProblemSize = Math.Min(TestFunction.MaximumProblemSize, Math.Max(TestFunction.MinimumProblemSize, ProblemSize));179 }180 private void BoundsParameterOnValueChanged(object sender, EventArgs eventArgs) {181 Parameterize();182 163 } 183 164 #endregion
Note: See TracChangeset
for help on using the changeset viewer.