Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
11/24/15 12:56:04 (8 years ago)
Author:
abeham
Message:

#2521: working on multi-encoding

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/ProblemRefactoring/HeuristicLab.Optimization/3.3/BasicProblems/MultiEncoding.cs

    r13351 r13356  
    3131  [Item("MultiEncoding", "Describes a combined encoding consisting of multiple simpler encodings.")]
    3232  [StorableClass]
    33   public sealed class MultiEncoding : Encoding<MultiSolution> {
     33  public sealed class MultiEncoding : Encoding<CombinedSolution> {
    3434
    35     private readonly List<IEncoding> encodings;
     35    private readonly ItemCollection<IEncoding> encodings;
     36
    3637    [Storable]
    37     public IEnumerable<IEncoding> Encodings {
     38    private IEnumerable<IEncoding> StorableEncodings {
    3839      get { return encodings; }
    39       private set { encodings.AddRange(value); }
     40      set { encodings.AddRange(value); }
     41    }
     42
     43    public ReadOnlyItemCollection<IEncoding> Encodings {
     44      get { return encodings.AsReadOnly(); }
    4045    }
    4146
     
    4348    private MultiEncoding(bool deserializing)
    4449      : base(deserializing) {
    45       encodings = new List<IEncoding>();
     50      encodings = new ItemCollection<IEncoding>();
    4651    }
    4752    public override IDeepCloneable Clone(Cloner cloner) { return new MultiEncoding(this, cloner); }
    4853    private MultiEncoding(MultiEncoding original, Cloner cloner)
    4954      : base(original, cloner) {
    50       encodings = new List<IEncoding>(original.Encodings.Select(cloner.Clone));
     55      encodings = new ItemCollection<IEncoding>(original.Encodings.Select(cloner.Clone));
    5156    }
    5257    public MultiEncoding()
    5358      : base("MultiEncoding") {
    54       encodings = new List<IEncoding>();
    55       SolutionCreator = new MultiEncodingCreator();
    56 
    57       foreach (var @operator in ApplicationManager.Manager.GetInstances<IMultiEncodingOperator>())
     59      encodings = new ItemCollection<IEncoding>();
     60      SolutionCreator = new MultiEncodingCreator() { Encoding = this };
     61      foreach (var @operator in ApplicationManager.Manager.GetInstances<IMultiEncodingOperator>()) {
     62        @operator.Encoding = this;
    5863        AddOperator(@operator);
     64      }
    5965    }
    6066
     
    6369      if (Encodings.Any(e => e.Name == encoding.Name)) throw new ArgumentException("Encoding name must be unique", "encoding.Name");
    6470      encodings.Add(encoding);
    65 
    6671      Parameters.AddRange(encoding.Parameters);
    67 
    68       foreach (var @operator in Operators.OfType<IMultiEncodingOperator>()) {
    69         @operator.AddEncoding(encoding);
    70       }
    71       OnEncodingsChanged();
    7272      return this;
    7373    }
     
    7676      var success = encodings.Remove(encoding);
    7777      Parameters.RemoveRange(encoding.Parameters);
    78       foreach (var @operator in Operators.OfType<IMultiEncodingOperator>()) {
    79         @operator.RemoveEncoding(encoding);
    80       }
    81       OnEncodingsChanged();
    8278      return success;
    8379    }
    8480
    85     public override void ConfigureOperators(IEnumerable<IOperator> operators) {
    86     }
    87 
    88     public event EventHandler EncodingsChanged;
    89     private void OnEncodingsChanged() {
    90       var handler = EncodingsChanged;
    91       if (handler != null) handler(this, EventArgs.Empty);
    92     }
     81    public override void ConfigureOperators(IEnumerable<IOperator> operators) { }
    9382  }
    9483}
Note: See TracChangeset for help on using the changeset viewer.