Merge branch 'master' into boost.thread
[PaGMO.git] / GOclasses / problems / GOproblem.h
blob09a746df4b80a51467f880c0c3d47ef3e295aa90
1 /*
2 * GOProblem.h
3 * SeGMO
5 * Created by Dario Izzo on 6/4/08.
6 * Copyright 2008 __MyCompanyName__. All rights reserved.
8 */
10 #ifndef GOPROBLEM_H
11 #define GOPROBLEM_H
13 #include <vector>
15 class GOProblem {
16 public:
17 //Legacy constructor - when using it, remember than all members must be properly initialised afterwards
18 GOProblem() {};
19 //Constructor with vector bounds initialisers
20 GOProblem(int dimension, const std::vector<double>& lower, const std::vector <double>& upper);
21 //Constructor with array bounds initialisers
22 GOProblem(int dimension, const double lower[], const double upper[]);
23 //Virtual destructor - required because the class contains a pure virtual member function
24 virtual ~GOProblem() { };
26 //Bounds getters and setters (via copy)
27 void getBounds(std::vector<double>& lower, std::vector <double>& upper) const;
28 void setBounds(const std::vector<double>& lower, const std::vector <double>& upper);
29 void setBounds(const double lower[], const double upper[]); //this requires setDimension to be called first
31 //Bounds geeters and setters via reference
32 //read only mode
33 const std::vector<double>& getLB() const { return LB; }
34 const std::vector<double>& getUB() const { return UB; }
35 //rewrite mode
36 std::vector<double>& getLB() { return LB; }
37 std::vector<double>& getUB() { return UB; }
39 //Dimension getter and setter
40 int getDimension() const { return dimension; };
41 void setDimension(const int D) { dimension = D; };
43 //The objective function - must be implemented in subclasses
44 virtual double objfun(const std::vector<double>&) = 0;
46 private:
47 int dimension;
48 std::vector <double> LB;
49 std::vector <double> UB;
51 }; //end class GOProblems
53 #endif