Osi  trunk
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
OsiAuxInfo.hpp
Go to the documentation of this file.
00001 // Copyright (C) 2006, International Business Machines
00002 // Corporation and others.  All Rights Reserved.
00003 // This code is licensed under the terms of the Eclipse Public License (EPL).
00004 
00005 #ifndef OsiAuxInfo_H
00006 #define OsiAuxInfo_H
00007 
00008 class OsiSolverInterface;
00009 
00010 //#############################################################################
00021 class OsiAuxInfo {
00022 public:
00023   // Default Constructor 
00024   OsiAuxInfo (void * appData = NULL);
00025 
00026   // Copy Constructor 
00027   OsiAuxInfo (const OsiAuxInfo & rhs);
00028   // Destructor
00029   virtual ~OsiAuxInfo();
00030   
00032   virtual OsiAuxInfo * clone() const;
00034   OsiAuxInfo & operator=(const OsiAuxInfo& rhs);
00035   
00037   inline void * getApplicationData() const
00038   { return appData_;}
00039 protected:
00041     void * appData_;
00042 };
00043 //#############################################################################
00049 class OsiBabSolver : public OsiAuxInfo {
00050 public:
00051   // Default Constructor 
00052   OsiBabSolver (int solverType=0);
00053 
00054   // Copy Constructor 
00055   OsiBabSolver (const OsiBabSolver & rhs);
00056   // Destructor
00057   virtual ~OsiBabSolver();
00058   
00060   virtual OsiAuxInfo * clone() const;
00062   OsiBabSolver & operator=(const OsiBabSolver& rhs);
00063   
00065   inline void setSolver(const OsiSolverInterface * solver)
00066   { solver_ = solver;}
00068   inline void setSolver(const OsiSolverInterface & solver)
00069   { solver_ = &solver;}
00070 
00076   int solution(double & objectiveValue,
00077                        double * newSolution, int numberColumns);
00081   void setSolution(const double * solution, int numberColumns, double objectiveValue);
00082 
00088   bool hasSolution(double & solutionValue, double * solution);
00089 
00102   inline void setSolverType(int value)
00103   { solverType_=value;}
00116   inline int solverType() const
00117   { return solverType_;}
00120   inline bool solutionAddsCuts() const
00121   { return solverType_==3;}
00123   inline bool alwaysTryCutsAtRootNode() const
00124   { return solverType_==4;}
00127   inline bool solverAccurate() const
00128   { return solverType_==0||solverType_==2||solverType_==4;}
00130   inline bool reducedCostsAccurate() const
00131   { return solverType_==0||solverType_==4;}
00133   double mipBound() const;
00135   bool mipFeasible() const;
00137   inline void setMipBound(double value)
00138   { mipBound_ = value;}
00140   inline double bestObjectiveValue() const
00141   { return bestObjectiveValue_;}
00143   inline bool tryCuts() const
00144   { return solverType_!=2;}
00146   inline bool warmStart() const
00147   { return solverType_!=2;}
00152   inline int extraCharacteristics() const
00153   { return extraCharacteristics_;}
00158   inline void setExtraCharacteristics(int value)
00159   { extraCharacteristics_=value;}
00161   inline const double * beforeLower() const
00162   { return beforeLower_;}
00164   inline void setBeforeLower(const double * array)
00165   { beforeLower_ = array;}
00167   inline const double * beforeUpper() const
00168   { return beforeUpper_;}
00170   inline void setBeforeUpper(const double * array)
00171   { beforeUpper_ = array;}
00172 protected:
00174   double bestObjectiveValue_;
00176   double mipBound_;
00178   const OsiSolverInterface * solver_;
00180   double * bestSolution_;
00182   const double * beforeLower_;
00184   const double * beforeUpper_;
00196   int solverType_;
00198   int sizeSolution_;
00203   int extraCharacteristics_;
00204 };
00205 
00206 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines