Free cookie consent management tool by TermsFeed Policy Generator

source: trunk/sources/HeuristicLab.Problems.TestFunctions/3.3/Evaluators/LevyEvaluator.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.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;
27
28namespace HeuristicLab.Problems.TestFunctions {
29  /// <summary>
30  /// The Levy function is implemented as described on http://www-optima.amp.i.kyoto-u.ac.jp/member/student/hedar/Hedar_files/TestGO_files/Page2056.htm, last accessed April 12th, 2010.
31  /// </summary>
32  [Item("LevyEvaluator", "Evaluates the Levy function on a given point. The optimum of this function is 0 at (1,1,...,1). It is implemented as described on http://www-optima.amp.i.kyoto-u.ac.jp/member/student/hedar/Hedar_files/TestGO_files/Page2056.htm, last accessed April 12th, 2010.")]
33  [StorableClass]
34  public class LevyEvaluator : SingleObjectiveTestFunctionProblemEvaluator {
35    /// <summary>
36    /// Returns false as the Levy function is a minimization problem.
37    /// </summary>
38    public override bool Maximization {
39      get { return false; }
40    }
41    /// <summary>
42    /// Gets the optimum function value (0).
43    /// </summary>
44    public override double BestKnownQuality {
45      get { return 0; }
46    }
47    /// <summary>
48    /// Gets the lower and upper bound of the function.
49    /// </summary>
50    public override DoubleMatrix Bounds {
51      get { return new DoubleMatrix(new double[,] { { -10, 10 } }); }
52    }
53    /// <summary>
54    /// Gets the minimum problem size (2).
55    /// </summary>
56    public override int MinimumProblemSize {
57      get { return 2; }
58    }
59    /// <summary>
60    /// Gets the (theoretical) maximum problem size (2^31 - 1).
61    /// </summary>
62    public override int MaximumProblemSize {
63      get { return int.MaxValue; }
64    }
65
66    /// <summary>
67    /// Evaluates the test function for a specific <paramref name="point"/>.
68    /// </summary>
69    /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
70    /// <returns>The result value of the Levy function at the given point.</returns>
71    public static double Apply(RealVector point) {
72      int length = point.Length;
73      double[] z = new double[length];
74      double s;
75
76      for (int i = 0; i < length; i++) {
77        z[i] = 1 + (point[i] - 1) / 4;
78      }
79
80      s = Math.Sin(Math.PI * z[0]);
81      s *= s;
82
83      for (int i = 0; i < length - 1; i++) {
84        s += (z[i] - 1) * (z[i] - 1) * (1 + 10 * Math.Pow(Math.Sin(Math.PI * z[i] + 1), 2));
85      }
86
87      return s + Math.Pow(z[length - 1] - 1, 2) * (1 + Math.Pow(Math.Sin(2 * Math.PI * z[length - 1]), 2));
88    }
89
90    /// <summary>
91    /// Evaluates the test function for a specific <paramref name="point"/>.
92    /// </summary>
93    /// <remarks>Calls <see cref="Apply"/>.</remarks>
94    /// <param name="point">N-dimensional point for which the test function should be evaluated.</param>
95    /// <returns>The result value of the Levy function at the given point.</returns>
96    protected override double EvaluateFunction(RealVector point) {
97      return Apply(point);
98    }
99  }
100}
Note: See TracBrowser for help on using the repository browser.