Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
06/15/14 23:52:13 (10 years ago)
Author:
bburlacu
Message:

#1772: Made some progress with the BottomUpDistanceCalculator, still not entirely correct.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.EvolutionTracking/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/TreeDistance/BottomUpDistanceCalculator.cs

    r11015 r11016  
    4040      foreach (var l in F.Nodes.Where(x => x.SubtreeCount == 0)) {
    4141        var z = new Vertex { Content = l, Label = Label(l) };
    42         z.Weight = Height(l); // might be necessary
    43         L[z.Label] = z;
     42        //        z.Weight = Height(l); // might be necessary (although not specified in the paper)
     43        //        if (!L.ContainsKey(z.Label))
     44        L[z.Label] = z; // will overwrite key values, possible bug
    4445        G.AddVertex(z);
    4546      }
     
    5152        }
    5253      }
    53       do {
     54      while (Q.Any()) {
    5455        var v = Q.Dequeue();
    5556        if (v.SubtreeCount == 0) {
     
    6162            if (Height(v) != Height(w) || v.SubtreeCount != w.OutDegree || Label(v) != w.Label)
    6263              break;
     64
    6365            // sort the lists before comparison, as required when dealing with unordered trees
    64             var V = v.Subtrees.OrderBy(Label).Select(s => K[s]);
     66            var V = v.Subtrees.Select(s => K[s]).OrderBy(x => x.Label);
    6567            var W = w.OutArcs.Select(x => x.Target).OrderBy(x => x.Label);
    6668            if (V.SequenceEqual(W)) {
     
    7375          if (!found) {
    7476            var w = new Vertex { Content = v, Label = Label(v), Weight = Height(v) };
     77            G.AddVertex(w);
    7578            K[v] = w;
    7679
     
    8790          } // 47: end if
    8891        } // 48: end if
    89       } while (Q.Count != 0);
     92      };
    9093      return K;
    9194    }
     
    168171
    169172      public IEnumerable<ISymbolicExpressionTreeNode> Nodes {
    170         get { return Item1.IterateNodesPrefix().Concat(Item2.IterateNodesPrefix()); }
     173        get {
     174          var nodes1 = Item1.Root.IterateNodesBreadth().Reverse();
     175          var nodes2 = Item2.Root.IterateNodesBreadth().Reverse();
     176
     177          return nodes1.Concat(nodes2);
     178
     179          //          var nodes =
     180          //            nodes1.Select(n => new { Node = n, Height = Item1.Root.GetBranchLevel(n) })
     181          //              .Concat(nodes2.Select(n => new { Node = n, Height = Item2.Root.GetBranchLevel(n) }))
     182          //              .OrderByDescending(x => x.Height)
     183          //              .Select(x => x.Node);
     184          //
     185          //          return nodes;
     186          //          //          var list = new List<ISymbolicExpressionTreeNode> { Item1.Root, Item2.Root };
     187          //          //          int i = 0;
     188          //          //          while (i != list.Count) {
     189          //          //            var node = list[i];
     190          //          //            if (node.SubtreeCount > 0) {
     191          //          //              list.AddRange(node.Subtrees);
     192          //          //            }
     193          //          //            ++i;
     194          //          //          }
     195          //          //          list.Reverse(); // return nodes in order of decreasing height
     196          //          //          return list;
     197        }
    171198      }
    172199
Note: See TracChangeset for help on using the changeset viewer.