Free cookie consent management tool by TermsFeed Policy Generator

source: addons/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/RangeConstraints/DoubleValueRange.cs @ 16996

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

#2520 Update plugin dependencies and references for HL.MetaOptimization for new persistence

File size: 2.1 KB
Line 
1using System;
2using System.Collections.Generic;
3using HeuristicLab.Common;
4using HeuristicLab.Core;
5using HeuristicLab.Data;
6using HEAL.Attic;
7
8namespace HeuristicLab.Problems.MetaOptimization {
9  [StorableType("4D296D1B-020F-49AF-A36A-D4948C4EC0B0")]
10  public class DoubleValueRange : Range<DoubleValue> {
11
12    public override DoubleValue LowerBound {
13      get {
14        return base.LowerBound;
15      }
16      set {
17        base.LowerBound = value;
18      }
19    }
20
21    public DoubleValueRange(DoubleValue lowerBound, DoubleValue upperBound, DoubleValue stepSize) : base(lowerBound, upperBound, stepSize) { }
22    [StorableConstructor]
23    protected DoubleValueRange(StorableConstructorFlag _) : base(_) { }
24    protected DoubleValueRange(DoubleValueRange original, Cloner cloner) : base(original, cloner) { }
25    public override IDeepCloneable Clone(Cloner cloner) {
26      return new DoubleValueRange(this, cloner);
27    }
28
29    protected override DoubleValue GetRandomSample(IRandom random) {
30      double val;
31      do {
32        val = Math.Round((random.NextDouble() * (UpperBound.Value - LowerBound.Value) + LowerBound.Value) / StepSize.Value, 0) * StepSize.Value;
33      } while (!IsInRange(val));
34      return new DoubleValue(val);
35    }
36
37    public double ApplyStepSize(double value) {
38      return (Math.Round(value / this.StepSize.Value, 0)) * this.StepSize.Value;
39    }
40
41    public bool IsInRange(double value) {
42      return value <= this.UpperBound.Value && value >= this.LowerBound.Value;
43    }
44
45    public override IEnumerable<DoubleValue> GetCombinations() {
46      var solutions = new List<DoubleValue>();
47      double value = LowerBound.Value;
48
49      while (value <= UpperBound.Value) {
50        solutions.Add(new DoubleValue(value));
51        value += StepSize.Value;
52        value = ApplyStepSize(value);
53      }
54      return solutions;
55    }
56
57    protected override double CalculateSimilarityValue(DoubleValue a, DoubleValue b) {
58      double range = UpperBound.Value - LowerBound.Value;
59      double diff = Math.Abs(a.Value - b.Value);
60      return Math.Max(0, (range - (diff * 2)) / range);
61    }
62  }
63}
Note: See TracBrowser for help on using the repository browser.