PaGMO  1.1.5
cec2013.h
1 /*****************************************************************************
2  * Copyright (C) 2004-2015 The PaGMO development team, *
3  * Advanced Concepts Team (ACT), European Space Agency (ESA) *
4  * *
5  * https://github.com/esa/pagmo *
6  * *
7  * act@esa.int *
8  * *
9  * This program is free software; you can redistribute it and/or modify *
10  * it under the terms of the GNU General Public License as published by *
11  * the Free Software Foundation; either version 2 of the License, or *
12  * (at your option) any later version. *
13  * *
14  * This program is distributed in the hope that it will be useful, *
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
17  * GNU General Public License for more details. *
18  * *
19  * You should have received a copy of the GNU General Public License *
20  * along with this program; if not, write to the *
21  * Free Software Foundation, Inc., *
22  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
23  *****************************************************************************/
24 
25 #ifndef PAGMO_PROBLEM_CEC2013_H
26 #define PAGMO_PROBLEM_CEC2013_H
27 
28 #include <string>
29 
30 #include "../serialization.h"
31 #include "../types.h"
32 #include "base.h"
33 
34 namespace pagmo{ namespace problem {
35 
37 
54 class __PAGMO_VISIBLE cec2013 : public base
55 {
56  public:
57  cec2013(unsigned int = 1, problem::base::size_type = 30, const std::string & = "input_data/");
58  base_ptr clone() const;
59  std::string get_name() const;
60 
63 
68  std::vector<double> origin_shift() const {return m_origin_shift;}
70  protected:
71  void objfun_impl(fitness_vector &, const decision_vector &) const;
72  private:
73  void sphere_func (const double *, double *, int , const double *,const double *, int) const; /* Sphere */
74  void ellips_func(const double *, double *, int , const double *,const double *, int) const; /* Ellipsoidal */
75  void bent_cigar_func(const double *, double *, int , const double *,const double *, int) const; /* Discus */
76  void discus_func(const double *, double *, int , const double *,const double *, int) const; /* Bent_Cigar */
77  void dif_powers_func(const double *, double *, int , const double *,const double *, int) const; /* Different Powers */
78  void rosenbrock_func (const double *, double *, int , const double *,const double *, int) const; /* Rosenbrock's */
79  void schaffer_F7_func (const double *, double *, int , const double *,const double *, int) const; /* Schwefel's F7 */
80  void ackley_func (const double *, double *, int , const double *,const double *, int) const; /* Ackley's */
81  void rastrigin_func (const double *, double *, int , const double *,const double *, int) const; /* Rastrigin's */
82  void weierstrass_func (const double *, double *, int , const double *,const double *, int) const; /* Weierstrass's */
83  void griewank_func (const double *, double *, int , const double *,const double *, int) const; /* Griewank's */
84  void schwefel_func (const double *, double *, int , const double *,const double *, int) const; /* Schwefel's */
85  void katsuura_func (const double *, double *, int , const double *,const double *, int) const; /* Katsuura */
86  void bi_rastrigin_func (const double *, double *, int , const double *,const double *, int) const; /* Lunacek Bi_rastrigin */
87  void grie_rosen_func (const double *, double *, int , const double *,const double *, int) const; /* Griewank-Rosenbrock */
88  void escaffer6_func (const double *, double *, int , const double *,const double *, int) const; /* Expanded Scaffer¡¯s F6 */
89  void step_rastrigin_func (const double *, double *, int , const double *,const double *, int) const; /* Noncontinuous Rastrigin's */
90  void cf01 (const double *, double *, int , const double *,const double *, int) const; /* Composition Function 1 */
91  void cf02 (const double *, double *, int , const double *,const double *, int) const; /* Composition Function 2 */
92  void cf03 (const double *, double *, int , const double *,const double *, int) const; /* Composition Function 3 */
93  void cf04 (const double *, double *, int , const double *,const double *, int) const; /* Composition Function 4 */
94  void cf05 (const double *, double *, int , const double *,const double *, int) const; /* Composition Function 5 */
95  void cf06 (const double *, double *, int , const double *,const double *, int) const; /* Composition Function 6 */
96  void cf07 (const double *, double *, int , const double *,const double *, int) const; /* Composition Function 7 */
97  void cf08 (const double *, double *, int , const double *,const double *, int) const; /* Composition Function 8 */
98  void shiftfunc (const double*,double*,int,const double*) const;
99  void rotatefunc (const double *,double*,int, const double *) const;
100  void asyfunc (const double *, double *, int, double) const;
101  void oszfunc (const double *, double *, int) const;
102  void cf_cal(const double *, double *, int, const double *,double *,double *,double *,int) const;
103 
104  friend class boost::serialization::access;
105  template <class Archive>
106  void serialize(Archive &ar, const unsigned int)
107  {
108  ar & boost::serialization::base_object<base>(*this);
109  ar & const_cast<unsigned int&>(m_problem_number);
110  ar & m_rotation_matrix;
111  ar & m_origin_shift;
112  }
113  const unsigned int m_problem_number;
114  std::vector<double> m_rotation_matrix;
115  std::vector<double> m_origin_shift;
116 
117  // These are pre-allocated for speed, need not to be serialized
118  mutable std::vector<double> m_y;
119  mutable std::vector<double> m_z;
120 };
121 
122 }} //namespaces
123 
124 BOOST_CLASS_EXPORT_KEY(pagmo::problem::cec2013)
125 
126 #endif
Root PaGMO namespace.
boost::shared_ptr< base > base_ptr
Alias for shared pointer to base problem.
Definition: problem/base.h:62
std::vector< double > decision_vector
Decision vector type.
Definition: types.h:40
std::vector< double > origin_shift() const
Returns the origin shift used by the problem.
Definition: cec2013.h:68
Base problem class.
Definition: problem/base.h:148
The CEC 2013 problems: Real-Parameter Single Objective Optimization Competition.
Definition: cec2013.h:54
std::vector< double > fitness_vector
Fitness vector type.
Definition: types.h:42
decision_vector::size_type size_type
Problem's size type: the same as pagmo::decision_vector's size type.
Definition: problem/base.h:160