Free cookie consent management tool by TermsFeed Policy Generator

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

#2521: worked on multi-encoding (it works again). Some issues are still present:

  • The programmable template needs to be slightly updated for multi-encoding
  • The encoding is recreated every time it is compiled making it impossible to configure operators
File:
1 edited

Legend:

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

    r13356 r13359  
    2121
    2222using System;
    23 using System.Collections.Generic;
    2423using System.Linq;
    25 using HeuristicLab.Collections;
    2624using HeuristicLab.Common;
    2725using HeuristicLab.Core;
     
    3230namespace HeuristicLab.Optimization {
    3331  [StorableClass]
    34   public abstract class MultiEncodingOperator<T> : InstrumentedOperator, IMultiEncodingOperator where T : class, IOperator {
    35     [Storable]
    36     private MultiEncoding encoding;
    37     public MultiEncoding Encoding {
    38       get { return encoding; }
    39       set {
    40         if (value == null) throw new ArgumentNullException("Encoding must not be null.");
    41         if (value == encoding) return;
    42         if (encoding != null) DeregisterEventHandlers();
    43         encoding = value;
    44         CombinedSolutionParameter.ActualName = encoding.Name;
    45         RegisterEventHandlers();
    46       }
     32  public abstract class MultiEncodingOperator<T> : InstrumentedOperator, IEncodingOperator<CombinedSolution>, IMultiEncodingOperator where T : class, IOperator {
     33    public ILookupParameter<CombinedSolution> SolutionParameter {
     34      get { return (ILookupParameter<CombinedSolution>)Parameters["Solution"]; }
    4735    }
    4836
    49     public ILookupParameter<CombinedSolution> CombinedSolutionParameter {
    50       get { return (ILookupParameter<CombinedSolution>)Parameters["CombinedSolution"]; }
     37    public ILookupParameter<IEncoding<CombinedSolution>> EncodingParameter {
     38      get { return (ILookupParameter<IEncoding<CombinedSolution>>)Parameters["Encoding"]; }
    5139    }
    5240
    5341    [StorableConstructor]
    5442    protected MultiEncodingOperator(bool deserializing) : base(deserializing) { }
    55     protected MultiEncodingOperator(MultiEncodingOperator<T> original, Cloner cloner)
    56       : base(original, cloner) {
    57       encoding = cloner.Clone(original.encoding);
    58       RegisterEventHandlers();
    59     }
     43    protected MultiEncodingOperator(MultiEncodingOperator<T> original, Cloner cloner) : base(original, cloner) { }
    6044    protected MultiEncodingOperator()
    6145      : base() {
    62       Parameters.Add(new LookupParameter<CombinedSolution>("CombinedSolution", "The combined solution that gets created."));
    63     }
    64 
    65     [StorableHook(HookType.AfterDeserialization)]
    66     private void AfterDeserialization() {
    67       RegisterEventHandlers();
    68     }
    69 
    70     private void RegisterEventHandlers() {
    71       encoding.Encodings.ItemsAdded += EncodingsOnItemsChanged;
    72       encoding.Encodings.CollectionReset += EncodingsOnItemsChanged;
    73       encoding.Encodings.ItemsRemoved += EncodingsOnItemsRemoved;
    74       foreach (var enc in encoding.Encodings)
    75         enc.OperatorsChanged += Encoding_OperatorsChanged;
    76     }
    77 
    78     private void DeregisterEventHandlers() {
    79       encoding.Encodings.ItemsAdded -= EncodingsOnItemsChanged;
    80       encoding.Encodings.CollectionReset -= EncodingsOnItemsChanged;
    81       encoding.Encodings.ItemsRemoved -= EncodingsOnItemsRemoved;
    82       foreach (var enc in encoding.Encodings)
    83         enc.OperatorsChanged -= Encoding_OperatorsChanged;
    84     }
    85 
    86     private void EncodingsOnItemsChanged(object sender, CollectionItemsChangedEventArgs<IEncoding> e) {
    87       foreach (var enc in e.Items)
    88         AddEncoding(enc);
    89       foreach (var enc in e.OldItems)
    90         RemoveEncoding(enc);
    91     }
    92 
    93     private void EncodingsOnItemsRemoved(object sender, CollectionItemsChangedEventArgs<IEncoding> e) {
    94       foreach (var enc in e.Items)
    95         RemoveEncoding(enc);
     46      Parameters.Add(new LookupParameter<CombinedSolution>("Solution", "The solution that gets created."));
     47      Parameters.Add(new LookupParameter<IEncoding<CombinedSolution>>("Encoding", "The encoding."));
    9648    }
    9749
     
    10153    }
    10254
    103     protected virtual void AddEncoding(IEncoding encoding) {
     55    public virtual void AddEncoding(IEncoding encoding) {
    10456      if (Parameters.ContainsKey(encoding.Name)) throw new ArgumentException(string.Format("Encoding {0} was already added.", encoding.Name));
    10557
     
    11163    }
    11264
    113     protected virtual bool RemoveEncoding(IEncoding encoding) {
     65    public virtual bool RemoveEncoding(IEncoding encoding) {
    11466      if (!Parameters.ContainsKey(encoding.Name)) throw new ArgumentException(string.Format("Encoding {0} was not added to the MultiEncoding.", encoding.Name));
    11567      encoding.OperatorsChanged -= Encoding_OperatorsChanged;
Note: See TracChangeset for help on using the changeset viewer.