using System.Linq; namespace HeuristicLab.Problems.ProgramSynthesis.Base.Erc.StringVector { using System.Collections.Generic; using HeuristicLab.Common; using HeuristicLab.Core; using HeuristicLab.Data; using HeuristicLab.Parameters; using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; using HeuristicLab.Random; [StorableClass] public class StringVectorConstantsErc : WeightedErcItem> { private const string ConstantsParameterName = "Constants"; public StringVectorConstantsErc() : this(false, 1d) { } public StringVectorConstantsErc(params StringArray[] arrays) : this(true, 1d, arrays) { } public StringVectorConstantsErc(bool isEnabled, double weight = 1d, params StringArray[] arrays) : base(isEnabled, weight) { Name = "String vector constants"; IsEnabled = isEnabled; Parameters.Add(new ValueParameter>(ConstantsParameterName, new ItemCollection(arrays))); } [StorableConstructor] protected StringVectorConstantsErc(bool deserializing) : base(deserializing) { } public StringVectorConstantsErc(StringVectorConstantsErc origin, Cloner cloner) : base(origin, cloner) { } public IValueParameter> ConstantsParameter { get { return (IValueParameter>)Parameters[ConstantsParameterName]; } } public IEnumerable Constants { get { return ConstantsParameter.Value; } } public override IReadOnlyList GetErcValue(IRandom random) { // TODO: remove ToArray when ValueTypeArray implements IReadOnlyList return Constants.SampleRandom(random).ToArray(); } public override IDeepCloneable Clone(Cloner cloner) { return new StringVectorConstantsErc(this, cloner); } } }