Free cookie consent management tool by TermsFeed Policy Generator

source: addons/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Operators/Manipulators/IntValue/NormalIntValueManipulator.cs @ 16574

Last change on this file since 16574 was 16574, checked in by gkronber, 5 years ago

#2520: changed HeuristicLab.MetaOptimization addon to compile with new HL.Persistence

File size: 1.8 KB
Line 
1using HeuristicLab.Common;
2using HeuristicLab.Core;
3using HeuristicLab.Data;
4using HeuristicLab.Encodings.RealVectorEncoding;
5using HeuristicLab.Operators;
6using HeuristicLab.Optimization;
7using HeuristicLab.Parameters;
8using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
9using HEAL.Attic;
10
11namespace HeuristicLab.Problems.MetaOptimization {
12  [StorableType("8F403FDC-233F-4FFC-A1BF-D696033DDB2D")]
13  public class NormalIntValueManipulator : SingleSuccessorOperator, IIntValueManipulator, IStochasticOperator {
14
15    public ILookupParameter<IRandom> RandomParameter {
16      get { return (LookupParameter<IRandom>)Parameters["Random"]; }
17    }
18   
19    public NormalIntValueManipulator() { }
20    [StorableConstructor]
21    protected NormalIntValueManipulator(StorableConstructorFlag _) : base(_) { }
22    protected NormalIntValueManipulator(NormalIntValueManipulator original, Cloner cloner)
23      : base(original, cloner) {
24    }
25    public override IDeepCloneable Clone(Cloner cloner) {
26      return new NormalIntValueManipulator(this, cloner);
27    }
28
29    // todo: override apply
30   
31    public void Apply(IRandom random, IntValue value, IntValueRange range) {
32      ApplyStatic(random, value, range);
33    }
34
35    public static void ApplyStatic(IRandom random, IntValue value, IntValueRange range) {
36      var strategy = new RealVector(new double[] { (range.UpperBound.Value - range.LowerBound.Value) / 10 }); // todo: add strategy parameter
37      var vector = new RealVector(new double[] { value.Value });
38      int val = value.Value;
39
40      do {
41        vector[0] = val;
42        NormalAllPositionsManipulator.Apply(random, vector, strategy);
43        value.Value = (int)vector[0];
44        value.Value = range.ApplyStepSize(value.Value);
45      } while (!range.IsInRange(value.Value));
46    }
47  }
48}
Note: See TracBrowser for help on using the repository browser.