Free cookie consent management tool by TermsFeed Policy Generator

source: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/BealeEvaluator.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: 3.7 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;
27
28namespace HeuristicLab.Problems.TestFunctions {
29  /// <summary>
30  /// The Beale function is defined for 2 dimensions with an optimum of 0 at (3, 0.5).
31  /// It is implemented as described in Moré, J.J., Garbow, B., and Hillstrom, K. 1981. Testing unconstrained optimization software. ACM Transactions on Mathematical Software 7, pp. 136-140, ACM.
32  /// </summary>
33  [Item("BealeEvaluator", "Evaluates the Beale function on a given point. The optimum of this function is 0 at (3,0.5). It is implemented as described in Moré, J.J., Garbow, B., and Hillstrom, K. 1981. Testing unconstrained optimization software. ACM Transactions on Mathematical Software 7, pp. 136-140, ACM.")]
34  [StorableClass]
35  public class BealeEvaluator : SingleObjectiveTestFunctionProblemEvaluator {
36    /// <summary>
37    /// Returns false as the Beale function is a minimization problem.
38    /// </summary>
39    public override bool Maximization {
40      get { return false; }
41    }
42    /// <summary>
43    /// Gets the optimum function value (0).
44    /// </summary>
45    public override double BestKnownQuality {
46      get { return 0; }
47    }
48    /// <summary>
49    /// Gets the lower and upper bound of the function.
50    /// </summary>
51    public override DoubleMatrix Bounds {
52      get { return new DoubleMatrix(new double[,] { { -4.5, 4.5 } }); }
53    }
54    /// <summary>
55    /// Gets the minimum problem size (2).
56    /// </summary>
57    public override int MinimumProblemSize {
58      get { return 2; }
59    }
60    /// <summary>
61    /// Gets the maximum problem size (2).
62    /// </summary>
63    public override int MaximumProblemSize {
64      get { return 2; }
65    }
66
67    /// <summary>
68    /// Evaluates the test function for a specific <paramref name="point"/>.
69    /// </summary>
70    /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
71    /// <returns>The result value of the Beale function at the given point.</returns>
72    public static double Apply(RealVector point) {
73      double x1 = point[0], x2 = point[1];
74      double f1 = 1.5 - x1 * (1 - x2);
75      double f2 = 2.25 - x1 * (1 - x2 * x2);
76      double f3 = 2.625 - x1 * (1 - x2 * x2 * x2);
77      return (f1 * f1) + (f2 * f2) + (f3 * f3);
78    }
79
80    /// <summary>
81    /// Evaluates the test function for a specific <paramref name="point"/>.
82    /// </summary>
83    /// <remarks>Calls <see cref="Apply"/>.</remarks>
84    /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
85    /// <returns>The result value of the Beale function at the given point.</returns>
86    protected override double EvaluateFunction(RealVector point) {
87      return Apply(point);
88    }
89  }
90}
Note: See TracBrowser for help on using the repository browser.