Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
05/18/20 18:55:08 (4 years ago)
Author:
abeham
Message:

#2521: worked on refactoring, worked a lot on binary encoding / problems

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2521_ProblemRefactoring/HeuristicLab.Problems.TestFunctions/3.3/SingleObjectiveTestFunctionProblem.cs

    r17382 r17544  
    4242
    4343    #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     }
    5044    public OptionalValueParameter<RealVector> BestKnownSolutionParameter {
    5145      get { return (OptionalValueParameter<RealVector>)Parameters["BestKnownSolution"]; }
     
    5751
    5852    #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     }
    6753    public ISingleObjectiveTestFunction TestFunction {
    6854      get { return TestFunctionParameter.Value; }
     
    7965    public SingleObjectiveTestFunctionProblem()
    8066      : 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 } })));
    8367      Parameters.Add(new OptionalValueParameter<RealVector>("BestKnownSolution", "The best known solution for this test function instance."));
    8468      Parameters.Add(new ValueParameter<ISingleObjectiveTestFunction>("TestFunction", "The function that is to be optimized.", new Ackley()));
    8569      Maximization = TestFunction.Maximization;
    8670
    87       Encoding.LengthParameter = ProblemSizeParameter;
    88       Encoding.BoundsParameter = BoundsParameter;
    8971      BestKnownQuality = TestFunction.BestKnownQuality;
    9072
     
    10587      Evaluator.QualityParameter.ActualNameChanged += Evaluator_QualityParameter_ActualNameChanged;
    10688      TestFunctionParameter.ValueChanged += TestFunctionParameterOnValueChanged;
    107       ProblemSizeParameter.Value.ValueChanged += ProblemSizeOnValueChanged;
    108       BoundsParameter.ValueChanged += BoundsParameterOnValueChanged;
    10989    }
    11090
     
    156136      Parameterize();
    157137    }
     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    }
    158147    private void Evaluator_QualityParameter_ActualNameChanged(object sender, EventArgs e) {
    159148      Parameterize();
    160149    }
    161150    private void TestFunctionParameterOnValueChanged(object sender, EventArgs eventArgs) {
    162       var problemSizeChange = ProblemSize < TestFunction.MinimumProblemSize
    163                               || ProblemSize > TestFunction.MaximumProblemSize;
     151      var problemSizeChange = Dimension < TestFunction.MinimumProblemSize
     152                              || Dimension > TestFunction.MaximumProblemSize;
    164153      if (problemSizeChange) {
    165         ProblemSize = Math.Max(TestFunction.MinimumProblemSize, Math.Min(ProblemSize, TestFunction.MaximumProblemSize));
     154        Dimension = Math.Max(TestFunction.MinimumProblemSize, Math.Min(Dimension, TestFunction.MaximumProblemSize));
    166155      }
    167156      BestKnownQuality = TestFunction.BestKnownQuality;
    168157      Bounds = (DoubleMatrix)TestFunction.Bounds.Clone();
    169       var bestSolution = TestFunction.GetBestKnownSolution(ProblemSize);
     158      var bestSolution = TestFunction.GetBestKnownSolution(Dimension);
    170159      BestKnownSolutionParameter.Value = bestSolution;
    171160      Maximization = TestFunction.Maximization;
    172161
    173162      OnReset();
    174     }
    175     private void ProblemSizeOnValueChanged(object sender, EventArgs eventArgs) {
    176       if (ProblemSize < TestFunction.MinimumProblemSize
    177         || 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();
    182163    }
    183164    #endregion
Note: See TracChangeset for help on using the changeset viewer.