Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
02/17/11 13:51:04 (14 years ago)
Author:
gkronber
Message:

#1418 Fixed compiler errors in symbolic expression tree encoding

Location:
branches/DataAnalysis Refactoring/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Crossovers
Files:
3 edited

Legend:

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

    r5499 r5510  
    2323namespace HeuristicLab.Encodings.SymbolicExpressionTreeEncoding {
    2424  internal class CrossoverPoint {
    25     public SymbolicExpressionTreeNode Parent { get; set; }
    26     public SymbolicExpressionTreeNode Child { get; set; }
     25    public ISymbolicExpressionTreeNode Parent { get; set; }
     26    public ISymbolicExpressionTreeNode Child { get; set; }
    2727    public int SubtreeIndex {
    28       get { return Parent.SubTrees.IndexOf(Child); }
     28      get { return Parent.IndexOfSubTree(Child); }
    2929    }
    30     public CrossoverPoint(SymbolicExpressionTreeNode parent, SymbolicExpressionTreeNode child) {
     30    public CrossoverPoint(ISymbolicExpressionTreeNode parent, ISymbolicExpressionTreeNode child) {
    3131      this.Parent = parent;
    3232      this.Child = child;
  • branches/DataAnalysis Refactoring/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Crossovers/SubtreeCrossover.cs

    r5499 r5510  
    7878    }
    7979
    80     protected override SymbolicExpressionTree Cross(IRandom random,
    81       SymbolicExpressionTree parent0, SymbolicExpressionTree parent1) {
     80    protected override ISymbolicExpressionTree Cross(IRandom random,
     81      ISymbolicExpressionTree parent0, ISymbolicExpressionTree parent1) {
    8282      return Cross(random, parent0, parent1, InternalCrossoverPointProbability.Value,
    8383        MaximumSymbolicExpressionTreeLength.Value, MaximumSymbolicExpressionTreeDepth.Value);
    8484    }
    8585
    86     public static SymbolicExpressionTree Cross(IRandom random,
    87       SymbolicExpressionTree parent0, SymbolicExpressionTree parent1,
     86    public static ISymbolicExpressionTree Cross(IRandom random,
     87      ISymbolicExpressionTree parent0, ISymbolicExpressionTree parent1,
    8888      double internalCrossoverPointProbability, int maxTreeSize, int maxTreeHeight) {
    8989      // select a random crossover point in the first parent
    90       SymbolicExpressionTreeNode crossoverPoint0;
     90      ISymbolicExpressionTreeNode crossoverPoint0;
    9191      int replacedSubtreeIndex;
    9292      SelectCrossoverPoint(random, parent0, internalCrossoverPointProbability, maxTreeSize, maxTreeHeight, out crossoverPoint0, out replacedSubtreeIndex);
    9393
    9494      // calculate the max size and height that the inserted branch can have
    95       int maxInsertedBranchSize = maxTreeSize - (parent0.Size - crossoverPoint0.SubTrees[replacedSubtreeIndex].GetSize());
     95      int maxInsertedBranchSize = maxTreeSize - (parent0.Size - crossoverPoint0.GetSubTree(replacedSubtreeIndex).GetSize());
    9696      int maxInsertedBranchHeight = maxTreeHeight - GetBranchLevel(parent0.Root, crossoverPoint0);
    9797
    98       List<SymbolicExpressionTreeNode> allowedBranches = new List<SymbolicExpressionTreeNode>();
     98      List<ISymbolicExpressionTreeNode> allowedBranches = new List<ISymbolicExpressionTreeNode>();
    9999      parent1.Root.ForEachNodePostfix((n) => {
    100100        if (n.GetSize() <= maxInsertedBranchSize &&
     
    117117    }
    118118
    119     private static bool IsMatchingPointType(SymbolicExpressionTreeNode parent, int replacedSubtreeIndex, SymbolicExpressionTreeNode branch) {
     119    private static bool IsMatchingPointType(ISymbolicExpressionTreeNode parent, int replacedSubtreeIndex, ISymbolicExpressionTreeNode branch) {
    120120      // check syntax constraints of direct parent - child relation
    121121      if (!parent.Grammar.ContainsSymbol(branch.Symbol) ||
     
    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.SubTrees.Count() >= parent.Grammar.GetMinSubtreeCount(n.Symbol) &&
     131          n.SubTrees.Count() <= parent.Grammar.GetMaxSubtreeCount(n.Symbol);
    132132      });
    133133      return result;
    134134    }
    135135
    136     private static void SelectCrossoverPoint(IRandom random, SymbolicExpressionTree parent0, double internalNodeProbability, int maxBranchSize, int maxBranchHeight, out SymbolicExpressionTreeNode crossoverPoint, out int subtreeIndex) {
     136    private static void SelectCrossoverPoint(IRandom random, ISymbolicExpressionTree parent0, double internalNodeProbability, int maxBranchSize, int maxBranchHeight, out ISymbolicExpressionTreeNode crossoverPoint, out int subtreeIndex) {
    137137      if (internalNodeProbability < 0.0 || internalNodeProbability > 1.0) throw new ArgumentException("internalNodeProbability");
    138138      List<CrossoverPoint> internalCrossoverPoints = new List<CrossoverPoint>();
    139139      List<CrossoverPoint> leafCrossoverPoints = new List<CrossoverPoint>();
    140140      parent0.Root.ForEachNodePostfix((n) => {
    141         if (n.SubTrees.Count > 0 && n != parent0.Root) {
     141        if (n.SubTrees.Count() > 0 && n != parent0.Root) {
    142142          foreach (var child in n.SubTrees) {
    143143            if (child.GetSize() <= maxBranchSize &&
    144144                child.GetHeight() <= maxBranchHeight) {
    145               if (child.SubTrees.Count > 0)
     145              if (child.SubTrees.Count() > 0)
    146146                internalCrossoverPoints.Add(new CrossoverPoint(n, child));
    147147              else
     
    178178    }
    179179
    180     private static SymbolicExpressionTreeNode SelectRandomBranch(IRandom random, IEnumerable<SymbolicExpressionTreeNode> branches, double internalNodeProbability) {
     180    private static ISymbolicExpressionTreeNode SelectRandomBranch(IRandom random, IEnumerable<ISymbolicExpressionTreeNode> branches, double internalNodeProbability) {
    181181      if (internalNodeProbability < 0.0 || internalNodeProbability > 1.0) throw new ArgumentException("internalNodeProbability");
    182       List<SymbolicExpressionTreeNode> allowedInternalBranches;
    183       List<SymbolicExpressionTreeNode> allowedLeafBranches;
     182      List<ISymbolicExpressionTreeNode> allowedInternalBranches;
     183      List<ISymbolicExpressionTreeNode> allowedLeafBranches;
    184184      if (random.NextDouble() < internalNodeProbability) {
    185185        // select internal node if possible
    186186        allowedInternalBranches = (from branch in branches
    187                                    where branch.SubTrees.Count > 0
     187                                   where branch.SubTrees.Count() > 0
    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.Count() == 0
    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.Count() == 0
    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.Count() > 0
    208208                                     select branch).ToList();
    209209          return allowedInternalBranches.SelectRandom(random);
  • branches/DataAnalysis Refactoring/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Crossovers/SymbolicExpressionTreeCrossover.cs

    r5499 r5510  
    3737    private const string ChildParameterName = "Child";
    3838    #region Parameter Properties
    39     public ILookupParameter<ItemArray<SymbolicExpressionTree>> ParentsParameter {
    40       get { return (ScopeTreeLookupParameter<SymbolicExpressionTree>)Parameters[ParentsParameterName]; }
     39    public ILookupParameter<ItemArray<ISymbolicExpressionTree>> ParentsParameter {
     40      get { return (ScopeTreeLookupParameter<ISymbolicExpressionTree>)Parameters[ParentsParameterName]; }
    4141    }
    42     public ILookupParameter<SymbolicExpressionTree> ChildParameter {
    43       get { return (ILookupParameter<SymbolicExpressionTree>)Parameters[ChildParameterName]; }
     42    public ILookupParameter<ISymbolicExpressionTree> ChildParameter {
     43      get { return (ILookupParameter<ISymbolicExpressionTree>)Parameters[ChildParameterName]; }
    4444    }
    4545    #endregion
    4646    #region Properties
    47     public ItemArray<SymbolicExpressionTree> Parents {
     47    public ItemArray<ISymbolicExpressionTree> Parents {
    4848      get { return ParentsParameter.ActualValue; }
    4949    }
    50     public SymbolicExpressionTree Child {
     50    public ISymbolicExpressionTree Child {
    5151      get { return ChildParameter.ActualValue; }
    5252      set { ChildParameter.ActualValue = value; }
     
    5858    protected SymbolicExpressionTreeCrossover()
    5959      : base() {
    60       Parameters.Add(new ScopeTreeLookupParameter<SymbolicExpressionTree>(ParentsParameterName, "The parent symbolic expression trees which should be crossed."));
    61       Parameters.Add(new LookupParameter<SymbolicExpressionTree>(ChildParameterName, "The child symbolic expression tree resulting from the crossover."));
     60      Parameters.Add(new ScopeTreeLookupParameter<ISymbolicExpressionTree>(ParentsParameterName, "The parent symbolic expression trees which should be crossed."));
     61      Parameters.Add(new LookupParameter<ISymbolicExpressionTree>(ChildParameterName, "The child symbolic expression tree resulting from the crossover."));
    6262    }
    6363
     
    6666        throw new ArgumentException("Number of parents must be exactly two for symbolic expression tree crossover operators.");
    6767
    68       SymbolicExpressionTree result = Cross(Random, Parents[0], Parents[1]);
     68      ISymbolicExpressionTree result = Cross(Random, Parents[0], Parents[1]);
    6969
    7070      Child = result;
     
    7272    }
    7373
    74     protected abstract SymbolicExpressionTree Cross(IRandom random,
    75       SymbolicExpressionTree parent0, SymbolicExpressionTree parent1);
     74    protected abstract ISymbolicExpressionTree Cross(IRandom random,
     75      ISymbolicExpressionTree parent0, ISymbolicExpressionTree parent1);
    7676  }
    7777}
Note: See TracChangeset for help on using the changeset viewer.