1  #region License Information


2  /* HeuristicLab


3  * Copyright (C) 20022010 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 


22  using System;


23  using HeuristicLab.Core;


24  using HeuristicLab.Data;


25  using HeuristicLab.Encodings.RealVectorEncoding;


26  using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;


27 


28  namespace HeuristicLab.Problems.TestFunctions {


29  /// <summary>


30  /// The Sum Squares function is defined as sum(i * x_i * x_i) for i = 1..n


31  /// </summary>


32  [Item("SumSquaresEvaluator", "Evaluates the sum squares function on a given point. The optimum of this function is 0 at the origin. The Sum Squares function is defined as sum(i * x_i * x_i) for i = 1..n.")]


33  [StorableClass]


34  public class SumSquaresEvaluator : SingleObjectiveTestFunctionProblemEvaluator {


35  /// <summary>


36  /// Returns false as the Sum Squares 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 (1).


55  /// </summary>


56  public override int MinimumProblemSize {


57  get { return 1; }


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">Ndimensional point for which the test function should be evaluated.</param>


70  /// <returns>The result value of the Sum Squares function at the given point.</returns>


71  public static double Apply(RealVector point) {


72  double result = 0;


73  for (int i = 0; i < point.Length; i++) {


74  result += (i + 1) * point[i] * point[i];


75  }


76  return result;


77  }


78 


79  /// <summary>


80  /// Evaluates the test function for a specific <paramref name="point"/>.


81  /// </summary>


82  /// <remarks>Calls <see cref="Apply"/>.</remarks>


83  /// <param name="point">Ndimensional point for which the test function should be evaluated.</param>


84  /// <returns>The result value of the Sum Squares function at the given point.</returns>


85  protected override double EvaluateFunction(RealVector point) {


86  return Apply(point);


87  }


88  }


89  }

