Changeset 11434


Ignore:
Timestamp:
10/09/14 11:15:59 (5 years ago)
Author:
mkommend
Message:

#2259: Changed ValueGenerator to work with decimals instead of doubles to achieve a higher accuracy and adapted all problem instance providers accordingly.

Location:
trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression
Files:
22 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionEight.cs

    r11171 r11434  
    4848    protected override List<List<double>> GenerateValues() {
    4949      List<List<double>> data = new List<List<double>>();
    50       data.Add(ValueGenerator.GenerateSteps(0, 100, 1).ToList());
    51       data[0].AddRange(ValueGenerator.GenerateSteps(0, 100, 0.1));
     50      data.Add(ValueGenerator.GenerateSteps(0m, 100, 1).Select(v => (double)v).ToList());
     51      data[0].AddRange(ValueGenerator.GenerateSteps(0m, 100, 0.1m).Select(v => (double)v));
    5252
    5353      double x;
  • trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionEleven.cs

    r11171 r11434  
    4949    protected override List<List<double>> GenerateValues() {
    5050      List<List<double>> data = new List<List<double>>();
    51       List<double> oneVariableTestData = ValueGenerator.GenerateSteps(-3, 3, 0.01).ToList();
     51      List<double> oneVariableTestData = ValueGenerator.GenerateSteps(-3, 3, 0.01m).Select(v => (double)v).ToList();
    5252      List<List<double>> testData = new List<List<double>>() { oneVariableTestData, oneVariableTestData };
    5353
  • trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionFifteen.cs

    r11171 r11434  
    4848    protected override List<List<double>> GenerateValues() {
    4949      List<List<double>> data = new List<List<double>>();
    50       List<double> oneVariableTestData = ValueGenerator.GenerateSteps(-3, 3, 0.01).ToList();
     50      List<double> oneVariableTestData = ValueGenerator.GenerateSteps(-3, 3, 0.01m).Select(v => (double)v).ToList();
    5151      List<List<double>> testData = new List<List<double>>() { oneVariableTestData, oneVariableTestData };
    5252
  • trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionFour.cs

    r11171 r11434  
    4949    protected override List<List<double>> GenerateValues() {
    5050      List<List<double>> data = new List<List<double>>();
    51       data.Add(ValueGenerator.GenerateSteps(0, 10, 0.05).ToList());
    52       data[0].AddRange(ValueGenerator.GenerateSteps(0.05, 10.05, 0.05));
     51      data.Add(ValueGenerator.GenerateSteps(0, 10, 0.05m).Select(v => (double)v).ToList());
     52      data[0].AddRange(ValueGenerator.GenerateSteps(0.05m, 10.05m, 0.05m).Select(v => (double)v));
    5353
    5454      double x;
  • trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionFourteen.cs

    r11171 r11434  
    4848    protected override List<List<double>> GenerateValues() {
    4949      List<List<double>> data = new List<List<double>>();
    50       List<double> oneVariableTestData = ValueGenerator.GenerateSteps(-3, 3, 0.01).ToList();
     50      List<double> oneVariableTestData = ValueGenerator.GenerateSteps(-3, 3, 0.01m).Select(v => (double) v).ToList();
    5151      List<List<double>> testData = new List<List<double>>() { oneVariableTestData, oneVariableTestData };
    5252
  • trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionNine.cs

    r11171 r11434  
    4848    protected override List<List<double>> GenerateValues() {
    4949      List<List<double>> data = new List<List<double>>();
    50       data.Add(ValueGenerator.GenerateSteps(0, 100, 1).ToList());
    51       data[0].AddRange(ValueGenerator.GenerateSteps(0, 100, 0.1));
     50      data.Add(ValueGenerator.GenerateSteps(0m, 100, 1).Select(v => (double)v).ToList());
     51      data[0].AddRange(ValueGenerator.GenerateSteps(0, 100, 0.1m).Select(v => (double)v));
    5252
    5353      double x;
  • trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionOne.cs

    r11171 r11434  
    4848    protected override List<List<double>> GenerateValues() {
    4949      List<List<double>> data = new List<List<double>>();
    50       data.Add(ValueGenerator.GenerateSteps(-1, 1, 0.1).ToList());
    51       data[0].AddRange(ValueGenerator.GenerateSteps(-1, 1, 0.001));
     50      data.Add(ValueGenerator.GenerateSteps(-1, 1, 0.1m).Select(v => (double)v).ToList());
     51      data[0].AddRange(ValueGenerator.GenerateSteps(-1, 1, 0.001m).Select(v => (double)v));
    5252
    5353      double x;
  • trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionSeven.cs

    r11171 r11434  
    4949    protected override List<List<double>> GenerateValues() {
    5050      List<List<double>> data = new List<List<double>>();
    51       data.Add(ValueGenerator.GenerateSteps(1, 100, 1).ToList());
    52       data[0].AddRange(ValueGenerator.GenerateSteps(1, 100, 0.1));
     51      data.Add(ValueGenerator.GenerateSteps(1m, 100, 1).Select(v => (double)v).ToList());
     52      data[0].AddRange(ValueGenerator.GenerateSteps(1m, 100, 0.1m).Select(v => (double)v));
    5353
    5454      double x;
  • trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionSix.cs

    r11171 r11434  
    4848    protected override List<List<double>> GenerateValues() {
    4949      List<List<double>> data = new List<List<double>>();
    50       data.Add(ValueGenerator.GenerateSteps(1, 50, 1).ToList());
    51       data[0].AddRange(ValueGenerator.GenerateSteps(1, 120, 1));
     50      data.Add(ValueGenerator.GenerateSteps(1m, 50, 1).Select(v => (double)v).ToList());
     51      data[0].AddRange(ValueGenerator.GenerateSteps(1m, 120, 1).Select(v => (double)v));
    5252
    5353      double x;
  • trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionTen.cs

    r11171 r11434  
    4949      List<List<double>> data = new List<List<double>>();
    5050
    51       List<double> oneVariableTestData = ValueGenerator.GenerateSteps(0, 1, 0.01).ToList();
     51      List<double> oneVariableTestData = ValueGenerator.GenerateSteps(0, 1, 0.01m).Select(v => (double)v).ToList();
    5252      List<List<double>> testData = new List<List<double>>() { oneVariableTestData, oneVariableTestData };
    5353
  • trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionThirteen.cs

    r11171 r11434  
    4848    protected override List<List<double>> GenerateValues() {
    4949      List<List<double>> data = new List<List<double>>();
    50       List<double> oneVariableTestData = ValueGenerator.GenerateSteps(-3, 3, 0.01).ToList();
     50      List<double> oneVariableTestData = ValueGenerator.GenerateSteps(-3, 3, 0.01m).Select(v => (double)v).ToList();
    5151      List<List<double>> testData = new List<List<double>>() { oneVariableTestData, oneVariableTestData };
    5252
  • trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionThree.cs

    r11171 r11434  
    4848    protected override List<List<double>> GenerateValues() {
    4949      List<List<double>> data = new List<List<double>>();
    50       data.Add(ValueGenerator.GenerateSteps(-3, 3, 0.1).ToList());
    51       data[0].AddRange(ValueGenerator.GenerateSteps(-3, 3, 0.001));
     50      data.Add(ValueGenerator.GenerateSteps(-3, 3, 0.1m).Select(v => (double)v).ToList());
     51      data[0].AddRange(ValueGenerator.GenerateSteps(-3, 3, 0.001m).Select(v => (double)v));
    5252
    5353      double x;
  • trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionTwelve.cs

    r11171 r11434  
    4848    protected override List<List<double>> GenerateValues() {
    4949      List<List<double>> data = new List<List<double>>();
    50       List<double> oneVariableTestData = ValueGenerator.GenerateSteps(-3, 3, 0.01).ToList();
     50      List<double> oneVariableTestData = ValueGenerator.GenerateSteps(-3, 3, 0.01m).Select(v => (double)v).ToList();
    5151      List<List<double>> testData = new List<List<double>>() { oneVariableTestData, oneVariableTestData };
    5252
  • trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Keijzer/KeijzerFunctionTwo.cs

    r11171 r11434  
    4848    protected override List<List<double>> GenerateValues() {
    4949      List<List<double>> data = new List<List<double>>();
    50       data.Add(ValueGenerator.GenerateSteps(-2, 2, 0.1).ToList());
    51       data[0].AddRange(ValueGenerator.GenerateSteps(-2, 2, 0.001));
     50      data.Add(ValueGenerator.GenerateSteps(-2, 2, 0.1m).Select(v => (double)v).ToList());
     51      data[0].AddRange(ValueGenerator.GenerateSteps(-2, 2, 0.001m).Select(v => (double)v));
    5252
    5353      double x;
  • trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/ValueGenerator.cs

    r11348 r11434  
    3131
    3232    /// <summary>
    33     /// Generates a sequence of evenly spaced points between start and end (inclusive!).
     33    /// Generates a sequence of evenly spaced points by returning the start value and adding the stepwidth until the end is reached or surpassed.
     34    ///
    3435    /// </summary>
    3536    /// <param name="start">The smallest and first value of the sequence.</param>
    3637    /// <param name="end">The largest and last value of the sequence.</param>
    3738    /// <param name="stepWidth">The step size between subsequent values.</param>
    38     /// <returns>An sequence of values from start to end (inclusive)</returns>
     39    /// <returns>A sequence of values from start to end (inclusive)</returns>
     40    [Obsolete("It is recommended to use the decimal overload to achieve a higher numerical accuracy.")]
    3941    public static IEnumerable<double> GenerateSteps(double start, double end, double stepWidth) {
    40       if (stepWidth.IsAlmost(0))
     42      //mkommend: IEnumerable.Cast fails due to boxing and unboxing of the involved types
     43      // http://referencesource.microsoft.com/#System.Core/System/Linq/Enumerable.cs#27bb217a6d5457ec
     44      // http://blogs.msdn.com/b/ericlippert/archive/2009/03/19/representation-and-identity.aspx     
     45
     46      return GenerateSteps((decimal)start, (decimal)end, (decimal)stepWidth).Select(x => (double)x);
     47    }
     48
     49    /// <summary>
     50    /// Generates a sequence of evenly spaced points by returning the start value and adding the stepwidth until the end is reached or surpassed.
     51    /// </summary>
     52    /// <param name="start">The smallest and first value of the sequence.</param>
     53    /// <param name="end">The largest and last value of the sequence.</param>
     54    /// <param name="stepWidth">The step size between subsequent values.</param>
     55    /// <returns>A sequence of values from start to end</returns>
     56    public static IEnumerable<decimal> GenerateSteps(decimal start, decimal end, decimal stepWidth) {
     57      if (stepWidth == 0)
    4158        throw new ArgumentException("The step width cannot be zero.");
    4259      if (start < end && stepWidth < 0)
     
    4461      if (start > end && stepWidth > 0)
    4562        throw new ArgumentException("The step width must be smaller than zero for decreasing sequences (start > end).");
    46       double x = start;
    47       // x<=end could skip the last value because of numerical problems
    48       while (x < end || x.IsAlmost(end)) {
     63
     64      decimal x = start;
     65      while (x <= end) {
    4966        yield return x;
    5067        x += stepWidth;
    5168      }
    52     }
    53 
    54     /// <summary>
    55     /// Generate a logarithmic sequence between start and end by applying a power-of-10 function to an underlying evenly spaced sequence
    56     /// </summary>
    57     /// <param name="start">The start of the sequence</param>
    58     /// <param name="end">The end of the sequence</param>
    59     /// <param name="stepWidth">The stepwidth for the original sequence before the points are transformed</param>
    60     /// <returns>A logarithmic sequence from start to end (inclusive)</returns>
    61     public static IEnumerable<double> GenerateLogarithmicSteps(double start, double end, double stepWidth) {
    62       return GenerateSteps(start, end, stepWidth, x => Math.Pow(10, x));
    6369    }
    6470
     
    7177    /// <param name="transform">The transform function</param>
    7278    /// <returns></returns>
     79    [Obsolete("It is recommended to use the decimal overload to achieve a higher numerical accuracy.")]
    7380    public static IEnumerable<double> GenerateSteps(double start, double end, double stepWidth, Func<double, double> transform) {
     81      return GenerateSteps(start,end, stepWidth).Select(transform);
     82    }
     83
     84    /// <summary>
     85    /// Generates a sequence of points between start and end according to given transformation
     86    /// </summary>
     87    /// <param name="start">The smallest and first value of the sequence.</param>
     88    /// <param name="end">The largest and last value of the sequence.</param>
     89    /// <param name="stepWidth">The step size between subsequent values (before transform)</param>
     90    /// <param name="transform">The transform function</param>
     91    /// <returns></returns>
     92    public static IEnumerable<decimal> GenerateSteps(decimal start, decimal end, decimal stepWidth, Func<decimal, decimal> transform) {
    7493      return GenerateSteps(start, end, stepWidth).Select(transform);
    7594    }
  • trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Various/SpatialCoevolution.cs

    r11171 r11434  
    5353      List<List<double>> data = new List<List<double>>();
    5454
    55       List<double> evenlySpacedSequence = ValueGenerator.GenerateSteps(-5, 5, 0.4).ToList();
     55      List<double> evenlySpacedSequence = ValueGenerator.GenerateSteps(-5, 5, 0.4m).Select(v => (double)v).ToList();
    5656      List<List<double>> trainingData = new List<List<double>>() { evenlySpacedSequence, evenlySpacedSequence };
    5757      var combinations = ValueGenerator.GenerateAllCombinationsOfValuesInLists(trainingData).ToList();
  • trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/KotanchekFunction.cs

    r11171 r11434  
    4949      List<List<double>> data = new List<List<double>>();
    5050
    51       List<double> oneVariableTestData = ValueGenerator.GenerateSteps(-0.2, 4.2, 0.1).ToList();
     51      List<double> oneVariableTestData = ValueGenerator.GenerateSteps(-0.2m, 4.2m, 0.1m).Select(v => (double)v).ToList();
    5252      List<List<double>> testData = new List<List<double>>() { oneVariableTestData, oneVariableTestData };
    5353      var combinations = ValueGenerator.GenerateAllCombinationsOfValuesInLists(testData).ToList<IEnumerable<double>>();
  • trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/RationalPolynomialThreeDimensional.cs

    r11171 r11434  
    5555
    5656      List<List<double>> testData = new List<List<double>>() {
    57         ValueGenerator.GenerateSteps(-0.05, 2.05, 0.15).ToList(),
    58         ValueGenerator.GenerateSteps( 0.95, 2.05, 0.1).ToList(),
    59         ValueGenerator.GenerateSteps(-0.05, 2.05, 0.15).ToList()
     57        ValueGenerator.GenerateSteps(-0.05m, 2.05m, 0.15m).Select(v => (double)v).ToList(),
     58        ValueGenerator.GenerateSteps( 0.95m, 2.05m, 0.1m).Select(v => (double)v).ToList(),
     59        ValueGenerator.GenerateSteps(-0.05m, 2.05m, 0.15m).Select(v => (double)v).ToList()
    6060      };
    6161
  • trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/RationalPolynomialTwoDimensional.cs

    r11171 r11434  
    4949      List<List<double>> data = new List<List<double>>();
    5050
    51       List<double> oneVariableTestData = ValueGenerator.GenerateSteps(-0.25, 6.35, 0.2).ToList();
     51      List<double> oneVariableTestData = ValueGenerator.GenerateSteps(-0.25m, 6.35m, 0.2m).Select(v => (double)v).ToList();
    5252
    5353      List<List<double>> testData = new List<List<double>>() { oneVariableTestData, oneVariableTestData };
  • trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/SalutowiczFunctionOneDimensional.cs

    r11171 r11434  
    4848    protected override List<List<double>> GenerateValues() {
    4949      List<List<double>> data = new List<List<double>>();
    50       data.Add(ValueGenerator.GenerateSteps(0.05, 10, 0.1).ToList());
    51       data[0].AddRange(ValueGenerator.GenerateSteps(-0.5, 10.5, 0.05));
     50      data.Add(ValueGenerator.GenerateSteps(0.05m, 10, 0.1m).Select(v => (double)v).ToList());
     51      data[0].AddRange(ValueGenerator.GenerateSteps(-0.5m, 10.5m, 0.05m).Select(v => (double)v));
    5252
    5353      double x;
  • trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/SalutowiczFunctionTwoDimensional.cs

    r11171 r11434  
    4949      List<List<double>> data = new List<List<double>>();
    5050      List<List<double>> trainingData = new List<List<double>>() {
    51         ValueGenerator.GenerateSteps(0.05, 10, 0.1).ToList(),
    52         ValueGenerator.GenerateSteps(0.05, 10.05, 2).ToList()
     51        ValueGenerator.GenerateSteps(0.05m, 10, 0.1m).Select(v => (double)v).ToList(),
     52        ValueGenerator.GenerateSteps(0.05m, 10.05m, 2).Select(v => (double)v).ToList()
    5353      };
    5454
    5555      List<List<double>> testData = new List<List<double>>() {
    56         ValueGenerator.GenerateSteps(-0.5, 10.5, 0.05).ToList(),
    57         ValueGenerator.GenerateSteps(-0.5, 10.5, 0.5).ToList()
     56        ValueGenerator.GenerateSteps(-0.5m, 10.5m, 0.05m).Select(v => (double)v).ToList(),
     57        ValueGenerator.GenerateSteps(-0.5m, 10.5m, 0.5m).Select(v => (double)v).ToList()
    5858      };
    5959
  • trunk/sources/HeuristicLab.Problems.Instances.DataAnalysis/3.3/Regression/Vladislavleva/SineCosineFunction.cs

    r11171 r11434  
    4848    protected override List<List<double>> GenerateValues() {
    4949      List<List<double>> data = new List<List<double>>();
    50       List<double> oneVariableTestData = ValueGenerator.GenerateSteps(-0.05, 6.05, 0.02).ToList();
     50      List<double> oneVariableTestData = ValueGenerator.GenerateSteps(-0.05m, 6.05m, 0.02m).Select(v => (double)v).ToList();
    5151      List<List<double>> testData = new List<List<double>>() { oneVariableTestData, oneVariableTestData };
    5252      var combinations = ValueGenerator.GenerateAllCombinationsOfValuesInLists(testData).ToList<IEnumerable<double>>();
Note: See TracChangeset for help on using the changeset viewer.