Changeset 18082 for branches/3040_VectorBasedGP/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Manipulators/MultiSymbolicExpressionTreeManipulator.cs
- Timestamp:
- 11/15/21 16:18:39 (2 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/3040_VectorBasedGP/HeuristicLab.Encodings.SymbolicExpressionTreeEncoding/3.4/Manipulators/MultiSymbolicExpressionTreeManipulator.cs
r17180 r18082 81 81 CheckedItemList<ISymbolicExpressionTreeManipulator> checkedItemList = new CheckedItemList<ISymbolicExpressionTreeManipulator>(); 82 82 checkedItemList.AddRange(list.OrderBy(op => op.Name)); 83 Operators = checkedItemList.AsReadOnly(); 83 //Operators = checkedItemList.AsReadOnly(); 84 Operators = checkedItemList; 84 85 Operators_ItemsAdded(this, new CollectionItemsChangedEventArgs<IndexedItem<ISymbolicExpressionTreeManipulator>>(Operators.CheckedItems)); 85 86 … … 89 90 public override IDeepCloneable Clone(Cloner cloner) { 90 91 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); 91 108 } 92 109
Note: See TracChangeset
for help on using the changeset viewer.