Free cookie consent management tool by TermsFeed Policy Generator

Changeset 11496


Ignore:
Timestamp:
10/24/14 16:47:44 (10 years ago)
Author:
mkommend
Message:

#2268: Refactored tree creators to use new method for tree grammar creation and handled grammar cloning in the base class.

Location:
trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Creators
Files:
5 edited

Legend:

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

    r11171 r11496  
    3838    private const string MaximumSymbolicExpressionTreeLengthParameterName = "MaximumSymbolicExpressionTreeLength";
    3939    private const string MaximumSymbolicExpressionTreeDepthParameterName = "MaximumSymbolicExpressionTreeDepth";
    40     private const string SymbolicExpressionTreeGrammarParameterName = "SymbolicExpressionTreeGrammar";
    41     private const string ClonedSymbolicExpressionTreeGrammarParameterName = "ClonedSymbolicExpressionTreeGrammar";
    4240
    4341    #region Parameter Properties
     
    4947      get { return (IValueLookupParameter<IntValue>)Parameters[MaximumSymbolicExpressionTreeDepthParameterName]; }
    5048    }
    51 
    52     public IValueLookupParameter<ISymbolicExpressionGrammar> SymbolicExpressionTreeGrammarParameter {
    53       get { return (IValueLookupParameter<ISymbolicExpressionGrammar>)Parameters[SymbolicExpressionTreeGrammarParameterName]; }
    54     }
    55 
    56     public ILookupParameter<ISymbolicExpressionGrammar> ClonedSymbolicExpressionTreeGrammarParameter {
    57       get { return (ILookupParameter<ISymbolicExpressionGrammar>)Parameters[ClonedSymbolicExpressionTreeGrammarParameterName]; }
    58     }
    59 
    6049    #endregion
    6150    #region Properties
     
    6655    public IntValue MaximumSymbolicExpressionTreeLength {
    6756      get { return MaximumSymbolicExpressionTreeLengthParameter.ActualValue; }
    68     }
    69 
    70     public ISymbolicExpressionGrammar ClonedSymbolicExpressionTreeGrammar {
    71       get { return ClonedSymbolicExpressionTreeGrammarParameter.ActualValue; }
    7257    }
    7358
     
    8469      Parameters.Add(new ValueLookupParameter<IntValue>(MaximumSymbolicExpressionTreeDepthParameterName,
    8570        "The maximal depth of the symbolic expression tree (a tree with one node has depth = 0)."));
    86       Parameters.Add(new ValueLookupParameter<ISymbolicExpressionGrammar>(SymbolicExpressionTreeGrammarParameterName,
    87         "The tree grammar that defines the correct syntax of symbolic expression trees that should be created."));
    88       Parameters.Add(new LookupParameter<ISymbolicExpressionGrammar>(ClonedSymbolicExpressionTreeGrammarParameterName,
    89         "An immutable clone of the concrete grammar that is actually used to create and manipulate trees."));
    9071    }
    9172
     
    9475    }
    9576
    96     public override IOperation InstrumentedApply() {
    97       if (ClonedSymbolicExpressionTreeGrammarParameter.ActualValue == null) {
    98         SymbolicExpressionTreeGrammarParameter.ActualValue.ReadOnly = true;
    99         IScope globalScope = ExecutionContext.Scope;
    100         while (globalScope.Parent != null)
    101           globalScope = globalScope.Parent;
    102 
    103         globalScope.Variables.Add(new Variable(ClonedSymbolicExpressionTreeGrammarParameterName,
    104           (ISymbolicExpressionGrammar)SymbolicExpressionTreeGrammarParameter.ActualValue.Clone()));
    105       }
    106       return base.InstrumentedApply();
    107     }
    10877
    10978    protected override ISymbolicExpressionTree Create(IRandom random) {
    110       return Create(random, ClonedSymbolicExpressionTreeGrammar, MaximumSymbolicExpressionTreeLength.Value, MaximumSymbolicExpressionTreeDepth.Value);
     79      return Create(random, ClonedSymbolicExpressionTreeGrammarParameter.ActualValue, MaximumSymbolicExpressionTreeLength.Value, MaximumSymbolicExpressionTreeDepth.Value);
    11180    }
    11281
     
    12998      var rootNode = (SymbolicExpressionTreeTopLevelNode)grammar.ProgramRootSymbol.CreateTreeNode();
    13099      if (rootNode.HasLocalParameters) rootNode.ResetLocalParameters(random);
    131       rootNode.SetGrammar(new SymbolicExpressionTreeGrammar(grammar));
     100      rootNode.SetGrammar(grammar.CreateExpressionTreeGrammar());
    132101
    133102      var startNode = (SymbolicExpressionTreeTopLevelNode)grammar.StartSymbol.CreateTreeNode();
    134103      if (startNode.HasLocalParameters) startNode.ResetLocalParameters(random);
    135       startNode.SetGrammar(new SymbolicExpressionTreeGrammar(grammar));
     104      startNode.SetGrammar(grammar.CreateExpressionTreeGrammar());
    136105
    137106      rootNode.AddSubtree(startNode);
  • trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Creators/GrowTreeCreator.cs

    r11171 r11496  
    3838    private const string MaximumSymbolicExpressionTreeLengthParameterName = "MaximumSymbolicExpressionTreeLength";
    3939    private const string MaximumSymbolicExpressionTreeDepthParameterName = "MaximumSymbolicExpressionTreeDepth";
    40     private const string SymbolicExpressionTreeGrammarParameterName = "SymbolicExpressionTreeGrammar";
    41     private const string ClonedSymbolicExpressionTreeGrammarParameterName = "ClonedSymbolicExpressionTreeGrammar";
    4240
    4341    #region Parameter Properties
     
    4846    public IValueLookupParameter<IntValue> MaximumSymbolicExpressionTreeDepthParameter {
    4947      get { return (IValueLookupParameter<IntValue>)Parameters[MaximumSymbolicExpressionTreeDepthParameterName]; }
    50     }
    51 
    52     public IValueLookupParameter<ISymbolicExpressionGrammar> SymbolicExpressionTreeGrammarParameter {
    53       get { return (IValueLookupParameter<ISymbolicExpressionGrammar>)Parameters[SymbolicExpressionTreeGrammarParameterName]; }
    54     }
    55 
    56     public ILookupParameter<ISymbolicExpressionGrammar> ClonedSymbolicExpressionTreeGrammarParameter {
    57       get { return (ILookupParameter<ISymbolicExpressionGrammar>)Parameters[ClonedSymbolicExpressionTreeGrammarParameterName]; }
    5848    }
    5949
     
    6757      get { return MaximumSymbolicExpressionTreeLengthParameter.ActualValue; }
    6858    }
    69 
    70     public ISymbolicExpressionGrammar ClonedSymbolicExpressionTreeGrammar {
    71       get { return ClonedSymbolicExpressionTreeGrammarParameter.ActualValue; }
    72     }
    73 
    7459    #endregion
    7560
     
    8469      Parameters.Add(new ValueLookupParameter<IntValue>(MaximumSymbolicExpressionTreeDepthParameterName,
    8570        "The maximal depth of the symbolic expression tree (a tree with one node has depth = 0)."));
    86       Parameters.Add(new ValueLookupParameter<ISymbolicExpressionGrammar>(SymbolicExpressionTreeGrammarParameterName,
    87         "The tree grammar that defines the correct syntax of symbolic expression trees that should be created."));
    88       Parameters.Add(new LookupParameter<ISymbolicExpressionGrammar>(ClonedSymbolicExpressionTreeGrammarParameterName,
    89         "An immutable clone of the concrete grammar that is actually used to create and manipulate trees."));
    9071    }
    9172
     
    9475    }
    9576
    96     public override IOperation InstrumentedApply() {
    97       if (ClonedSymbolicExpressionTreeGrammarParameter.ActualValue == null) {
    98         SymbolicExpressionTreeGrammarParameter.ActualValue.ReadOnly = true;
    99         IScope globalScope = ExecutionContext.Scope;
    100         while (globalScope.Parent != null)
    101           globalScope = globalScope.Parent;
    102 
    103         globalScope.Variables.Add(new Variable(ClonedSymbolicExpressionTreeGrammarParameterName,
    104           (ISymbolicExpressionGrammar)SymbolicExpressionTreeGrammarParameter.ActualValue.Clone()));
    105       }
    106       return base.InstrumentedApply();
    107     }
    10877
    10978    protected override ISymbolicExpressionTree Create(IRandom random) {
    110       return Create(random, ClonedSymbolicExpressionTreeGrammar,
     79      return Create(random, ClonedSymbolicExpressionTreeGrammarParameter.ActualValue,
    11180        MaximumSymbolicExpressionTreeLength.Value, MaximumSymbolicExpressionTreeDepth.Value);
    11281    }
     
    12897      var tree = new SymbolicExpressionTree();
    12998      var rootNode = (SymbolicExpressionTreeTopLevelNode)grammar.ProgramRootSymbol.CreateTreeNode();
    130       rootNode.SetGrammar(new SymbolicExpressionTreeGrammar(grammar));
    13199      if (rootNode.HasLocalParameters) rootNode.ResetLocalParameters(random);
     100      rootNode.SetGrammar(grammar.CreateExpressionTreeGrammar());
     101
    132102
    133103      var startNode = (SymbolicExpressionTreeTopLevelNode)grammar.StartSymbol.CreateTreeNode();
    134104      if (startNode.HasLocalParameters) startNode.ResetLocalParameters(random);
    135       startNode.SetGrammar(new SymbolicExpressionTreeGrammar(grammar));
     105      startNode.SetGrammar(grammar.CreateExpressionTreeGrammar());
    136106
    137107      rootNode.AddSubtree(startNode);
  • trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Creators/ProbabilisticTreeCreator.cs

    r11171 r11496  
    3939    private const string MaximumSymbolicExpressionTreeLengthParameterName = "MaximumSymbolicExpressionTreeLength";
    4040    private const string MaximumSymbolicExpressionTreeDepthParameterName = "MaximumSymbolicExpressionTreeDepth";
    41     private const string SymbolicExpressionTreeGrammarParameterName = "SymbolicExpressionTreeGrammar";
    42     private const string ClonedSymbolicExpressionTreeGrammarParameterName = "ClonedSymbolicExpressionTreeGrammar";
    4341    #region Parameter Properties
    4442    public IValueLookupParameter<IntValue> MaximumSymbolicExpressionTreeLengthParameter {
     
    4745    public IValueLookupParameter<IntValue> MaximumSymbolicExpressionTreeDepthParameter {
    4846      get { return (IValueLookupParameter<IntValue>)Parameters[MaximumSymbolicExpressionTreeDepthParameterName]; }
    49     }
    50     public IValueLookupParameter<ISymbolicExpressionGrammar> SymbolicExpressionTreeGrammarParameter {
    51       get { return (IValueLookupParameter<ISymbolicExpressionGrammar>)Parameters[SymbolicExpressionTreeGrammarParameterName]; }
    52     }
    53     public ILookupParameter<ISymbolicExpressionGrammar> ClonedSymbolicExpressionTreeGrammarParameter {
    54       get { return (ILookupParameter<ISymbolicExpressionGrammar>)Parameters[ClonedSymbolicExpressionTreeGrammarParameterName]; }
    5547    }
    5648    #endregion
     
    6153    public IntValue MaximumSymbolicExpressionTreeDepth {
    6254      get { return MaximumSymbolicExpressionTreeDepthParameter.ActualValue; }
    63     }
    64     public ISymbolicExpressionGrammar SymbolicExpressionTreeGrammar {
    65       get { return ClonedSymbolicExpressionTreeGrammarParameter.ActualValue; }
    6655    }
    6756    #endregion
     
    7463      Parameters.Add(new ValueLookupParameter<IntValue>(MaximumSymbolicExpressionTreeLengthParameterName, "The maximal length (number of nodes) of the symbolic expression tree."));
    7564      Parameters.Add(new ValueLookupParameter<IntValue>(MaximumSymbolicExpressionTreeDepthParameterName, "The maximal depth of the symbolic expression tree (a tree with one node has depth = 0)."));
    76       Parameters.Add(new ValueLookupParameter<ISymbolicExpressionGrammar>(SymbolicExpressionTreeGrammarParameterName, "The tree grammar that defines the correct syntax of symbolic expression trees that should be created."));
    77       Parameters.Add(new LookupParameter<ISymbolicExpressionGrammar>(ClonedSymbolicExpressionTreeGrammarParameterName, "An immutable clone of the concrete grammar that is actually used to create and manipulate trees."));
    7865    }
    7966
     
    8168      return new ProbabilisticTreeCreator(this, cloner);
    8269    }
    83     [StorableHook(HookType.AfterDeserialization)]
    84     private void AfterDeserialization() {
    85       if (!Parameters.ContainsKey(ClonedSymbolicExpressionTreeGrammarParameterName))
    86         Parameters.Add(new LookupParameter<ISymbolicExpressionGrammar>(ClonedSymbolicExpressionTreeGrammarParameterName, "An immutable clone of the concrete grammar that is actually used to create and manipulate trees."));
    87     }
    88 
    89     public override IOperation InstrumentedApply() {
    90       if (ClonedSymbolicExpressionTreeGrammarParameter.ActualValue == null) {
    91         SymbolicExpressionTreeGrammarParameter.ActualValue.ReadOnly = true;
    92         IScope globalScope = ExecutionContext.Scope;
    93         while (globalScope.Parent != null)
    94           globalScope = globalScope.Parent;
    95 
    96         globalScope.Variables.Add(new Variable(ClonedSymbolicExpressionTreeGrammarParameterName, (ISymbolicExpressionGrammar)SymbolicExpressionTreeGrammarParameter.ActualValue.Clone()));
    97       }
    98       return base.InstrumentedApply();
    99     }
     70
    10071
    10172    protected override ISymbolicExpressionTree Create(IRandom random) {
    102       return Create(random, SymbolicExpressionTreeGrammar, MaximumSymbolicExpressionTreeLength.Value, MaximumSymbolicExpressionTreeDepth.Value);
     73      return Create(random, ClonedSymbolicExpressionTreeGrammarParameter.ActualValue, MaximumSymbolicExpressionTreeLength.Value, MaximumSymbolicExpressionTreeDepth.Value);
    10374    }
    10475
     
    11182      var rootNode = (SymbolicExpressionTreeTopLevelNode)grammar.ProgramRootSymbol.CreateTreeNode();
    11283      if (rootNode.HasLocalParameters) rootNode.ResetLocalParameters(random);
    113       rootNode.SetGrammar(new SymbolicExpressionTreeGrammar(grammar));
     84      rootNode.SetGrammar(grammar.CreateExpressionTreeGrammar());
     85
    11486      var startNode = (SymbolicExpressionTreeTopLevelNode)grammar.StartSymbol.CreateTreeNode();
    115       startNode.SetGrammar(new SymbolicExpressionTreeGrammar(grammar));
    11687      if (startNode.HasLocalParameters) startNode.ResetLocalParameters(random);
     88      startNode.SetGrammar(grammar.CreateExpressionTreeGrammar());
     89
    11790      rootNode.AddSubtree(startNode);
    11891      PTC2(random, startNode, maxTreeLength, maxTreeDepth);
  • trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Creators/RampedHalfAndHalfTreeCreator.cs

    r11171 r11496  
    3636    private const string MaximumSymbolicExpressionTreeLengthParameterName = "MaximumSymbolicExpressionTreeLength";
    3737    private const string MaximumSymbolicExpressionTreeDepthParameterName = "MaximumSymbolicExpressionTreeDepth";
    38     private const string SymbolicExpressionTreeGrammarParameterName = "SymbolicExpressionTreeGrammar";
    39     private const string ClonedSymbolicExpressionTreeGrammarParameterName = "ClonedSymbolicExpressionTreeGrammar";
    4038
    4139    #region Parameter Properties
     
    4846    }
    4947
    50     public IValueLookupParameter<ISymbolicExpressionGrammar> SymbolicExpressionTreeGrammarParameter {
    51       get {
    52         return (IValueLookupParameter<ISymbolicExpressionGrammar>)Parameters[SymbolicExpressionTreeGrammarParameterName];
    53       }
    54     }
    55 
    56     public ILookupParameter<ISymbolicExpressionGrammar> ClonedSymbolicExpressionTreeGrammarParameter {
    57       get {
    58         return (ILookupParameter<ISymbolicExpressionGrammar>)Parameters[ClonedSymbolicExpressionTreeGrammarParameterName];
    59       }
    60     }
    61 
    6248    #endregion
    6349    #region Properties
     
    6854    public IntValue MaximumSymbolicExpressionTreeLength {
    6955      get { return MaximumSymbolicExpressionTreeLengthParameter.ActualValue; }
    70     }
    71 
    72     public ISymbolicExpressionGrammar ClonedSymbolicExpressionTreeGrammar {
    73       get { return ClonedSymbolicExpressionTreeGrammarParameter.ActualValue; }
    7456    }
    7557    #endregion
     
    8567      Parameters.Add(new ValueLookupParameter<IntValue>(MaximumSymbolicExpressionTreeDepthParameterName,
    8668        "The maximal depth of the symbolic expression tree (a tree with one node has depth = 0)."));
    87       Parameters.Add(new ValueLookupParameter<ISymbolicExpressionGrammar>(SymbolicExpressionTreeGrammarParameterName,
    88         "The tree grammar that defines the correct syntax of symbolic expression trees that should be created."));
    89       Parameters.Add(new LookupParameter<ISymbolicExpressionGrammar>(ClonedSymbolicExpressionTreeGrammarParameterName,
    90         "An immutable clone of the concrete grammar that is actually used to create and manipulate trees."));
    9169    }
    9270
     
    9573    }
    9674
    97     public override IOperation InstrumentedApply() {
    98       if (ClonedSymbolicExpressionTreeGrammarParameter.ActualValue == null) {
    99         SymbolicExpressionTreeGrammarParameter.ActualValue.ReadOnly = true;
    100         IScope globalScope = ExecutionContext.Scope;
    101         while (globalScope.Parent != null)
    102           globalScope = globalScope.Parent;
    103 
    104         globalScope.Variables.Add(new Variable(ClonedSymbolicExpressionTreeGrammarParameterName,
    105           (ISymbolicExpressionGrammar)SymbolicExpressionTreeGrammarParameter.ActualValue.Clone()));
    106       }
    107       return base.InstrumentedApply();
    108     }
    109 
    11075    protected override ISymbolicExpressionTree Create(IRandom random) {
    111       return Create(random, ClonedSymbolicExpressionTreeGrammar, MaximumSymbolicExpressionTreeLength.Value, MaximumSymbolicExpressionTreeDepth.Value);
     76      return Create(random, ClonedSymbolicExpressionTreeGrammarParameter.ActualValue, MaximumSymbolicExpressionTreeLength.Value, MaximumSymbolicExpressionTreeDepth.Value);
    11277    }
    11378
     
    12994      var rootNode = (SymbolicExpressionTreeTopLevelNode)grammar.ProgramRootSymbol.CreateTreeNode();
    13095      if (rootNode.HasLocalParameters) rootNode.ResetLocalParameters(random);
    131       rootNode.SetGrammar(new SymbolicExpressionTreeGrammar(grammar));
     96      rootNode.SetGrammar(grammar.CreateExpressionTreeGrammar());
    13297
    13398      var startNode = (SymbolicExpressionTreeTopLevelNode)grammar.StartSymbol.CreateTreeNode();
    13499      if (startNode.HasLocalParameters) startNode.ResetLocalParameters(random);
    135       startNode.SetGrammar(new SymbolicExpressionTreeGrammar(grammar));
     100      startNode.SetGrammar(grammar.CreateExpressionTreeGrammar());
    136101
    137102      rootNode.AddSubtree(startNode);
  • trunk/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Creators/SymbolicExpressionTreeCreator.cs

    r11171 r11496  
    3333  public abstract class SymbolicExpressionTreeCreator : SymbolicExpressionTreeOperator, ISymbolicExpressionTreeCreator {
    3434    private const string SymbolicExpressionTreeParameterName = "SymbolicExpressionTree";
     35    private const string SymbolicExpressionTreeGrammarParameterName = "SymbolicExpressionTreeGrammar";
     36    private const string ClonedSymbolicExpressionTreeGrammarParameterName = "ClonedSymbolicExpressionTreeGrammar";
     37
    3538    #region Parameter Properties
    3639    public ILookupParameter<ISymbolicExpressionTree> SymbolicExpressionTreeParameter {
    3740      get { return (ILookupParameter<ISymbolicExpressionTree>)Parameters[SymbolicExpressionTreeParameterName]; }
    3841    }
     42
     43    public IValueLookupParameter<ISymbolicExpressionGrammar> SymbolicExpressionTreeGrammarParameter {
     44      get { return (IValueLookupParameter<ISymbolicExpressionGrammar>)Parameters[SymbolicExpressionTreeGrammarParameterName]; }
     45    }
     46
     47    public ILookupParameter<ISymbolicExpressionGrammar> ClonedSymbolicExpressionTreeGrammarParameter {
     48      get { return (ILookupParameter<ISymbolicExpressionGrammar>)Parameters[ClonedSymbolicExpressionTreeGrammarParameterName]; }
     49    }
    3950    #endregion
    4051
    41     #region Properties
    42     public ISymbolicExpressionTree SymbolicExpressionTree {
    43       get { return SymbolicExpressionTreeParameter.ActualValue; }
    44       set { SymbolicExpressionTreeParameter.ActualValue = value; }
    45     }
    46 
    47     #endregion
    4852    [StorableConstructor]
    4953    protected SymbolicExpressionTreeCreator(bool deserializing) : base(deserializing) { }
     
    5256      : base() {
    5357      Parameters.Add(new LookupParameter<ISymbolicExpressionTree>(SymbolicExpressionTreeParameterName, "The symbolic expression tree that should be created."));
     58      Parameters.Add(new ValueLookupParameter<ISymbolicExpressionGrammar>(SymbolicExpressionTreeGrammarParameterName,
     59        "The tree grammar that defines the correct syntax of symbolic expression trees that should be created."));
     60      Parameters.Add(new LookupParameter<ISymbolicExpressionGrammar>(ClonedSymbolicExpressionTreeGrammarParameterName,
     61        "An immutable clone of the concrete grammar that is actually used to create and manipulate trees."));
     62    }
     63
     64    [StorableHook(HookType.AfterDeserialization)]
     65    private void AfterDeserialization() {
     66      if (!Parameters.ContainsKey(ClonedSymbolicExpressionTreeGrammarParameterName))
     67        Parameters.Add(new LookupParameter<ISymbolicExpressionGrammar>(ClonedSymbolicExpressionTreeGrammarParameterName, "An immutable clone of the concrete grammar that is actually used to create and manipulate trees."));
    5468    }
    5569
    5670    public override IOperation InstrumentedApply() {
    57       SymbolicExpressionTree = Create(Random);
     71      if (ClonedSymbolicExpressionTreeGrammarParameter.ActualValue == null) {
     72        SymbolicExpressionTreeGrammarParameter.ActualValue.ReadOnly = true;
     73        IScope globalScope = ExecutionContext.Scope;
     74        while (globalScope.Parent != null)
     75          globalScope = globalScope.Parent;
     76
     77        globalScope.Variables.Add(new Variable(ClonedSymbolicExpressionTreeGrammarParameterName,
     78          (ISymbolicExpressionGrammar)SymbolicExpressionTreeGrammarParameter.ActualValue.Clone()));
     79      }
     80      SymbolicExpressionTreeParameter.ActualValue = Create(Random);
    5881      return base.InstrumentedApply();
    5982    }
Note: See TracChangeset for help on using the changeset viewer.