Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
04/13/11 16:02:40 (13 years ago)
Author:
gkronber
Message:

#1472 implemented a check in PTC2 operator, fixed bugs in SymbolicExpressionGrammarBase and made some small changes in both classes to prevent numeric overflow exceptions.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Creators/ProbabilisticTreeCreator.cs

    r5925 r6009  
    103103    public static void PTC2(IRandom random, ISymbolicExpressionTreeNode seedNode,
    104104      int maxLength, int maxDepth) {
     105      // make sure it is possible to create a trees smaller than maxLength and maxDepth
     106      if (seedNode.Grammar.GetMinimumExpressionLength(seedNode.Symbol) > maxLength)
     107        throw new ArgumentException("Cannot create trees of length " + maxLength + " or shorter because of grammar constraints.", "maxLength");
     108      if (seedNode.Grammar.GetMinimumExpressionDepth(seedNode.Symbol) > maxDepth)
     109        throw new ArgumentException("Cannot create trees of depth " + maxDepth + " or smaller because of grammar constraints.", "maxDepth");
     110
    105111      // tree length is limited by the grammar and by the explicit size constraints
    106112      int allowedMinLength = seedNode.Grammar.GetMinimumExpressionLength(seedNode.Symbol);
     
    149155        int argumentIndex = nextExtension.ChildIndex;
    150156        int extensionDepth = nextExtension.ExtensionPointDepth;
    151         if (extensionDepth + parent.Grammar.GetMinimumExpressionDepth(parent.Symbol) >= maxDepth) {
     157        if (parent.Grammar.GetMinimumExpressionDepth(parent.Symbol) >= maxDepth - extensionDepth) {
    152158          ReplaceWithMinimalTree(random, root, parent, argumentIndex);
    153159        } else {
     
    155161                                where s.InitialFrequency > 0.0
    156162                                where parent.Grammar.IsAllowedChildSymbol(parent.Symbol, s, argumentIndex)
    157                                 where parent.Grammar.GetMinimumExpressionDepth(s) + extensionDepth - 1 < maxDepth
     163                                where parent.Grammar.GetMinimumExpressionDepth(s) < maxDepth - extensionDepth + 1
    158164                                where parent.Grammar.GetMaximumExpressionLength(s) > targetLength - totalListMinLength - currentLength
    159165                                select s)
Note: See TracChangeset for help on using the changeset viewer.