Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
12/02/14 11:44:18 (9 years ago)
Author:
mkommend
Message:

#2174: Refactored individuals.

Location:
branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Individuals
Files:
1 added
1 moved

Legend:

Unmodified
Added
Removed
  • branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Individuals/MultiEncodingIndividual.cs

    r11599 r11619  
    2323using System.Collections.Generic;
    2424using System.Linq;
    25 using System.Text;
    26 using HeuristicLab.Common;
    2725using HeuristicLab.Core;
    28 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2926
    30 namespace HeuristicLab.Problems.Programmable.Encodings {
     27namespace HeuristicLab.Problems.Programmable {
    3128  public sealed class MultiEncodingIndividual : Individual {
    3229    public new MultiEncoding Encoding {
     
    3431    }
    3532
    36     public MultiEncodingIndividual(IEncoding encoding, IScope scope)
     33    private readonly IEnumerable<Individual> individuals;
     34    public MultiEncodingIndividual(MultiEncoding encoding, IScope scope)
    3735      : base(encoding, scope) {
    38       if (encoding.GetType() != typeof(MultiEncoding))
    39         throw new ArgumentException("Encoding must be of type MultiEncoding.k");
     36      individuals = encoding.Encodings.Select(e => e.GetIndividual(scope)).ToArray();
    4037    }
    4138
    42     [StorableConstructor]
    43     private MultiEncodingIndividual(bool deserializing) : base(deserializing) { }
     39    private MultiEncodingIndividual(MultiEncoding encoding, IScope scope, IEnumerable<Individual> individuals)
     40      : base(encoding, scope) {
     41      this.individuals = individuals;
     42    }
    4443
    45     public override IDeepCloneable Clone(Cloner cloner) { return new MultiEncodingIndividual(this, cloner); }
    46     private MultiEncodingIndividual(Individual original, Cloner cloner) : base(original, cloner) { }
    4744
    4845    public override IItem this[string name] {
    4946      get {
    50         var encoding = Encoding.Encodings.FirstOrDefault(e => e.Name == name);
    51         if (encoding == null) throw new ArgumentException(string.Format("{0} is not part of the specified encoding.", name));
    52         return ExtractScopeValue(name, encoding.Name, Scope);
     47        var individual = individuals.FirstOrDefault(i => i.Name == name);
     48        if (individual == null) throw new ArgumentException(string.Format("{0} is not part of the specified encoding.", name));
     49        return individual[name];
    5350      }
    5451      set {
    55         var encoding = Encoding.Encodings.FirstOrDefault(e => e.Name == name);
    56         if (encoding == null) throw new ArgumentException(string.Format("{0} is not part of the specified encoding.", name));
    57         SetScopeValue(name, encoding.Name, Scope, value);
     52        var individual = individuals.FirstOrDefault(i => i.Name == name);
     53        if (individual == null) throw new ArgumentException(string.Format("{0} is not part of the specified encoding.", name));
     54        individual[name] = value;
    5855      }
    5956    }
    6057
    6158    internal override Individual Copy(IScope scope) {
    62       var individual = Encoding.CreateIndividual(scope);
    63       foreach (var encoding in Encoding.Encodings)
    64         individual[encoding.Name] = this[encoding.Name];
    65       return individual;
     59      var copies = individuals.Select(i => i.Copy(scope)).ToArray();
     60      return new MultiEncodingIndividual(Encoding, scope, copies);
    6661    }
    6762  }
Note: See TracChangeset for help on using the changeset viewer.