Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
10/04/19 16:03:51 (5 years ago)
Author:
abeham
Message:

#2521: refactored multi-objective problems' maximization

  • Add ForceValue method to IValueParameter to perform changes even when it is read-only
  • Add MaximizationChanged event handler
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/MultiObjectiveProblem.cs

    r17315 r17317  
    2020#endregion
    2121
     22using System;
    2223using System.Collections.Generic;
    2324using System.Linq;
     
    3738    where TEncodedSolution : class, IEncodedSolution {
    3839    #region Parameternames
    39     public const string MaximizationParameterName = "Maximization";
    4040    public const string BestKnownFrontParameterName = "BestKnownFront";
    4141    public const string ReferencePointParameterName = "ReferencePoint";
     
    4343
    4444    #region Parameterproperties
    45     public IValueParameter<BoolArray> MaximizationParameter {
    46       get { return (IValueParameter<BoolArray>)Parameters[MaximizationParameterName]; }
    47     }
     45    [Storable] public IValueParameter<BoolArray> MaximizationParameter { get; }
    4846    public IValueParameter<DoubleMatrix> BestKnownFrontParameter {
    4947      get { return (IValueParameter<DoubleMatrix>)Parameters[BestKnownFrontParameterName]; }
     
    6058    protected MultiObjectiveProblem(MultiObjectiveProblem<TEncoding, TEncodedSolution> original, Cloner cloner)
    6159      : base(original, cloner) {
     60      MaximizationParameter = cloner.Clone(original.MaximizationParameter);
    6261      ParameterizeOperators();
    6362    }
    6463
    6564    protected MultiObjectiveProblem() : base() {
    66       Parameters.Add(new ValueParameter<BoolArray>(MaximizationParameterName, "Set to false if the problem should be minimized.", (BoolArray)new BoolArray(Maximization).AsReadOnly()));
     65      MaximizationParameter = new ValueParameter<BoolArray>("Maximization", "The dimensions correspond to the different objectives: False if the objective should be minimized, true if it should be maximized..", new BoolArray(new bool[] { }, @readonly: true));
     66      Parameters.Add(MaximizationParameter);
    6767      Parameters.Add(new OptionalValueParameter<DoubleMatrix>(BestKnownFrontParameterName, "A double matrix representing the best known qualites for this problem (aka points on the Pareto front). Points are to be given in a row-wise fashion."));
    6868      Parameters.Add(new OptionalValueParameter<DoubleArray>(ReferencePointParameterName, "The refrence point for hypervolume calculations on this problem"));
     
    7373
    7474    protected MultiObjectiveProblem(TEncoding encoding) : base(encoding) {
    75       Parameters.Add(new ValueParameter<BoolArray>(MaximizationParameterName, "Set to false if the problem should be minimized.", (BoolArray)new BoolArray(Maximization).AsReadOnly()));
     75      MaximizationParameter = new ValueParameter<BoolArray>("Maximization", "The dimensions correspond to the different objectives: False if the objective should be minimized, true if it should be maximized..", new BoolArray(new bool[] { }, @readonly: true));
     76      Parameters.Add(MaximizationParameter);
    7677      Parameters.Add(new OptionalValueParameter<DoubleMatrix>(BestKnownFrontParameterName, "A double matrix representing the best known qualites for this problem (aka points on the Pareto front). Points are to be given in a row-wise fashion."));
    7778      Parameters.Add(new OptionalValueParameter<DoubleArray>(ReferencePointParameterName, "The refrence point for hypervolume calculations on this problem"));
     
    8990      get { return Maximization.Length; }
    9091    }
    91     public abstract bool[] Maximization { get; }
     92    public bool[] Maximization {
     93      get { return MaximizationParameter.Value.CloneAsArray(); }
     94      protected set {
     95        if (MaximizationParameter.Value.SequenceEqual(value)) return;
     96        MaximizationParameter.ForceValue(new BoolArray(value, @readonly: true));
     97        OnMaximizationChanged();
     98      }
     99    }
    92100
    93101    public virtual IReadOnlyList<double[]> BestKnownFront {
     
    168176    #region IMultiObjectiveHeuristicOptimizationProblem Members
    169177    IParameter IMultiObjectiveHeuristicOptimizationProblem.MaximizationParameter {
    170       get { return Parameters[MaximizationParameterName]; }
     178      get { return MaximizationParameter; }
    171179    }
    172180    IMultiObjectiveEvaluator IMultiObjectiveHeuristicOptimizationProblem.Evaluator {
     
    174182    }
    175183    #endregion
     184
     185    public event EventHandler MaximizationChanged;
     186    protected void OnMaximizationChanged() {
     187      MaximizationChanged?.Invoke(this, EventArgs.Empty);
     188    }
    176189  }
    177190}
Note: See TracChangeset for help on using the changeset viewer.