Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
07/08/19 15:37:35 (5 years ago)
Author:
abeham
Message:

#2740: merged to stable (16782, 16783)

Location:
stable
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • stable

  • stable/HeuristicLab.Optimization

  • stable/HeuristicLab.Optimization/3.3/BasicProblems/Operators/MultiEncodingOperator.cs

    r17097 r17111  
    2323using System.Collections.Generic;
    2424using System.Linq;
     25using HEAL.Attic;
    2526using HeuristicLab.Common;
    2627using HeuristicLab.Core;
    2728using HeuristicLab.Operators;
    2829using HeuristicLab.Parameters;
    29 using HEAL.Attic;
    3030
    3131namespace HeuristicLab.Optimization {
     
    3939    }
    4040
     41    public abstract string OperatorPrefix { get; }
     42
    4143    [StorableConstructor]
    42     protected MultiEncodingOperator(StorableConstructorFlag _) : base(_) {
    43     }
    44 
     44    protected MultiEncodingOperator(StorableConstructorFlag _) : base(_) { }
    4545    protected MultiEncodingOperator(MultiEncodingOperator<T> original, Cloner cloner)
    4646      : base(original, cloner) {
     
    4949        encoding.OperatorsChanged += Encoding_OperatorsChanged;
    5050    }
    51 
    5251    protected MultiEncodingOperator() : base() { }
    5352
    5453    [StorableHook(HookType.AfterDeserialization)]
    5554    private void AfterDeserialization() {
    56       foreach (var encoding in encodings)
     55      foreach (var encoding in encodings) {
     56        // BackwardsCompatibility3.3
     57        #region Backwards compatible code, remove with 3.4
     58        if (Parameters.ContainsKey(encoding.Name) && !Parameters.ContainsKey(OperatorPrefix + "." + encoding.Name)) {
     59          var oldParam = (IConstrainedValueParameter<T>)Parameters[encoding.Name];
     60          var selected = oldParam.Value;
     61          Parameters.Remove(oldParam);
     62          var newParam = new ConstrainedValueParameter<T>(OperatorPrefix + "." + encoding.Name, new ItemSet<T>(oldParam.ValidValues));
     63          newParam.Value = selected;
     64          Parameters.Add(newParam);
     65          oldParam.ValidValues.Clear();
     66        }
     67        #endregion
    5768        encoding.OperatorsChanged += Encoding_OperatorsChanged;
     69      }
    5870    }
    5971
    60 
    6172    public override IOperation Apply() {
    62       var operations = Parameters.Select(p => p.ActualValue).OfType<IOperator>().Select(op => ExecutionContext.CreateOperation(op));
     73      var operations = Parameters.Select(p => p.ActualValue).OfType<IOperator>().Select(op => ExecutionContext.CreateChildOperation(op));
    6374      return new OperationCollection(operations);
    6475    }
    6576
    6677    public virtual void AddEncoding(IEncoding encoding) {
    67       if (Parameters.ContainsKey(encoding.Name)) throw new ArgumentException(string.Format("Encoding {0} was already added.", encoding.Name));
     78      if (Parameters.ContainsKey(OperatorPrefix + "." + encoding.Name)) throw new ArgumentException(string.Format("Encoding {0} was already added.", encoding.Name));
    6879
    6980      encodings.Add(encoding);
    7081      encoding.OperatorsChanged += Encoding_OperatorsChanged;
    7182
    72       var param = new ConstrainedValueParameter<T>(encoding.Name, new ItemSet<T>(encoding.Operators.OfType<T>()));
     83      var param = new ConstrainedValueParameter<T>(OperatorPrefix + "." + encoding.Name, new ItemSet<T>(encoding.Operators.OfType<T>()));
    7384      param.Value = param.ValidValues.First();
    7485      Parameters.Add(param);
     
    7889      if (!encodings.Remove(encoding)) throw new ArgumentException(string.Format("Encoding {0} was not added to the MultiEncoding.", encoding.Name));
    7990      encoding.OperatorsChanged -= Encoding_OperatorsChanged;
    80       return Parameters.Remove(encoding.Name);
     91      return Parameters.Remove(OperatorPrefix + "." + encoding.Name);
    8192    }
    8293
    8394    protected IConstrainedValueParameter<T> GetParameter(IEncoding encoding) {
    84       if (!Parameters.ContainsKey(encoding.Name)) throw new ArgumentException(string.Format("Encoding {0} was not added to the MultiEncoding.", encoding.Name));
     95      if (!Parameters.ContainsKey(OperatorPrefix + "." + encoding.Name)) throw new ArgumentException(string.Format("Encoding {0} was not added to the MultiEncoding.", encoding.Name));
    8596
    86       return (IConstrainedValueParameter<T>)Parameters[encoding.Name];
     97      return (IConstrainedValueParameter<T>)Parameters[OperatorPrefix + "." + encoding.Name];
    8798    }
    8899
Note: See TracChangeset for help on using the changeset viewer.