Cbc trunk
CbcFollowOn.hpp
Go to the documentation of this file.
00001 // $Id$
00002 // Copyright (C) 2002, International Business Machines
00003 // Corporation and others.  All Rights Reserved.
00004 // This code is licensed under the terms of the Eclipse Public License (EPL).
00005 
00006 // Edwin 11/10/2009-- carved out of CbcBranchActual
00007 
00008 #ifndef CbcFollowOn_H
00009 #define CbcFollowOn_H
00010 
00011 #include "CbcBranchBase.hpp"
00012 #include "CoinPackedMatrix.hpp"
00013 
00023 class CbcFollowOn : public CbcObject {
00024 
00025 public:
00026 
00027     // Default Constructor
00028     CbcFollowOn ();
00029 
00032     CbcFollowOn (CbcModel * model);
00033 
00034     // Copy constructor
00035     CbcFollowOn ( const CbcFollowOn &);
00036 
00038     virtual CbcObject * clone() const;
00039 
00040     // Assignment operator
00041     CbcFollowOn & operator=( const CbcFollowOn& rhs);
00042 
00043     // Destructor
00044     ~CbcFollowOn ();
00045 
00047     virtual double infeasibility(const OsiBranchingInformation * info,
00048                                  int &preferredWay) const;
00049 
00050     using CbcObject::feasibleRegion ;
00052     virtual void feasibleRegion();
00053 
00055     virtual CbcBranchingObject * createCbcBranch(OsiSolverInterface * solver, const OsiBranchingInformation * info, int way) ;
00057     virtual int gutsOfFollowOn(int & otherRow, int & preferredWay) const;
00058 
00059 protected:
00062     CoinPackedMatrix matrix_;
00064     CoinPackedMatrix matrixByRow_;
00066     int * rhs_;
00067 };
00068 
00072 class CbcFixingBranchingObject : public CbcBranchingObject {
00073 
00074 public:
00075 
00076     // Default Constructor
00077     CbcFixingBranchingObject ();
00078 
00079     // Useful constructor
00080     CbcFixingBranchingObject (CbcModel * model,
00081                               int way,
00082                               int numberOnDownSide, const int * down,
00083                               int numberOnUpSide, const int * up);
00084 
00085     // Copy constructor
00086     CbcFixingBranchingObject ( const CbcFixingBranchingObject &);
00087 
00088     // Assignment operator
00089     CbcFixingBranchingObject & operator=( const CbcFixingBranchingObject& rhs);
00090 
00092     virtual CbcBranchingObject * clone() const;
00093 
00094     // Destructor
00095     virtual ~CbcFixingBranchingObject ();
00096 
00097     using CbcBranchingObject::branch ;
00099     virtual double branch();
00100 
00101 #ifdef JJF_ZERO
00102     // No need to override. Default works fine.
00106     virtual void previousBranch();
00107 #endif
00108 
00109     using CbcBranchingObject::print ;
00112     virtual void print();
00113 
00115     virtual CbcBranchObjType type() const {
00116         return FollowOnBranchObj;
00117     }
00118 
00126     virtual int compareOriginalObject(const CbcBranchingObject* brObj) const;
00127 
00136     virtual CbcRangeCompare compareBranchingObject
00137     (const CbcBranchingObject* brObj, const bool replaceIfOverlap = false);
00138 
00139 private:
00142     int numberDown_;
00144     int numberUp_;
00146     int * downList_;
00148     int * upList_;
00149 };
00150 
00151 #endif
00152 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines