Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
07/26/10 16:18:45 (14 years ago)
Author:
gkronber
Message:

Fixed bugs in SubtreeCrossover, ArgumentCreater and ArgumentDuplicater and updated unit tests for symbolic expression tree operators. #1103

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.3/SymbolicExpressionTreeNode.cs

    r4068 r4106  
    5151    }
    5252
    53     public SymbolicExpressionTreeNode() {
     53    internal SymbolicExpressionTreeNode() {
    5454      // don't allocate subtrees list here!
    5555      // because we don't want to allocate it in terminal nodes
     
    8585    }
    8686
    87     internal virtual ISymbolicExpressionGrammar Grammar {
     87    public virtual ISymbolicExpressionGrammar Grammar {
    8888      get { return parent.Grammar; }
    8989      set { throw new NotSupportedException("Grammar can be set only for SymbolicExpressionTreeTopLevelNodes."); }
     
    9494      else {
    9595        size = 1;
    96         for (int i = 0; i < SubTrees.Count; i++) size += (short)SubTrees[i].GetSize();
     96        if (SubTrees != null) {
     97          for (int i = 0; i < SubTrees.Count; i++) size += (short)SubTrees[i].GetSize();
     98        }
    9799        return size;
    98100      }
     
    102104      if (height > 0) return height;
    103105      else {
    104         for (int i = 0; i < SubTrees.Count; i++) height = Math.Max(height, (short)SubTrees[i].GetHeight());
     106        if (SubTrees != null) {
     107          for (int i = 0; i < SubTrees.Count; i++) height = Math.Max(height, (short)SubTrees[i].GetHeight());
     108        }
    105109        height++;
    106110        return height;
     
    112116
    113117    public virtual void AddSubTree(SymbolicExpressionTreeNode tree) {
    114       subTrees.Add(tree);
     118      SubTrees.Add(tree);
    115119      tree.Parent = this;
    116120      ResetCachedValues();
     
    118122
    119123    public virtual void InsertSubTree(int index, SymbolicExpressionTreeNode tree) {
    120       subTrees.Insert(index, tree);
     124      SubTrees.Insert(index, tree);
    121125      tree.Parent = this;
    122126      ResetCachedValues();
     
    124128
    125129    public virtual void RemoveSubTree(int index) {
    126       subTrees[index].Parent = null;
    127       subTrees.RemoveAt(index);
     130      SubTrees[index].Parent = null;
     131      SubTrees.RemoveAt(index);
    128132      ResetCachedValues();
    129133    }
     
    137141    public void ForEachNodePrefix(Action<SymbolicExpressionTreeNode> a) {
    138142      a(this);
    139       for (int i = 0; i < SubTrees.Count; i++) {
    140         SubTrees[i].ForEachNodePrefix(a);
     143      if (SubTrees != null) {
     144        for (int i = 0; i < SubTrees.Count; i++) {
     145          SubTrees[i].ForEachNodePrefix(a);
     146        }
    141147      }
    142148    }
     
    149155
    150156    public void ForEachNodePostfix(Action<SymbolicExpressionTreeNode> a) {
    151       for (int i = 0; i < SubTrees.Count; i++) {
    152         SubTrees[i].ForEachNodePrefix(a);
     157      if (SubTrees != null) {
     158        for (int i = 0; i < SubTrees.Count; i++) {
     159          SubTrees[i].ForEachNodePostfix(a);
     160        }
    153161      }
    154162      a(this);
Note: See TracChangeset for help on using the changeset viewer.