Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
05/10/12 17:17:14 (12 years ago)
Author:
bburlacu
Message:

#1772: Changelog:

  • Removed GetCutIndex method, and corresponding index field in the GenealogyGraphNode.
  • Implemented tracking for mutated fragments.
  • Improved FindMatch method.
  • Added IterateNodesBreadth functionality to symbolic expression trees and nodes.
  • Added check conditions for clearing global tracking structures so that the 2 analyzers are not mutually exclusive anymore.
Location:
branches/HeuristicLab.EvolutionaryTracking/HeuristicLab.EvolutionaryTracking.Views/3.4
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.EvolutionaryTracking/HeuristicLab.EvolutionaryTracking.Views/3.4/GenealogyGraphChart.cs

    r7785 r7792  
    114114              style = DashStyle.Dash;
    115115            } else {
    116               style = arc.OperatorType == 0 ? DashStyle.Solid : DashStyle.Dash;
     116              style = node.InEdges.Count == 2 ? DashStyle.Solid : DashStyle.Dash;
    117117            }
    118118            var arcPen = new Pen(Color.Transparent) { DashStyle = style };
     
    183183                var end = new Point((int)arc.End.X, (int)arc.End.Y);
    184184                arc.Pen.Brush = new LinearGradientBrush(start, end, arc.Source.ToColor(), arc.Target.ToColor());
    185                 if (node.Data.CutpointIndex == -1) {
    186                   // if the cut index wasn't computed yet
    187                   var parent = arc.Source.Data.Data as ISymbolicExpressionTree;
    188                   var child = node.Data.Data as ISymbolicExpressionTree;
    189                   node.Data.CutpointIndex = GetCutIndex(parent, child);
    190                 }
    191185              }
    192186            }
     
    236230      Chart.EnforceUpdate();
    237231    }
    238 
    239     // maybe this method does't belong here
    240     // TODO: find a good location for this kind of functionality
    241     private static int GetCutIndex(ISymbolicExpressionTree parent, ISymbolicExpressionTree child) {
    242       var e1 = parent.IterateNodesPostfix().GetEnumerator();
    243       var e2 = child.IterateNodesPostfix().GetEnumerator();
    244       int pos = 0;
    245       var comparer = new SymbolicExpressionTreeNodeComparer((int)SymbolicExpressionTreeMatching.SimilarityLevel.Exact);
    246       while (e1.MoveNext() && e2.MoveNext() && comparer.Equals(e1.Current, e2.Current)) ++pos;
    247       if (pos == 0) return -1;
    248       if (pos == child.Length) return 0;
    249       return pos;
    250       //return pos == 0 ? -1 : pos;
    251     }
    252232  }
    253233}
  • branches/HeuristicLab.EvolutionaryTracking/HeuristicLab.EvolutionaryTracking.Views/3.4/GenealogyGraphView.cs

    r7785 r7792  
    2121
    2222using System;
     23using System.Collections.Generic;
    2324using System.Drawing;
    2425using System.Linq;
     
    9293      symbolicExpressionTreeChart.Tree = (ISymbolicExpressionTree)genealogyGraphNode.Data;
    9394      if (_selectedVisualSymbolicExpressionTreeNode != null) {
    94         var nodes = symbolicExpressionTreeChart.Tree.IterateNodesPostfix().ToArray();
    95         var fragments = _selectedVisualSymbolicExpressionTreeNode.SymbolicExpressionTreeNode.IterateNodesPostfix().ToArray();
     95        var nodes = symbolicExpressionTreeChart.Tree.IterateNodesBreadth() as List<ISymbolicExpressionTreeNode>;
     96        var fragments = _selectedVisualSymbolicExpressionTreeNode.SymbolicExpressionTreeNode.IterateNodesBreadth() as List<ISymbolicExpressionTreeNode>;
    9697        int index = SymbolicExpressionTreeMatching.FindMatch(nodes, fragments, similarityModeSelector.SelectedIndex);
    9798        if (index != -1) {
    98           _selectedVisualSymbolicExpressionTreeNode = symbolicExpressionTreeChart.GetVisualSymbolicExpressionTreeNode(nodes[index + fragments.Count() - 1]);
     99          _selectedVisualSymbolicExpressionTreeNode = symbolicExpressionTreeChart.GetVisualSymbolicExpressionTreeNode(nodes[index + fragments.Count - 1]);
    99100          var subtree = _selectedVisualSymbolicExpressionTreeNode.SymbolicExpressionTreeNode;
    100101          foreach (var visualNode in subtree.IterateNodesPostfix().Select(node => symbolicExpressionTreeChart.GetVisualSymbolicExpressionTreeNode(node))) {
     
    104105        }
    105106      }
    106       // the cutpoint index represents the index of the node/subtree (when the tree is enumerated in postfix order)
    107       // that was changed (by mutation) or received from a parent (by crossover)
    108       if (visualGenealogyGraphNode.Data.CutpointIndex != -1) {
    109         var gNode = visualGenealogyGraphNode.Data;
    110         var symbExprTree = gNode.Data as ISymbolicExpressionTree;
    111         if (symbExprTree == null) return;
    112         var nodes = symbExprTree.IterateNodesPostfix();
    113         var fragment = nodes.ElementAt(gNode.CutpointIndex);
    114         if (fragment != null) foreach (var node in fragment.IterateNodesPostfix()) {
    115             var visualNode = symbolicExpressionTreeChart.GetVisualSymbolicExpressionTreeNode(node);
    116             visualNode.FillColor = Color.LightPink;
    117           }
    118         symbolicExpressionTreeChart.Repaint();
    119       }
     107      // what's left to be done here is to:
     108      // - get the symbolic expression tree
     109      // - get the corresponding fragment
     110      // - for all symbolic expression tree nodes in the fragment, colorize the corresponding visual nodes
     111      // - repaint the tree
    120112    }
    121113
Note: See TracChangeset for help on using the changeset viewer.