Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
12/12/16 13:53:16 (7 years ago)
Author:
sraggl
Message:

#2666
Updated LinearLinkageEncoding by:

  • Speeding up GroupCrossover and SetGroups and GetGroups
  • making Constructor private adding static initializer Methods
Location:
trunk/sources/HeuristicLab.Encodings.LinearLinkageEncoding/3.3/Crossovers
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Encodings.LinearLinkageEncoding/3.3/Crossovers/GreedyPartitionCrossover.cs

    r14185 r14475  
    4444    public static LinearLinkage Apply(IRandom random, ItemArray<LinearLinkage> parents) {
    4545      var len = parents[0].Length;
    46 
    47       var child = new LinearLinkage(len);
    4846      var childGroup = new List<HashSet<int>>();
    4947      var currentParent = random.Next(parents.Length);
     
    6967      } while (remaining);
    7068
    71       child.SetGroups(childGroup);
    72       return child;
     69      return LinearLinkage.FromGroups(len, childGroup);
    7370    }
    7471
  • trunk/sources/HeuristicLab.Encodings.LinearLinkageEncoding/3.3/Crossovers/GroupCrossover.cs

    r14185 r14475  
    3939      return new GroupCrossover(this, cloner);
    4040    }
    41 
     41   
    4242    public static LinearLinkage Apply(IRandom random, LinearLinkage p1, LinearLinkage p2) {
    4343      var length = p1.Length;
    44       var child = new LinearLinkage(length);
    45       var endNodes = new HashSet<int>();
    46       for (var i = 0; i < length; i++) {
    47         if ((p1[i] == i && p2[i] == i)
    48           || ((p1[i] == i || p2[i] == i) && random.NextDouble() < 0.5)) {
    49           child[i] = i;
    50           endNodes.Add(i);
     44      var lleeP1 = p1.ToEndLinks();
     45      var lleeP2 = p2.ToEndLinks();
     46      var lleeChild = new int[length];
     47      var isTransfered = new bool[length];
     48
     49      for (var i = p1.Length - 1; i >= 0; i--) {
     50        lleeChild[i] = i;
     51
     52        // Step 1
     53        var isEndP1 = p1[i] == i;
     54        var isEndP2 = p2[i] == i;
     55        if (isEndP1 & isEndP2 || (isEndP1 | isEndP2 && random.NextDouble() < 0.5)) {
     56          isTransfered[i] = true;
     57          continue;
     58        }
     59
     60        // Step 2
     61        var end1 = lleeP1[i];
     62        var end2 = lleeP2[i];
     63
     64        if (isTransfered[end1] & isTransfered[end2]) {
     65          var end = random.NextDouble() < 0.5 ? end1 : end2;
     66          lleeChild[i] = end;
     67        } else if (isTransfered[end1]) {
     68          lleeChild[i] = end1;
     69        } else if (isTransfered[end2]) {
     70          lleeChild[i] = end2;
     71        } else {
     72          var next = random.NextDouble() < 0.5 ? p1[i] : p2[i];
     73          var end = lleeChild[next];
     74          lleeChild[i] = end;
    5175        }
    5276      }
    53       for (var i = 0; i < length; i++) {
    54         if (endNodes.Contains(i)) continue;
    55         var p1End = endNodes.Contains(p1[i]);
    56         var p2End = endNodes.Contains(p2[i]);
    57         if ((p1End && p2End) || (!p1End && !p2End)) {
    58           child[i] = random.NextDouble() < 0.5 ? p1[i] : p2[i];
    59         } else if (p1End) {
    60           child[i] = p1[i];
    61         } else {
    62           child[i] = p2[i];
    63         }
    64       }
    65       child.LinearizeTreeStructures();
    66       return child;
     77      return LinearLinkage.FromEndLinks(lleeChild);
    6778    }
    6879
  • trunk/sources/HeuristicLab.Encodings.LinearLinkageEncoding/3.3/Crossovers/LowestIndexFirstCrossover.cs

    r14185 r14475  
    4343      var len = parents[0].Length;
    4444      var p = random.Next(parents.Length);
    45       var child = new LinearLinkage(len);
     45      var child = LinearLinkage.SingleElementGroups(len);
    4646      var remaining = new SortedSet<int>(Enumerable.Range(0, len));
    4747      do {
  • trunk/sources/HeuristicLab.Encodings.LinearLinkageEncoding/3.3/Crossovers/LowestIndexMaxCrossover.cs

    r14185 r14475  
    4444    public static LinearLinkage Apply(IRandom random, ItemArray<LinearLinkage> parents) {
    4545      var len = parents[0].Length;
    46       var child = new LinearLinkage(len);
     46      var child = LinearLinkage.SingleElementGroups(len);
    4747      var remaining = new SortedSet<int>(Enumerable.Range(0, len));
    4848      do {
  • trunk/sources/HeuristicLab.Encodings.LinearLinkageEncoding/3.3/Crossovers/SinglePointCrossover.cs

    r14185 r14475  
    4141    public static LinearLinkage Apply(IRandom random, LinearLinkage p1, LinearLinkage p2) {
    4242      var length = p1.Length;
    43       var child = new LinearLinkage(length);
     43      var child = LinearLinkage.SingleElementGroups(length);
    4444      var bp = random.Next(length - 1);
    4545      for (var i = 0; i <= bp; i++) child[i] = p1[i];
Note: See TracChangeset for help on using the changeset viewer.