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.Binary/3.3/DeceptiveTrapProblem.cs

    r17382 r17544  
    3737  [Creatable(CreatableAttribute.Categories.CombinatorialProblems, Priority = 230)]
    3838  public class DeceptiveTrapProblem : BinaryVectorProblem {
    39     [StorableConstructor]
    40     protected DeceptiveTrapProblem(StorableConstructorFlag _) : base(_) { }
    41     protected DeceptiveTrapProblem(DeceptiveTrapProblem original, Cloner cloner)
    42       : base(original, cloner) {
    43     }
    44     public override IDeepCloneable Clone(Cloner cloner) {
    45       return new DeceptiveTrapProblem(this, cloner);
    46     }
    47 
    48     private const string TrapSizeParameterName = "Trap Size";
    49 
    50     public IFixedValueParameter<IntValue> TrapSizeParameter {
    51       get { return (IFixedValueParameter<IntValue>)Parameters[TrapSizeParameterName]; }
    52     }
     39    [Storable] public IFixedValueParameter<IntValue> TrapSizeParameter { get; private set; }
     40    [Storable] public IFixedValueParameter<IntValue> NumberOfTrapsParameter { get; private set; }
    5341
    5442    public int TrapSize {
    5543      get { return TrapSizeParameter.Value.Value; }
    5644      set { TrapSizeParameter.Value.Value = value; }
     45    }
     46
     47    public int NumberOfTraps {
     48      get { return NumberOfTrapsParameter.Value.Value; }
     49      set { NumberOfTrapsParameter.Value.Value = value; }
    5750    }
    5851
     
    6356    public DeceptiveTrapProblem() : base() {
    6457      Maximization = true;
    65       Parameters.Add(new FixedValueParameter<IntValue>(TrapSizeParameterName, "", new IntValue(7)));
    66       Encoding.Length = 49;
     58      Parameters.Add(TrapSizeParameter = new FixedValueParameter<IntValue>("Trap Size", "", new IntValue(7)));
     59      Parameters.Add(NumberOfTrapsParameter = new FixedValueParameter<IntValue>("Number of Traps", "", new IntValue(7)));
     60      Dimension = TrapSize * NumberOfTraps;
     61
     62      RegisterEventHandlers();
    6763    }
    6864
     
    8379
    8480    public override ISingleObjectiveEvaluationResult Evaluate(BinaryVector individual, IRandom random, CancellationToken cancellationToken) {
    85       if (individual.Length != Length) throw new ArgumentException("The individual has not the correct length.");
     81      if (individual.Length != Dimension) throw new ArgumentException("The individual has not the correct length.");
    8682      int total = 0;
    8783      var trapSize = TrapSize;
     
    9288      return new SingleObjectiveEvaluationResult(quality);
    9389    }
     90
     91    [StorableConstructor]
     92    protected DeceptiveTrapProblem(StorableConstructorFlag _) : base(_) { }
     93    [StorableHook(HookType.AfterDeserialization)]
     94    private void AfterDeserialization() {
     95      RegisterEventHandlers();
     96    }
     97    protected DeceptiveTrapProblem(DeceptiveTrapProblem original, Cloner cloner)
     98      : base(original, cloner) {
     99      TrapSizeParameter = cloner.Clone(original.TrapSizeParameter);
     100      NumberOfTrapsParameter = cloner.Clone(original.NumberOfTrapsParameter);
     101
     102      RegisterEventHandlers();
     103    }
     104    public override IDeepCloneable Clone(Cloner cloner) {
     105      return new DeceptiveTrapProblem(this, cloner);
     106    }
     107
     108    private void RegisterEventHandlers() {
     109      TrapSizeParameter.Value.ValueChanged += TrapSizeOnChanged;
     110      NumberOfTrapsParameter.Value.ValueChanged += NumberOfTrapsOnChanged;
     111    }
     112
     113    protected virtual void TrapSizeOnChanged(object sender, EventArgs e) {
     114      Dimension = TrapSize * NumberOfTraps;
     115    }
     116
     117    private void NumberOfTrapsOnChanged(object sender, EventArgs e) {
     118      Dimension = TrapSize * NumberOfTraps;
     119    }
    94120  }
    95121}
Note: See TracChangeset for help on using the changeset viewer.