Changeset 12395 for branches/HiveStatistics/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Creators/ProbabilisticTreeCreator.cs
- Timestamp:
- 05/20/15 16:41:14 (10 years ago)
- Location:
- branches/HiveStatistics/sources
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HiveStatistics/sources
- Property svn:mergeinfo changed
-
branches/HiveStatistics/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding
-
branches/HiveStatistics/sources/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Creators/ProbabilisticTreeCreator.cs
r11205 r12395 1 1 #region License Information 2 2 /* HeuristicLab 3 * Copyright (C) 2002-201 4Heuristic and Evolutionary Algorithms Laboratory (HEAL)3 * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 4 * 5 5 * This file is part of HeuristicLab. … … 39 39 private const string MaximumSymbolicExpressionTreeLengthParameterName = "MaximumSymbolicExpressionTreeLength"; 40 40 private const string MaximumSymbolicExpressionTreeDepthParameterName = "MaximumSymbolicExpressionTreeDepth"; 41 private const string SymbolicExpressionTreeGrammarParameterName = "SymbolicExpressionTreeGrammar";42 private const string ClonedSymbolicExpressionTreeGrammarParameterName = "ClonedSymbolicExpressionTreeGrammar";43 41 #region Parameter Properties 44 42 public IValueLookupParameter<IntValue> MaximumSymbolicExpressionTreeLengthParameter { … … 47 45 public IValueLookupParameter<IntValue> MaximumSymbolicExpressionTreeDepthParameter { 48 46 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]; }55 47 } 56 48 #endregion … … 61 53 public IntValue MaximumSymbolicExpressionTreeDepth { 62 54 get { return MaximumSymbolicExpressionTreeDepthParameter.ActualValue; } 63 }64 public ISymbolicExpressionGrammar SymbolicExpressionTreeGrammar {65 get { return ClonedSymbolicExpressionTreeGrammarParameter.ActualValue; }66 55 } 67 56 #endregion … … 74 63 Parameters.Add(new ValueLookupParameter<IntValue>(MaximumSymbolicExpressionTreeLengthParameterName, "The maximal length (number of nodes) of the symbolic expression tree.")); 75 64 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."));78 65 } 79 66 … … 81 68 return new ProbabilisticTreeCreator(this, cloner); 82 69 } 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 100 71 101 72 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); 103 74 } 104 75 … … 111 82 var rootNode = (SymbolicExpressionTreeTopLevelNode)grammar.ProgramRootSymbol.CreateTreeNode(); 112 83 if (rootNode.HasLocalParameters) rootNode.ResetLocalParameters(random); 113 rootNode.SetGrammar(new SymbolicExpressionTreeGrammar(grammar)); 84 rootNode.SetGrammar(grammar.CreateExpressionTreeGrammar()); 85 114 86 var startNode = (SymbolicExpressionTreeTopLevelNode)grammar.StartSymbol.CreateTreeNode(); 115 startNode.SetGrammar(new SymbolicExpressionTreeGrammar(grammar));116 87 if (startNode.HasLocalParameters) startNode.ResetLocalParameters(random); 88 startNode.SetGrammar(grammar.CreateExpressionTreeGrammar()); 89 117 90 rootNode.AddSubtree(startNode); 118 91 PTC2(random, startNode, maxTreeLength, maxTreeDepth);
Note: See TracChangeset
for help on using the changeset viewer.