00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef COUENNECHOOSESTRONG_HPP
00012 #define COUENNECHOOSESTRONG_HPP
00013
00014 #include "BonChooseVariable.hpp"
00015 #include "CouenneJournalist.hpp"
00016
00017
00018 class CouenneProblem;
00019 template <class T> class CouenneSolverInterface;
00020
00021 class CouenneChooseStrong : public Bonmin::BonChooseVariable {
00022
00023 public:
00024
00026 CouenneChooseStrong (Bonmin::BabSetupBase& b, CouenneProblem* problem, JnlstPtr jnlst);
00027
00029 CouenneChooseStrong (const CouenneChooseStrong &);
00030
00032 CouenneChooseStrong & operator= (const CouenneChooseStrong& rhs);
00033
00035 virtual OsiChooseVariable * clone() const;
00036
00038 virtual ~CouenneChooseStrong ();
00039
00042 virtual int setupList (OsiBranchingInformation *info, bool initialize);
00043
00055 virtual int doStrongBranching (OsiSolverInterface * OsiSolver,
00056 OsiBranchingInformation *info,
00057 int numberToDo, int returnCriterion);
00058
00060 virtual bool feasibleSolution (const OsiBranchingInformation * info,
00061 const double * solution,
00062 int numberObjects,
00063 const OsiObject ** objects);
00064
00066 virtual int chooseVariable (OsiSolverInterface * solver,
00067 OsiBranchingInformation *info,
00068 bool fixVariables);
00069
00071 static void registerOptions (Ipopt::SmartPtr <Bonmin::RegisteredOptions> roptions);
00072
00073 private:
00074
00076 CouenneChooseStrong ();
00077
00078 protected:
00079
00081 int simulateBranch (OsiObject *Object,
00082 OsiBranchingInformation *info,
00083 OsiBranchingObject *branch,
00084 OsiSolverInterface *solver,
00085 Bonmin::HotInfo * result,
00086 int direction);
00087
00089 CouenneProblem *problem_;
00090
00094 bool pseudoUpdateLP_;
00095
00105 bool estimateProduct_;
00106
00108 JnlstPtr jnlst_;
00109
00111 double branchtime_;
00112 };
00113
00114 #endif