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
00019 class CouenneProblem;
00020 class CouenneSolverInterface;
00021
00022
00023
00024 class CouenneChooseStrong : public Bonmin::BonChooseVariable {
00025
00026 public:
00027
00029 CouenneChooseStrong (Bonmin::BabSetupBase& b, CouenneProblem* problem, JnlstPtr jnlst);
00030
00032 CouenneChooseStrong (const CouenneChooseStrong &);
00033
00035 CouenneChooseStrong & operator= (const CouenneChooseStrong& rhs);
00036
00038 virtual OsiChooseVariable * clone() const;
00039
00041 virtual ~CouenneChooseStrong ();
00042
00045 virtual int setupList (OsiBranchingInformation *info, bool initialize);
00046
00058 virtual int doStrongBranching( CouenneSolverInterface * solver,
00059 OsiBranchingInformation *info,
00060 int numberToDo, int returnCriterion);
00061
00063 virtual bool feasibleSolution (const OsiBranchingInformation * info,
00064 const double * solution,
00065 int numberObjects,
00066 const OsiObject ** objects);
00067
00069 virtual int chooseVariable (OsiSolverInterface * solver,
00070 OsiBranchingInformation *info,
00071 bool fixVariables);
00072
00074 static void registerOptions (Ipopt::SmartPtr <Bonmin::RegisteredOptions> roptions);
00075
00076 private:
00077
00079 CouenneChooseStrong ();
00080
00081 protected:
00082
00084 CouenneProblem *problem_;
00085
00089 bool pseudoUpdateLP_;
00090
00092 JnlstPtr jnlst_;
00093 };
00094
00095
00096 #endif