Changeset 5499 for branches/DataAnalysis Refactoring/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Crossovers/SubtreeCrossover.cs
- Timestamp:
- 02/16/11 19:01:00 (14 years ago)
- Location:
- branches/DataAnalysis Refactoring/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/DataAnalysis Refactoring/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4
- Property svn:ignore
-
old new 2 2 obj 3 3 HeuristicLabEncodingsSymbolicExpressionTreeEncodingPlugin.cs 4 *.user
-
- Property svn:ignore
-
branches/DataAnalysis Refactoring/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Crossovers/SubtreeCrossover.cs
r5445 r5499 29 29 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 30 30 31 namespace HeuristicLab.Encodings.SymbolicExpressionTreeEncoding .Crossovers{31 namespace HeuristicLab.Encodings.SymbolicExpressionTreeEncoding { 32 32 /// <summary> 33 33 /// Takes two parent individuals P0 and P1 each. Selects a random node N0 of P0 and a random node N1 of P1. … … 38 38 [Item("SubtreeCrossover", "An operator which performs subtree swapping crossover.")] 39 39 [StorableClass] 40 public sealed class SubtreeCrossover : SymbolicExpressionTreeCrossover { 40 public sealed class SubtreeCrossover : SymbolicExpressionTreeCrossover, ISymbolicExpressionTreeSizeConstraintOperator { 41 private const string InternalCrossoverPointProbabilityParameterName = "InternalCrossoverPointProbability"; 42 private const string MaximumSymbolicExpressionTreeLengthParameterName = "MaximumSymbolicExpressionTreeLength"; 43 private const string MaximumSymbolicExpressionTreeDepthParameterName = "MaximumSymbolicExpressionTreeDepth"; 44 #region Parameter Properties 41 45 public IValueLookupParameter<PercentValue> InternalCrossoverPointProbabilityParameter { 42 get { return (IValueLookupParameter<PercentValue>)Parameters["InternalCrossoverPointProbability"]; } 43 } 46 get { return (IValueLookupParameter<PercentValue>)Parameters[InternalCrossoverPointProbabilityParameterName]; } 47 } 48 public IValueLookupParameter<IntValue> MaximumSymbolicExpressionTreeLengthParameter { 49 get { return (IValueLookupParameter<IntValue>)Parameters[MaximumSymbolicExpressionTreeLengthParameterName]; } 50 } 51 public IValueLookupParameter<IntValue> MaximumSymbolicExpressionTreeDepthParameter { 52 get { return (IValueLookupParameter<IntValue>)Parameters[MaximumSymbolicExpressionTreeDepthParameterName]; } 53 } 54 #endregion 55 #region Properties 56 public PercentValue InternalCrossoverPointProbability { 57 get { return InternalCrossoverPointProbabilityParameter.ActualValue; } 58 } 59 public IntValue MaximumSymbolicExpressionTreeLength { 60 get { return MaximumSymbolicExpressionTreeLengthParameter.ActualValue; } 61 } 62 public IntValue MaximumSymbolicExpressionTreeDepth { 63 get { return MaximumSymbolicExpressionTreeDepthParameter.ActualValue; } 64 } 65 #endregion 44 66 [StorableConstructor] 45 67 private SubtreeCrossover(bool deserializing) : base(deserializing) { } … … 47 69 public SubtreeCrossover() 48 70 : base() { 49 Parameters.Add(new ValueLookupParameter<PercentValue>("InternalCrossoverPointProbability", "The probability to select an internal crossover point (instead of a leaf node).", new PercentValue(0.9))); 71 Parameters.Add(new ValueLookupParameter<IntValue>(MaximumSymbolicExpressionTreeLengthParameterName, "The maximal length (number of nodes) of the symbolic expression tree.")); 72 Parameters.Add(new ValueLookupParameter<IntValue>(MaximumSymbolicExpressionTreeDepthParameterName, "The maximal depth of the symbolic expression tree (a tree with one node has depth = 0).")); 73 Parameters.Add(new ValueLookupParameter<PercentValue>(InternalCrossoverPointProbabilityParameterName, "The probability to select an internal crossover point (instead of a leaf node).", new PercentValue(0.9))); 50 74 } 51 75 … … 55 79 56 80 protected override SymbolicExpressionTree Cross(IRandom random, 57 SymbolicExpressionTree parent0, SymbolicExpressionTree parent1 ,58 IntValue maxTreeSize, IntValue maxTreeHeight, out bool success) {59 return Cross(random, parent0, parent1, InternalCrossoverPointProbabilityParameter.ActualValue.Value, maxTreeSize.Value, maxTreeHeight.Value, out success);81 SymbolicExpressionTree parent0, SymbolicExpressionTree parent1) { 82 return Cross(random, parent0, parent1, InternalCrossoverPointProbability.Value, 83 MaximumSymbolicExpressionTreeLength.Value, MaximumSymbolicExpressionTreeDepth.Value); 60 84 } 61 85 62 86 public static SymbolicExpressionTree Cross(IRandom random, 63 87 SymbolicExpressionTree parent0, SymbolicExpressionTree parent1, 64 double internalCrossoverPointProbability, int maxTreeSize, int maxTreeHeight , out bool success) {88 double internalCrossoverPointProbability, int maxTreeSize, int maxTreeHeight) { 65 89 // select a random crossover point in the first parent 66 90 SymbolicExpressionTreeNode crossoverPoint0; … … 81 105 82 106 if (allowedBranches.Count == 0) { 83 success = false;84 107 return parent0; 85 108 } else { … … 90 113 crossoverPoint0.RemoveSubTree(replacedSubtreeIndex); 91 114 crossoverPoint0.InsertSubTree(replacedSubtreeIndex, selectedBranch); 92 success = true;93 115 return parent0; 94 116 } … … 190 212 } 191 213 192 private static int GetBranchLevel( SymbolicExpressionTreeNode root,SymbolicExpressionTreeNode point) {214 private static int GetBranchLevel(ISymbolicExpressionTreeNode root, ISymbolicExpressionTreeNode point) { 193 215 if (root == point) return 0; 194 216 foreach (var subtree in root.SubTrees) {
Note: See TracChangeset
for help on using the changeset viewer.