Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
04/19/17 14:42:41 (7 years ago)
Author:
mkommend
Message:

#2774: Allowed storing additional data in the scope of an individual.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Optimization/3.3/BasicProblems/Individuals/MultiEncodingIndividual.cs

    r14185 r14877  
    3232    }
    3333
    34     private readonly IEnumerable<Individual> individuals;
     34    public MultiEncodingIndividual(MultiEncoding encoding, IScope scope)
     35      : base(encoding, scope) { }
    3536
    36     public MultiEncodingIndividual(MultiEncoding encoding, IScope scope)
    37       : base(encoding, scope) {
    38       individuals = encoding.Encodings.Select(e => e.GetIndividual(scope)).ToArray();
     37    private MultiEncodingIndividual(MultiEncodingIndividual copy) : base(copy.Encoding, new Scope()) {
     38      copy.CopyToScope(Scope);
    3939    }
    40 
    41     private MultiEncodingIndividual(MultiEncoding encoding, IScope scope, IEnumerable<Individual> individuals)
    42       : base(encoding, scope) {
    43       this.individuals = individuals;
    44     }
    45 
    46 
    47     public override IItem this[string name] {
    48       get {
    49         var individual = individuals.SingleOrDefault(i => i.Name == name);
    50         if (individual == null) throw new ArgumentException(string.Format("{0} is not part of the specified encoding.", name));
    51         return individual[name];
    52       }
    53       set {
    54         var individual = individuals.SingleOrDefault(i => i.Name == name);
    55         if (individual == null) throw new ArgumentException(string.Format("{0} is not part of the specified encoding.", name));
    56         individual[name] = value;
    57       }
     40    public override Individual Copy() {
     41      return new MultiEncodingIndividual(this);
    5842    }
    5943
     
    6246      try {
    6347        encoding = (TEncoding)Encoding.Encodings.SingleOrDefault(e => e is TEncoding);
    64       } catch (InvalidOperationException) {
     48      }
     49      catch (InvalidOperationException) {
    6550        throw new InvalidOperationException(string.Format("The individual uses multiple {0} .", typeof(TEncoding).GetPrettyName()));
    6651      }
     
    6853      return encoding;
    6954    }
    70 
    71     public override Individual CopyToScope(IScope scope) {
    72       var copies = individuals.Select(i => i.CopyToScope(scope)).ToArray();
    73       return new MultiEncodingIndividual(Encoding, scope, copies);
    74     }
    7555  }
    7656}
Note: See TracChangeset for help on using the changeset viewer.