using HeuristicLab.Common; using HeuristicLab.Core; using HeuristicLab.Data; using HeuristicLab.Encodings.RealVectorEncoding; using HeuristicLab.Operators; using HeuristicLab.Optimization; using HeuristicLab.Parameters; using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; using HEAL.Attic; namespace HeuristicLab.Problems.MetaOptimization { [StorableType("8F403FDC-233F-4FFC-A1BF-D696033DDB2D")] public class NormalIntValueManipulator : SingleSuccessorOperator, IIntValueManipulator, IStochasticOperator { public ILookupParameter RandomParameter { get { return (LookupParameter)Parameters["Random"]; } } public NormalIntValueManipulator() { } [StorableConstructor] protected NormalIntValueManipulator(StorableConstructorFlag _) : base(_) { } protected NormalIntValueManipulator(NormalIntValueManipulator original, Cloner cloner) : base(original, cloner) { } public override IDeepCloneable Clone(Cloner cloner) { return new NormalIntValueManipulator(this, cloner); } // todo: override apply public void Apply(IRandom random, IntValue value, IntValueRange range) { ApplyStatic(random, value, range); } public static void ApplyStatic(IRandom random, IntValue value, IntValueRange range) { var strategy = new RealVector(new double[] { (range.UpperBound.Value - range.LowerBound.Value) / 10 }); // todo: add strategy parameter var vector = new RealVector(new double[] { value.Value }); int val = value.Value; do { vector[0] = val; NormalAllPositionsManipulator.Apply(random, vector, strategy); value.Value = (int)vector[0]; value.Value = range.ApplyStepSize(value.Value); } while (!range.IsInRange(value.Value)); } } }