CouenneFPpool.hpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef CouenneFPpool_hpp
00014 #define CouenneFPpool_hpp
00015
00016 #include <set>
00017
00018 #include "CouenneTypes.hpp"
00019 #include "CoinFinite.hpp"
00020 #include "CouenneProblem.hpp"
00021
00022 namespace Couenne {
00023
00024 class CouenneProblem;
00025 class CouenneFeasPump;
00026
00029 static enum what_to_compare {SUM_NINF = 0, SUM_INF, OBJVAL, ALL_VARS, INTEGER_VARS} comparedTerm_;
00030
00032 class CouenneFPsolution {
00033
00034 protected:
00035
00036 CouNumber *x_;
00037 int n_;
00038 int nNLinf_;
00039 int nIinf_;
00040 CouNumber objVal_;
00041 CouNumber maxNLinf_;
00042 CouNumber maxIinf_;
00043
00047
00048 bool copied_;
00049
00050 CouenneProblem *problem_;
00051
00052
00053
00054 public:
00055
00056 CouenneFPsolution (CouenneProblem *p, CouNumber *x, bool copied = false);
00057
00058 CouenneFPsolution (const CouenneFPsolution &src);
00059
00060 CouenneFPsolution &operator= (const CouenneFPsolution &src);
00061
00062 ~CouenneFPsolution ();
00063
00065 const int n () const {return n_;}
00066
00068 const double *x () const {return x_;}
00069
00071 bool compare (const CouenneFPsolution &other, enum what_to_compare comparedTerm) const;
00072 };
00073
00074
00076 inline bool operator< (const CouenneFPsolution &one,
00077 const CouenneFPsolution &two)
00078 {return one.compare (two, comparedTerm_);}
00079
00080
00082 class compareSol {
00083
00084 public:
00085 bool operator () (const CouenneFPsolution &one,
00086 const CouenneFPsolution &two) const;
00087 };
00088
00089
00091 class CouenneFPpool {
00092
00093 protected:
00094
00096 std::set <CouenneFPsolution, compareSol> set_;
00097
00099 CouenneProblem *problem_;
00100
00101 public:
00102
00104 CouenneFPpool (CouenneProblem *p, enum what_to_compare c):
00105 problem_ (p) {comparedTerm_ = c;}
00106
00108 CouenneFPpool (const CouenneFPpool &src);
00109
00111 CouenneFPpool &operator= (const CouenneFPpool &src);
00112
00114 std::set <CouenneFPsolution, compareSol> &Set ()
00115 {return set_;}
00116
00118 CouenneProblem *Problem ()
00119 {return problem_;}
00120
00123 void findClosestAndReplace (double *&sol, const double *nSol, int nvars) ;
00124 };
00125 }
00126
00127 #endif