Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
11/15/21 16:18:39 (2 years ago)
Author:
pfleck
Message:

#3040: Added the ISymbolicDataAnalysisExpressionManipulator and necessary code analogously to the ISymbolicDataAnalysisExpressionCrossover.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/3040_VectorBasedGP/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Manipulators/MultiSymbolicExpressionTreeManipulator.cs

    r17180 r18082  
    8181      CheckedItemList<ISymbolicExpressionTreeManipulator> checkedItemList = new CheckedItemList<ISymbolicExpressionTreeManipulator>();
    8282      checkedItemList.AddRange(list.OrderBy(op => op.Name));
    83       Operators = checkedItemList.AsReadOnly();
     83      //Operators = checkedItemList.AsReadOnly();
     84      Operators = checkedItemList;
    8485      Operators_ItemsAdded(this, new CollectionItemsChangedEventArgs<IndexedItem<ISymbolicExpressionTreeManipulator>>(Operators.CheckedItems));
    8586
     
    8990    public override IDeepCloneable Clone(Cloner cloner) {
    9091      return new MultiSymbolicExpressionTreeManipulator(this, cloner);
     92    }
     93
     94    public void Manipulate(IRandom random, ISymbolicExpressionTree symbolicExpressionTree) {
     95      double sum = Operators.CheckedItems.Sum(o => Probabilities[o.Index]);
     96      if (sum.IsAlmost(0)) throw new InvalidOperationException(Name + ": All selected operators have zero probability.");
     97      double r = random.NextDouble() * sum;
     98      sum = 0;
     99      int index = -1;
     100      foreach (var indexedItem in Operators.CheckedItems) {
     101        sum += Probabilities[indexedItem.Index];
     102        if (sum > r) {
     103          index = indexedItem.Index;
     104          break;
     105        }
     106      }
     107      Operators[index].Manipulate(random, symbolicExpressionTree);
    91108    }
    92109
Note: See TracChangeset for help on using the changeset viewer.