Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
11/29/16 15:46:48 (8 years ago)
Author:
abeham
Message:

#2701, #2708: Made a new branch from ProblemRefactoring and removed ScopedBasicAlgorithm branch (which becomes MemPR branch)

Location:
branches/ProblemRefactoring/HeuristicLab.Encodings.BinaryVectorEncoding/3.3
Files:
6 added
4 edited

Legend:

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

    r12012 r14429  
    2525using HeuristicLab.Core;
    2626using HeuristicLab.Data;
     27using HeuristicLab.Optimization;
    2728using HeuristicLab.Parameters;
    2829using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     
    7071    /// <param name="n">Number of crossover points.</param>
    7172    /// <returns>The newly created binary vector, resulting from the N point crossover.</returns>
    72     public static BinaryVector Apply(IRandom random, BinaryVector parent1, BinaryVector parent2, IntValue n) {
     73    public static BinaryVector Apply(IRandom random, BinaryVector parent1, BinaryVector parent2, int n) {
    7374      if (parent1.Length != parent2.Length)
    7475        throw new ArgumentException("NPointCrossover: The parents are of different length.");
    7576
    76       if (n.Value > parent1.Length)
     77      if (n > parent1.Length)
    7778        throw new ArgumentException("NPointCrossover: There cannot be more breakpoints than the size of the parents.");
    7879
    79       if (n.Value < 1)
     80      if (n < 1)
    8081        throw new ArgumentException("NPointCrossover: N cannot be < 1.");
    8182
    8283      int length = parent1.Length;
    8384      bool[] result = new bool[length];
    84       int[] breakpoints = new int[n.Value];
     85      int[] breakpoints = new int[n];
    8586
    8687      //choose break points
     
    9091        breakpointPool.Add(i);
    9192
    92       for (int i = 0; i < n.Value; i++) {
     93      for (int i = 0; i < n; i++) {
    9394        int index = random.Next(breakpointPool.Count);
    9495        breakpoints[i] = breakpointPool[index];
     
    137138      if (NParameter.ActualValue == null) throw new InvalidOperationException("NPointCrossover: Parameter " + NParameter.ActualName + " could not be found.");
    138139
    139       return Apply(random, parents[0], parents[1], NParameter.ActualValue);
     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);
    140176    }
    141177  }
  • branches/ProblemRefactoring/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Crossovers/SinglePointCrossover.cs

    r12012 r14429  
    5757      if (parents.Length != 2) throw new ArgumentException("ERROR in SinglePointCrossover: The number of parents is not equal to 2");
    5858
    59       return NPointCrossover.Apply(random, parents[0], parents[1], new IntValue(1));
     59      return NPointCrossover.Apply(random, parents[0], parents[1], 1);
    6060    }
    6161  }
  • branches/ProblemRefactoring/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/HeuristicLab.Encodings.BinaryVectorEncoding-3.3.csproj

    r13404 r14429  
    126126    <Compile Include="Crossovers\NPointCrossover.cs" />
    127127    <Compile Include="BinaryVector.cs" />
     128    <Compile Include="Interfaces\IBinaryLocalSearch.cs" />
    128129    <Compile Include="Interfaces\IBinaryVectorMultiNeighborhoodShakingOperator.cs" />
    129130    <Compile Include="Interfaces\IBinaryVectorSolutionsOperator.cs" />
     
    139140    <Compile Include="BinaryVectorManipulator.cs" />
    140141    <Compile Include="Interfaces\IBinaryVectorMoveOperator.cs" />
     142    <Compile Include="LocalSearch\ExhaustiveBitflip.cs" />
     143    <Compile Include="Manipulators\MultiBitflipManipulator.cs" />
     144    <Compile Include="Manipulators\SingleBitflipManipulator.cs" />
     145    <Compile Include="Manipulators\BitflipManipulator.cs" />
    141146    <Compile Include="Manipulators\SomePositionsBitflipManipulator.cs" />
    142147    <Compile Include="Manipulators\SinglePositionBitflipManipulator.cs" />
     
    205210      <Name>HeuristicLab.PluginInfrastructure-3.3</Name>
    206211      <Private>False</Private>
     212    </ProjectReference>
     213    <ProjectReference Include="..\..\HeuristicLab.Random\3.3\HeuristicLab.Random-3.3.csproj">
     214      <Project>{F4539FB6-4708-40C9-BE64-0A1390AEA197}</Project>
     215      <Name>HeuristicLab.Random-3.3</Name>
    207216    </ProjectReference>
    208217  </ItemGroup>
  • branches/ProblemRefactoring/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/Interfaces/IBinaryVectorCrossover.cs

    r12012 r14429  
    2222using HeuristicLab.Core;
    2323using HeuristicLab.Optimization;
     24using HeuristicLab.Optimization.Crossover;
    2425
    2526namespace HeuristicLab.Encodings.BinaryVectorEncoding {
     
    3132    ILookupParameter<BinaryVector> ChildParameter { get; }
    3233  }
     34
     35  // TODO: probably unecessary
     36  public interface IBinaryCrossover<TContext> : ICrossover<TContext> { }
    3337}
Note: See TracChangeset for help on using the changeset viewer.