Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
03/15/11 13:34:38 (13 years ago)
Author:
mkommend
Message:

#1418: Finally added results from the grammar refactoring.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/DataAnalysis Refactoring/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Crossovers/SubtreeCrossover.cs

    r5549 r5686  
    120120      // check syntax constraints of direct parent - child relation
    121121      if (!parent.Grammar.ContainsSymbol(branch.Symbol) ||
    122           !parent.Grammar.IsAllowedChild(parent.Symbol, branch.Symbol, replacedSubtreeIndex)) return false;
     122          !parent.Grammar.IsAllowedChildSymbol(parent.Symbol, branch.Symbol, replacedSubtreeIndex)) return false;
    123123
    124124      bool result = true;
     
    128128          result &&
    129129          parent.Grammar.ContainsSymbol(n.Symbol) &&
    130           n.SubTrees.Count() >= parent.Grammar.GetMinSubtreeCount(n.Symbol) &&
    131           n.SubTrees.Count() <= parent.Grammar.GetMaxSubtreeCount(n.Symbol);
     130          n.SubtreesCount >= parent.Grammar.GetMinimumSubtreeCount(n.Symbol) &&
     131          n.SubtreesCount <= parent.Grammar.GetMaximumSubtreeCount(n.Symbol);
    132132      });
    133133      return result;
     
    136136    private static void SelectCrossoverPoint(IRandom random, ISymbolicExpressionTree parent0, double internalNodeProbability, int maxBranchLength, int maxBranchDepth, out ISymbolicExpressionTreeNode crossoverPoint, out int subtreeIndex) {
    137137      if (internalNodeProbability < 0.0 || internalNodeProbability > 1.0) throw new ArgumentException("internalNodeProbability");
    138       List<CrossoverPoint> internalCrossoverPoints = new List<CrossoverPoint>();
    139       List<CrossoverPoint> leafCrossoverPoints = new List<CrossoverPoint>();
     138      List<CutPoint> internalCrossoverPoints = new List<CutPoint>();
     139      List<CutPoint> leafCrossoverPoints = new List<CutPoint>();
    140140      parent0.Root.ForEachNodePostfix((n) => {
    141         if (n.SubTrees.Count() > 0 && n != parent0.Root) {
     141        if (n.SubTrees.Any() && n != parent0.Root) {
    142142          foreach (var child in n.SubTrees) {
    143143            if (child.GetLength() <= maxBranchLength &&
    144144                child.GetDepth() <= maxBranchDepth) {
    145               if (child.SubTrees.Count() > 0)
    146                 internalCrossoverPoints.Add(new CrossoverPoint(n, child));
     145              if (child.SubTrees.Any())
     146                internalCrossoverPoints.Add(new CutPoint(n, child));
    147147              else
    148                 leafCrossoverPoints.Add(new CrossoverPoint(n, child));
     148                leafCrossoverPoints.Add(new CutPoint(n, child));
    149149            }
    150150          }
     
    158158          var selectedCrossoverPoint = internalCrossoverPoints[random.Next(internalCrossoverPoints.Count)];
    159159          crossoverPoint = selectedCrossoverPoint.Parent;
    160           subtreeIndex = selectedCrossoverPoint.SubtreeIndex;
     160          subtreeIndex = selectedCrossoverPoint.ChildIndex;
    161161        } else {
    162162          // otherwise select external node
    163163          var selectedCrossoverPoint = leafCrossoverPoints[random.Next(leafCrossoverPoints.Count)];
    164164          crossoverPoint = selectedCrossoverPoint.Parent;
    165           subtreeIndex = selectedCrossoverPoint.SubtreeIndex;
     165          subtreeIndex = selectedCrossoverPoint.ChildIndex;
    166166        }
    167167      } else if (leafCrossoverPoints.Count > 0) {
     
    169169        var selectedCrossoverPoint = leafCrossoverPoints[random.Next(leafCrossoverPoints.Count)];
    170170        crossoverPoint = selectedCrossoverPoint.Parent;
    171         subtreeIndex = selectedCrossoverPoint.SubtreeIndex;
     171        subtreeIndex = selectedCrossoverPoint.ChildIndex;
    172172      } else {
    173173        // otherwise select internal crossover point
    174174        var selectedCrossoverPoint = internalCrossoverPoints[random.Next(internalCrossoverPoints.Count)];
    175175        crossoverPoint = selectedCrossoverPoint.Parent;
    176         subtreeIndex = selectedCrossoverPoint.SubtreeIndex;
     176        subtreeIndex = selectedCrossoverPoint.ChildIndex;
    177177      }
    178178    }
     
    185185        // select internal node if possible
    186186        allowedInternalBranches = (from branch in branches
    187                                    where branch.SubTrees.Count() > 0
     187                                   where branch.SubTrees.Any()
    188188                                   select branch).ToList();
    189189        if (allowedInternalBranches.Count > 0) {
     
    192192          // no internal nodes allowed => select leaf nodes
    193193          allowedLeafBranches = (from branch in branches
    194                                  where branch.SubTrees.Count() == 0
     194                                 where !branch.SubTrees.Any()
    195195                                 select branch).ToList();
    196196          return allowedLeafBranches.SelectRandom(random);
     
    199199        // select leaf node if possible
    200200        allowedLeafBranches = (from branch in branches
    201                                where branch.SubTrees.Count() == 0
     201                               where !branch.SubTrees.Any()
    202202                               select branch).ToList();
    203203        if (allowedLeafBranches.Count > 0) {
     
    205205        } else {
    206206          allowedInternalBranches = (from branch in branches
    207                                      where branch.SubTrees.Count() > 0
     207                                     where branch.SubTrees.Any()
    208208                                     select branch).ToList();
    209209          return allowedInternalBranches.SelectRandom(random);
Note: See TracChangeset for help on using the changeset viewer.