using System; using System.Collections.Generic; using System.Linq; using HeuristicLab.Common; using HeuristicLab.Core; using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding; using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; using HeuristicLab.Random; namespace HeuristicLab.Algorithms.IteratedSymbolicExpressionConstruction { [StorableClass] [Item("RandomSymbolicExpressionConstructionPolicy", "")] public class RandomSymbolicExpressionConstructionPolicy : SymbolicExpressionConstructionPolicyBase { public RandomSymbolicExpressionConstructionPolicy() : base() { } protected override int Select(IReadOnlyList followStates, IRandom random) { var idxs = Enumerable.Range(0, followStates.Count); return idxs.SampleRandom(random); } public sealed override void Update(IEnumerable stateSequence, double quality) { // ignore } protected override object CreateState(ISymbolicExpressionTreeNode root, List actionSequence, ISymbolicExpressionTreeNode parent, int childIdx) { return null; // doesn't use state information } #region IItem protected RandomSymbolicExpressionConstructionPolicy(RandomSymbolicExpressionConstructionPolicy original, Cloner cloner) : base(original, cloner) { } [StorableConstructor] protected RandomSymbolicExpressionConstructionPolicy(bool deserializing) : base(deserializing) { } public override HeuristicLab.Common.IDeepCloneable Clone(HeuristicLab.Common.Cloner cloner) { return new RandomSymbolicExpressionConstructionPolicy(this, cloner); } #endregion } }