using HeuristicLab.Common; using HeuristicLab.Core; using HeuristicLab.Data.MoveVectorData; using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; namespace HeuristicLab.Encodings.MoveVectorEncoding.Manipulators { [Item("SingleMoveEnableManipulator", " Enable or disable a move.")] [StorableClass] public class SingleMoveEnableManipulator : MoveVectorManipulator { [StorableConstructor] protected SingleMoveEnableManipulator(bool deserializing) : base(deserializing) { } protected SingleMoveEnableManipulator(SingleMoveEnableManipulator original, Cloner cloner) : base(original, cloner) { } public SingleMoveEnableManipulator() : base() { } public override IDeepCloneable Clone(Cloner cloner) { return new SingleMoveEnableManipulator(this, cloner); } public static void Apply(IRandom random, MoveVector moves) { Manipulate(random, moves, random.Next(moves.Length)); } public static void Manipulate(IRandom random, MoveVector moves, int index) { moves[index].Enabled = !moves[index].Enabled; } protected override void Manipulate(IRandom random, MoveVector moves) { Apply(random, moves); } } }