Free cookie consent management tool by TermsFeed Policy Generator

source: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/RastriginEvaluator.cs @ 3315

Last change on this file since 3315 was 3315, checked in by abeham, 14 years ago

Documented some of the test functions with literature references.
Renamed Griewangk function as it is actually called Griewank function.
Schwefel is hard to find, used self-citation as Potter and DeJong's description from 1994 seems wrong
Levy is almost impossible to find and defined only for 2 variables, the implementation looks fishy (there was also a bug)
Booth, and Matyas are also just from a single website
Still missing is Zakharov and SumSquares
#934

File size: 4.9 KB
Line 
1#region License Information
2/* HeuristicLab
3 * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
4 *
5 * This file is part of HeuristicLab.
6 *
7 * HeuristicLab is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * HeuristicLab is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
19 */
20#endregion
21
22using System;
23using HeuristicLab.Core;
24using HeuristicLab.Data;
25using HeuristicLab.Encodings.RealVectorEncoding;
26using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
27using HeuristicLab.Parameters;
28
29namespace HeuristicLab.Problems.TestFunctions {
30  /// <summary>
31  /// The generalized Rastrigin function y = Sum((x_i)^2 + A * (1 - Cos(2pi*x_i))) is a highly multimodal function that has its optimal value 0 at the origin.
32  /// It is implemented as described in Eiben, A.E. and Smith, J.E. 2003. Introduction to Evolutionary Computation. Natural Computing Series, Springer-Verlag Berlin Heidelberg.
33  /// </summary
34  [Item("RastriginEvaluator", "Evaluates the generalized Rastrigin function y = Sum((x_i)^2 + A * (1 - Cos(2pi*x_i))) on a given point. The optimum of this function is 0 at the origin. It is implemented as described in Eiben, A.E. and Smith, J.E. 2003. Introduction to Evolutionary Computation. Natural Computing Series, Springer-Verlag Berlin Heidelberg.")]
35  [StorableClass]
36  public class RastriginEvaluator : SingleObjectiveTestFunctionProblemEvaluator {
37    /// <summary>
38    /// Returns false as the Rastrigin function is a minimization problem.
39    /// </summary>
40    public override bool Maximization {
41      get { return false; }
42    }
43    /// <summary>
44    /// Gets the optimum function value (0).
45    /// </summary>
46    public override double BestKnownQuality {
47      get { return 0; }
48    }
49    /// <summary>
50    /// Gets the lower and upper bound of the function.
51    /// </summary>
52    public override DoubleMatrix Bounds {
53      get { return new DoubleMatrix(new double[,] { { -5.12, 5.12 } }); }
54    }
55    /// <summary>
56    /// Gets the minimum problem size (1).
57    /// </summary>
58    public override int MinimumProblemSize {
59      get { return 1; }
60    }
61    /// <summary>
62    /// Gets the (theoretical) maximum problem size (2^31 - 1).
63    /// </summary>
64    public override int MaximumProblemSize {
65      get { return int.MaxValue; }
66    }
67    /// <summary>
68    /// The parameter A is a parameter of the objective function y = Sum((x_i)^2 + A * (1 - Cos(2pi*x_i))). Default is A = 10.
69    /// </summary>
70    public ValueParameter<DoubleValue> AParameter {
71      get { return (ValueParameter<DoubleValue>)Parameters["A"]; }
72    }
73    /// <summary>
74    /// The parameter A is a parameter of the objective function y = Sum((x_i)^2 + A * (1 - Cos(2pi*x_i))). Default is A = 10.
75    /// </summary>
76    public DoubleValue A {
77      get { return AParameter.Value; }
78      set { if (value != null) AParameter.Value = value; }
79    }
80
81    /// <summary>
82    /// Initializes a new instance of the RastriginEvaluator with one parameter (<c>A</c>).
83    /// </summary>
84    public RastriginEvaluator()
85      : base() {
86      Parameters.Add(new ValueParameter<DoubleValue>("A", "The parameter A is a parameter of the objective function y = Sum((x_i)^2 + A * (1 - Cos(2pi*x_i))). Default is A = 10.", new DoubleValue(10)));
87    }
88
89    /// <summary>
90    /// Evaluates the test function for a specific <paramref name="point"/>.
91    /// </summary>
92    /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
93    /// <returns>The result value of the Rastrigin function at the given point.</returns>
94    public static double Apply(RealVector point, double a) {
95      double result = a * point.Length;
96      for (int i = 0; i < point.Length; i++) {
97        result += point[i] * point[i];
98        result -= a * Math.Cos(2 * Math.PI * point[i]);
99      }
100      return (result);
101    }
102
103    /// <summary>
104    /// Evaluates the test function for a specific <paramref name="point"/>.
105    /// </summary>
106    /// <remarks>Calls <see cref="Apply"/>.</remarks>
107    /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
108    /// <returns>The result value of the Rastrigin function at the given point.</returns>
109    protected override double EvaluateFunction(RealVector point) {
110      return Apply(point, A.Value);
111    }
112  }
113}
Note: See TracBrowser for help on using the repository browser.