Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
01/14/19 22:33:44 (5 years ago)
Author:
abeham
Message:

#2521: reverted r14429

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2521_ProblemRefactoring/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Crossovers/NPointCrossover.cs

    r14429 r16532  
    2525using HeuristicLab.Core;
    2626using HeuristicLab.Data;
    27 using HeuristicLab.Optimization;
    2827using HeuristicLab.Parameters;
    2928using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     
    7170    /// <param name="n">Number of crossover points.</param>
    7271    /// <returns>The newly created binary vector, resulting from the N point crossover.</returns>
    73     public static BinaryVector Apply(IRandom random, BinaryVector parent1, BinaryVector parent2, int n) {
     72    public static BinaryVector Apply(IRandom random, BinaryVector parent1, BinaryVector parent2, IntValue n) {
    7473      if (parent1.Length != parent2.Length)
    7574        throw new ArgumentException("NPointCrossover: The parents are of different length.");
    7675
    77       if (n > parent1.Length)
     76      if (n.Value > parent1.Length)
    7877        throw new ArgumentException("NPointCrossover: There cannot be more breakpoints than the size of the parents.");
    7978
    80       if (n < 1)
     79      if (n.Value < 1)
    8180        throw new ArgumentException("NPointCrossover: N cannot be < 1.");
    8281
    8382      int length = parent1.Length;
    8483      bool[] result = new bool[length];
    85       int[] breakpoints = new int[n];
     84      int[] breakpoints = new int[n.Value];
    8685
    8786      //choose break points
     
    9190        breakpointPool.Add(i);
    9291
    93       for (int i = 0; i < n; i++) {
     92      for (int i = 0; i < n.Value; i++) {
    9493        int index = random.Next(breakpointPool.Count);
    9594        breakpoints[i] = breakpointPool[index];
     
    138137      if (NParameter.ActualValue == null) throw new InvalidOperationException("NPointCrossover: Parameter " + NParameter.ActualName + " could not be found.");
    139138
    140       return Apply(random, parents[0], parents[1], NParameter.ActualValue.Value);
    141     }
    142   }
    143 
    144   [Item("N-point Crossover", "", ExcludeGenericTypeInfo = true)]
    145   [StorableClass]
    146   public sealed class NPointCrossover<TContext> : ParameterizedNamedItem, IBinaryCrossover<TContext>
    147     where TContext : IMatingContext<BinaryVector>, IStochasticContext {
    148 
    149     [Storable]
    150     private IValueParameter<IntValue> nparameter;
    151     public int N {
    152       get { return nparameter.Value.Value; }
    153       set {
    154         if (value < 1) throw new ArgumentException("Cannot set N to less than 1.");
    155         nparameter.Value.Value = value;
    156       }
    157     }
    158 
    159     [StorableConstructor]
    160     private NPointCrossover(bool deserializing) : base(deserializing) { }
    161     private NPointCrossover(NPointCrossover<TContext> original, Cloner cloner)
    162       : base(original, cloner) {
    163       nparameter = cloner.Clone(original.nparameter);
    164     }
    165     public NPointCrossover() {
    166       Parameters.Add(nparameter = new ValueParameter<IntValue>("N", "The number of crossover points.", new IntValue(1)));
    167     }
    168 
    169 
    170     public override IDeepCloneable Clone(Cloner cloner) {
    171       return new NPointCrossover<TContext>(this, cloner);
    172     }
    173 
    174     public void Cross(TContext context) {
    175       context.Child.Solution = NPointCrossover.Apply(context.Random, context.Parents.Item1.Solution, context.Parents.Item2.Solution, N);
     139      return Apply(random, parents[0], parents[1], NParameter.ActualValue);
    176140    }
    177141  }
Note: See TracChangeset for help on using the changeset viewer.