/home/coin/SVN-release/CoinAll-1.1.0/Cbc/src/CbcLinked.hpp

Go to the documentation of this file.
00001 // Copyright (C) 2006, International Business Machines
00002 // Corporation and others.  All Rights Reserved.
00003 #ifndef CglLinked_H
00004 #define CglLinked_H
00005 /* THIS CONTAINS STUFF THAT SHOULD BE IN
00006    OsiSolverLink
00007    OsiBranchLink
00008    CglTemporary
00009 */
00010 #include "CoinModel.hpp"
00011 #include "OsiClpSolverInterface.hpp"
00012 #include "OsiChooseVariable.hpp"
00013 #include "CbcFathom.hpp"
00014 class CbcModel;
00015 class CoinPackedMatrix;
00016 class OsiLinkedBound;
00017 class OsiObject;
00018 class CglStored;
00019 class CglTemporary;
00026 class OsiSolverLink : public CbcOsiSolver {
00027   
00028 public:
00029   //---------------------------------------------------------------------------
00032 
00033   virtual void initialSolve();
00034   
00036   virtual void resolve();
00037 
00045   virtual int fathom(bool allFixed) ;
00052   double * nonlinearSLP(int numberPasses,double deltaTolerance);
00056   double linearizedBAB(CglStored * cut) ;
00065   double * heuristicSolution(int numberPasses,double deltaTolerance,int mode);
00066   
00068   int doAOCuts(CglTemporary * cutGen, const double * solution, const double * solution2);
00070   
00071   
00074 
00075   OsiSolverLink ();
00076   
00089   OsiSolverLink(  CoinModel & modelObject);
00090   // Other way with existing object
00091   void load(  CoinModel & modelObject,bool tightenBounds=false,int logLevel=1);
00093   virtual OsiSolverInterface * clone(bool copyData=true) const;
00094   
00096   OsiSolverLink (const OsiSolverLink &);
00097   
00099   OsiSolverLink & operator=(const OsiSolverLink& rhs);
00100   
00102   virtual ~OsiSolverLink ();
00103   
00105   
00106   
00109 
00110   void addBoundModifier(bool upperBoundAffected, bool useUpperBound, int whichVariable, int whichVariableAffected, 
00111                         double multiplier=1.0);
00113   int updateCoefficients(ClpSimplex * solver, CoinPackedMatrix * matrix);
00115   void analyzeObjects();
00117   void addTighterConstraints();
00119   inline double bestObjectiveValue() const
00120   { return bestObjectiveValue_;}
00122   inline void setBestObjectiveValue(double value)
00123   { bestObjectiveValue_ = value;}
00125   inline const double * bestSolution() const
00126   { return bestSolution_;}
00128   void setBestSolution(const double * solution, int numberColumns);
00130   inline void setSpecialOptions2(int value)
00131   { specialOptions2_=value;}
00133   void sayConvex(bool convex);
00135   inline int specialOptions2() const
00136   { return specialOptions2_;}
00140   CoinPackedMatrix * cleanMatrix() const
00141   { return matrix_;}
00146   CoinPackedMatrix * originalRowCopy() const
00147   { return originalRowCopy_;}
00149   ClpSimplex * quadraticModel() const
00150   { return quadraticModel_;}
00152   CoinPackedMatrix * quadraticRow(int rowNumber,double * linear) const;
00154   inline double defaultMeshSize() const
00155   { return defaultMeshSize_;}
00156   inline void setDefaultMeshSize(double value)
00157   { defaultMeshSize_=value;}
00159   inline double defaultBound() const
00160   { return defaultBound_;}
00161   inline void setDefaultBound(double value)
00162   { defaultBound_=value;}
00164   inline void setIntegerPriority(int value)
00165   { integerPriority_=value;}
00167   inline int integerPriority() const
00168   { return integerPriority_;}
00170   inline int objectiveVariable() const
00171   { return objectiveVariable_;}
00173   inline void setBiLinearPriority(int value)
00174   { biLinearPriority_=value;}
00176   inline int biLinearPriority() const
00177   { return biLinearPriority_;}
00179   inline const CoinModel * coinModel() const
00180   { return &coinModel_;}
00182   void setBiLinearPriorities(int value, double meshSize=1.0);
00190   void setBranchingStrategyOnVariables(int strategyValue, int priorityValue=-1,
00191                                        int mode=7);
00193   void setMeshSizes(double value);
00197   void setFixedPriority(int priorityValue);
00199   
00200   //---------------------------------------------------------------------------
00201   
00202 protected:
00203   
00204   
00207 
00208   //void initialize(ClpSimplex * & solver, OsiObject ** & object) const;
00210   void gutsOfDestructor(bool justNullify=false);
00212   void gutsOfCopy(const OsiSolverLink & rhs) ;
00214   
00220   CoinPackedMatrix * matrix_;
00224   CoinPackedMatrix * originalRowCopy_;
00226   ClpSimplex * quadraticModel_;
00228   int numberNonLinearRows_;
00230   int * startNonLinear_;
00232   int * rowNonLinear_;
00236   int * convex_;
00238   int * whichNonLinear_;
00240   CoinModel coinModel_;
00242   int numberVariables_;
00244   OsiLinkedBound * info_;
00252   int specialOptions2_;
00254   int objectiveRow_;
00256   int objectiveVariable_;
00258   double bestObjectiveValue_;
00260   double defaultMeshSize_;
00262   double defaultBound_;
00264   double * bestSolution_;
00266   int integerPriority_;
00268   int biLinearPriority_;
00270   int numberFix_;
00272   int * fixVariables_;
00274 };
00279 class OsiLinkedBound {
00280   
00281 public:
00282   //---------------------------------------------------------------------------
00285 
00286   void updateBounds(ClpSimplex * solver);
00288   
00289   
00292 
00293   OsiLinkedBound ();
00295   OsiLinkedBound(OsiSolverInterface * model, int variable,
00296                  int numberAffected, const int * positionL, 
00297                  const int * positionU, const double * multiplier);
00298   
00300   OsiLinkedBound (const OsiLinkedBound &);
00301   
00303   OsiLinkedBound & operator=(const OsiLinkedBound& rhs);
00304   
00306   ~OsiLinkedBound ();
00307   
00309   
00312 
00313   inline int variable() const
00314   { return variable_;}
00316   void addBoundModifier(bool upperBoundAffected, bool useUpperBound, int whichVariable, 
00317                         double multiplier=1.0);
00319   
00320 private:
00321   typedef struct {
00322     /*
00323       0 - LB of variable affected
00324       1 - UB of variable affected
00325       2 - element in position (affected) affected
00326     */
00327     unsigned int affect:2;
00328     unsigned int ubUsed:1; // nonzero if UB of this variable is used
00329     /* 
00330        0 - use x*multiplier
00331        1 - use multiplier/x
00332        2 - if UB use min of current upper and x*multiplier, if LB use max of current lower and x*multiplier
00333     */
00334     unsigned int type:4; // type of computation
00335     unsigned int affected:25; // variable or element affected
00336     double multiplier; // to use in computation 
00337   } boundElementAction;
00338   
00341 
00342   OsiSolverInterface * model_;
00344   int variable_;
00346   int numberAffected_;
00348   int maximumAffected_;
00350   boundElementAction * affected_;
00352 };
00353 #include "CbcHeuristic.hpp"
00357 class CbcHeuristicDynamic3 : public CbcHeuristic {
00358 public:
00359   
00360   // Default Constructor 
00361   CbcHeuristicDynamic3 ();
00362   
00363   /* Constructor with model
00364    */
00365   CbcHeuristicDynamic3 (CbcModel & model);
00366   
00367   // Copy constructor 
00368   CbcHeuristicDynamic3 ( const CbcHeuristicDynamic3 &);
00369   
00370   // Destructor 
00371   ~CbcHeuristicDynamic3 ();
00372   
00374   virtual CbcHeuristic * clone() const;
00375   
00377   virtual void setModel(CbcModel * model);
00378   
00379   using CbcHeuristic::solution ;
00390   virtual int solution(double & objectiveValue,
00391                        double * newSolution);
00393   virtual void resetModel(CbcModel * model);
00395   virtual bool canDealWithOdd() const
00396   { return true;}
00397   
00398 protected:
00399 private:
00401   CbcHeuristicDynamic3 & operator=(const CbcHeuristicDynamic3& rhs);
00402 };
00403 
00404 #include "OsiBranchingObject.hpp"
00405 
00409 class CoinWarmStartBasis;
00410 
00411 class OsiOldLink : public OsiSOS {
00412 
00413 public:
00414 
00415   // Default Constructor 
00416   OsiOldLink ();
00417 
00424   OsiOldLink (const OsiSolverInterface * solver, int numberMembers,
00425            int numberLinks, int first,
00426            const double * weights, int setNumber);
00433   OsiOldLink (const OsiSolverInterface * solver, int numberMembers,
00434            int numberLinks, int typeSOS, const int * which,
00435            const double * weights, int setNumber);
00436   
00437   // Copy constructor 
00438   OsiOldLink ( const OsiOldLink &);
00439    
00441   virtual OsiObject * clone() const;
00442 
00443   // Assignment operator 
00444   OsiOldLink & operator=( const OsiOldLink& rhs);
00445 
00446   // Destructor 
00447   virtual ~OsiOldLink ();
00448   
00449   using OsiObject::infeasibility ;
00451   virtual double infeasibility(const OsiBranchingInformation * info,int & whichWay) const;
00452 
00453   using OsiObject::feasibleRegion ;
00459   virtual double feasibleRegion(OsiSolverInterface * solver, const OsiBranchingInformation * info) const;
00460 
00465   virtual OsiBranchingObject * createBranch(OsiSolverInterface * solver, const OsiBranchingInformation * info, int way) const;
00466 
00468   virtual void resetSequenceEtc(int numberColumns, const int * originalColumns);
00469 
00471   inline int numberLinks() const
00472   {return numberLinks_;}
00473 
00476   virtual bool canDoHeuristics() const 
00477   {return false;}
00480   virtual bool boundBranch() const 
00481   {return false;}
00482 
00483 private:
00485 
00487   int numberLinks_;
00488 };
00492 class OsiOldLinkBranchingObject : public OsiSOSBranchingObject {
00493 
00494 public:
00495 
00496   // Default Constructor 
00497   OsiOldLinkBranchingObject ();
00498 
00499   // Useful constructor
00500   OsiOldLinkBranchingObject (OsiSolverInterface * solver,  const OsiOldLink * originalObject,
00501                           int way,
00502                           double separator);
00503   
00504   // Copy constructor 
00505   OsiOldLinkBranchingObject ( const OsiOldLinkBranchingObject &);
00506    
00507   // Assignment operator 
00508   OsiOldLinkBranchingObject & operator=( const OsiOldLinkBranchingObject& rhs);
00509 
00511   virtual OsiBranchingObject * clone() const;
00512 
00513   // Destructor 
00514   virtual ~OsiOldLinkBranchingObject ();
00515   
00516   using OsiBranchingObject::branch ;
00518   virtual double branch(OsiSolverInterface * solver);
00519 
00520   using OsiBranchingObject::print ;
00523   virtual void print(const OsiSolverInterface * solver=NULL);
00524 private:
00526 };
00532 class OsiOneLink {
00533 
00534 public:
00535 
00536   // Default Constructor 
00537   OsiOneLink ();
00538 
00542   OsiOneLink (const OsiSolverInterface * solver, int xRow, int xColumn, int xyRow,
00543               const char * functionString);
00544   
00545   // Copy constructor 
00546   OsiOneLink ( const OsiOneLink &);
00547    
00548   // Assignment operator 
00549   OsiOneLink & operator=( const OsiOneLink& rhs);
00550 
00551   // Destructor 
00552   virtual ~OsiOneLink ();
00553   
00555 
00557   int xRow_;
00559   int xColumn_;
00561   int xyRow;
00563   std::string function_;
00564 };
00574 class OsiLink : public OsiSOS {
00575 
00576 public:
00577 
00578   // Default Constructor 
00579   OsiLink ();
00580 
00584   OsiLink (const OsiSolverInterface * solver, int yRow,
00585            int yColumn, double meshSize);
00586   
00587   // Copy constructor 
00588   OsiLink ( const OsiLink &);
00589    
00591   virtual OsiObject * clone() const;
00592 
00593   // Assignment operator 
00594   OsiLink & operator=( const OsiLink& rhs);
00595 
00596   // Destructor 
00597   virtual ~OsiLink ();
00598   
00599   using OsiObject::infeasibility ;
00601   virtual double infeasibility(const OsiBranchingInformation * info,int & whichWay) const;
00602 
00603   using OsiObject::feasibleRegion ;
00609   virtual double feasibleRegion(OsiSolverInterface * solver, const OsiBranchingInformation * info) const;
00610 
00615   virtual OsiBranchingObject * createBranch(OsiSolverInterface * solver, const OsiBranchingInformation * info, int way) const;
00616 
00618   virtual void resetSequenceEtc(int numberColumns, const int * originalColumns);
00619 
00621   inline int numberLinks() const
00622   {return numberLinks_;}
00623 
00626   virtual bool canDoHeuristics() const 
00627   {return false;}
00630   virtual bool boundBranch() const 
00631   {return false;}
00632 
00633 private:
00636   double meshSize_;
00638   OsiOneLink * data_;
00640   int numberLinks_;
00642   int yRow_;
00644   int yColumn_;
00645 };
00649 class OsiLinkBranchingObject : public OsiTwoWayBranchingObject {
00650 
00651 public:
00652 
00653   // Default Constructor 
00654   OsiLinkBranchingObject ();
00655 
00656   // Useful constructor
00657   OsiLinkBranchingObject (OsiSolverInterface * solver,  const OsiLink * originalObject,
00658                           int way,
00659                           double separator);
00660   
00661   // Copy constructor 
00662   OsiLinkBranchingObject ( const OsiLinkBranchingObject &);
00663    
00664   // Assignment operator 
00665   OsiLinkBranchingObject & operator=( const OsiLinkBranchingObject& rhs);
00666 
00668   virtual OsiBranchingObject * clone() const;
00669 
00670   // Destructor 
00671   virtual ~OsiLinkBranchingObject ();
00672   
00673   using OsiBranchingObject::branch ;
00675   virtual double branch(OsiSolverInterface * solver);
00676 
00677   using OsiBranchingObject::print ;
00680   virtual void print(const OsiSolverInterface * solver=NULL);
00681 private:
00683 };
00691 class OsiBiLinear : public OsiObject2 {
00692 
00693 public:
00694 
00695   // Default Constructor 
00696   OsiBiLinear ();
00697 
00703   OsiBiLinear (OsiSolverInterface * solver, int xColumn,
00704                int yColumn, int xyRow, double coefficient,
00705                double xMesh, double yMesh,
00706                int numberExistingObjects=0,const OsiObject ** objects=NULL );
00707   
00713   OsiBiLinear (CoinModel * coinModel, int xColumn,
00714                int yColumn, int xyRow, double coefficient,
00715                double xMesh, double yMesh,
00716                int numberExistingObjects=0,const OsiObject ** objects=NULL );
00717   
00718   // Copy constructor 
00719   OsiBiLinear ( const OsiBiLinear &);
00720    
00722   virtual OsiObject * clone() const;
00723 
00724   // Assignment operator 
00725   OsiBiLinear & operator=( const OsiBiLinear& rhs);
00726 
00727   // Destructor 
00728   virtual ~OsiBiLinear ();
00729   
00730   using OsiObject::infeasibility ;
00732   virtual double infeasibility(const OsiBranchingInformation * info,int & whichWay) const;
00733 
00734   using OsiObject::feasibleRegion ;
00740   virtual double feasibleRegion(OsiSolverInterface * solver, const OsiBranchingInformation * info) const;
00741 
00746   virtual OsiBranchingObject * createBranch(OsiSolverInterface * solver, const OsiBranchingInformation * info, int way) const;
00747 
00749   virtual void resetSequenceEtc(int numberColumns, const int * originalColumns);
00750 
00751   // This does NOT set mutable stuff
00752   virtual double checkInfeasibility(const OsiBranchingInformation * info) const;
00753   
00756   virtual bool canDoHeuristics() const 
00757   {return false;}
00760   virtual bool boundBranch() const 
00761   { return (branchingStrategy_&4)!=0;}
00763   inline int xColumn() const
00764   { return xColumn_;}
00766   inline int yColumn() const
00767   { return yColumn_;}
00769   inline int xRow() const
00770   { return xRow_;}
00772   inline int yRow() const
00773   { return yRow_;}
00775   inline int xyRow() const
00776   { return xyRow_;}
00778   inline double coefficient() const
00779   { return coefficient_;}
00781   inline void setCoefficient(double value)
00782   { coefficient_ = value;}
00784   inline int firstLambda() const
00785   { return firstLambda_;}
00787   inline double xSatisfied() const
00788   { return xSatisfied_;}
00789   inline void setXSatisfied(double value)
00790   { xSatisfied_=value;}
00792   inline double ySatisfied() const
00793   { return ySatisfied_;}
00794   inline void setYSatisfied(double value)
00795   { ySatisfied_=value;}
00797   inline double xOtherSatisfied() const
00798   { return xOtherSatisfied_;}
00799   inline void setXOtherSatisfied(double value)
00800   { xOtherSatisfied_=value;}
00802   inline double yOtherSatisfied() const
00803   { return yOtherSatisfied_;}
00804   inline void setYOtherSatisfied(double value)
00805   { yOtherSatisfied_=value;}
00807   inline double xMeshSize() const
00808   { return xMeshSize_;}
00809   inline void setXMeshSize(double value)
00810   { xMeshSize_=value;}
00812   inline double yMeshSize() const
00813   { return yMeshSize_;}
00814   inline void setYMeshSize(double value)
00815   { yMeshSize_=value;}
00817   inline double xySatisfied() const
00818   { return xySatisfied_;}
00819   inline void setXYSatisfied(double value)
00820   { xySatisfied_=value;}
00822   void setMeshSizes(const OsiSolverInterface * solver, double x, double y);
00833   inline int branchingStrategy() const
00834   { return branchingStrategy_;}
00835   inline void setBranchingStrategy(int value)
00836   { branchingStrategy_=value;}
00844   inline int boundType() const
00845   { return boundType_;}
00846   inline void setBoundType(int value)
00847   { boundType_ = value;}
00849   void newBounds(OsiSolverInterface * solver, int way, short xOrY, double separator) const;
00851   int updateCoefficients(const double * lower, const double * upper, double * objective,
00852                           CoinPackedMatrix * matrix, CoinWarmStartBasis * basis) const;
00854   double xyCoefficient(const double * solution) const;
00856   void getCoefficients(const OsiSolverInterface * solver,double xB[2], double yB[2], double xybar[4]) const;
00858   double computeLambdas(const double xB[3], const double yB[3],const double xybar[4],double lambda[4]) const;
00860   void addExtraRow(int row, double multiplier);
00862   void getPseudoShadow(const OsiBranchingInformation * info);
00864   double getMovement(const OsiBranchingInformation * info);
00865 
00866 protected:
00868   void computeLambdas(const OsiSolverInterface * solver,double lambda[4]) const;
00870   
00872   double coefficient_;
00874   double xMeshSize_;
00876   double yMeshSize_;
00878   double xSatisfied_;
00880   double ySatisfied_;
00882   double xOtherSatisfied_;
00884   double yOtherSatisfied_;
00886   double xySatisfied_;
00888   mutable double xyBranchValue_;
00890   int xColumn_;
00892   int yColumn_;
00894   int firstLambda_;
00905   int branchingStrategy_;
00913   int boundType_;
00915   int xRow_;
00917   int yRow_;
00919   int xyRow_;
00921   int convexity_;
00923   int numberExtraRows_;
00925   double * multiplier_;
00927   int * extraRow_;
00929   mutable short chosen_;
00930 };
00934 class OsiBiLinearBranchingObject : public OsiTwoWayBranchingObject {
00935 
00936 public:
00937 
00938   // Default Constructor 
00939   OsiBiLinearBranchingObject ();
00940 
00941   // Useful constructor
00942   OsiBiLinearBranchingObject (OsiSolverInterface * solver,  const OsiBiLinear * originalObject,
00943                           int way,
00944                           double separator, int chosen);
00945   
00946   // Copy constructor 
00947   OsiBiLinearBranchingObject ( const OsiBiLinearBranchingObject &);
00948    
00949   // Assignment operator 
00950   OsiBiLinearBranchingObject & operator=( const OsiBiLinearBranchingObject& rhs);
00951 
00953   virtual OsiBranchingObject * clone() const;
00954 
00955   // Destructor 
00956   virtual ~OsiBiLinearBranchingObject ();
00957   
00958   using OsiBranchingObject::branch ;
00960   virtual double branch(OsiSolverInterface * solver);
00961 
00962   using OsiBranchingObject::print ;
00965   virtual void print(const OsiSolverInterface * solver=NULL);
00968   virtual bool boundBranch() const; 
00969 private:
00972   short chosen_;
00973 };
00981 class OsiBiLinearEquality : public OsiBiLinear {
00982 
00983 public:
00984 
00985   // Default Constructor 
00986   OsiBiLinearEquality ();
00987 
00993   OsiBiLinearEquality (OsiSolverInterface * solver, int xColumn,
00994                int yColumn, int xyRow, double rhs,
00995                        double xMesh);
00996   
00997   // Copy constructor 
00998   OsiBiLinearEquality ( const OsiBiLinearEquality &);
00999    
01001   virtual OsiObject * clone() const;
01002 
01003   // Assignment operator 
01004   OsiBiLinearEquality & operator=( const OsiBiLinearEquality& rhs);
01005 
01006   // Destructor 
01007   virtual ~OsiBiLinearEquality ();
01008   
01010   virtual double improvement(const OsiSolverInterface * solver) const;
01016   double newGrid(OsiSolverInterface * solver, int type) const;
01018   inline int numberPoints() const
01019   { return numberPoints_;}
01020   inline void setNumberPoints(int value)
01021   { numberPoints_ = value;}
01022 
01023 private:
01025   int numberPoints_;
01026 };
01028 
01029 
01030 class OsiSimpleFixedInteger : public OsiSimpleInteger {
01031 
01032 public:
01033 
01035   OsiSimpleFixedInteger ();
01036 
01038   OsiSimpleFixedInteger (const OsiSolverInterface * solver, int iColumn);
01039   
01041   OsiSimpleFixedInteger (int iColumn, double lower, double upper);
01042   
01044   OsiSimpleFixedInteger (const OsiSimpleInteger &);
01045   
01047   OsiSimpleFixedInteger ( const OsiSimpleFixedInteger &);
01048    
01050   virtual OsiObject * clone() const;
01051 
01053   OsiSimpleFixedInteger & operator=( const OsiSimpleFixedInteger& rhs);
01054 
01056   virtual ~OsiSimpleFixedInteger ();
01057   
01058   using OsiObject::infeasibility ;
01060   virtual double infeasibility(const OsiBranchingInformation * info, int & whichWay) const;
01061 
01066   virtual OsiBranchingObject * createBranch(OsiSolverInterface * solver, const OsiBranchingInformation * info, int way) const;
01067 protected:
01069   
01070 };
01080 class OsiUsesBiLinear : public OsiSimpleInteger {
01081 
01082 public:
01083 
01085   OsiUsesBiLinear ();
01086 
01088   OsiUsesBiLinear (const OsiSolverInterface * solver, int iColumn, int type);
01089   
01091   OsiUsesBiLinear (int iColumn, double lower, double upper, int type);
01092   
01094   OsiUsesBiLinear (const OsiSimpleInteger & rhs, int type);
01095   
01097   OsiUsesBiLinear ( const OsiUsesBiLinear & rhs);
01098    
01100   virtual OsiObject * clone() const;
01101 
01103   OsiUsesBiLinear & operator=( const OsiUsesBiLinear& rhs);
01104 
01106   virtual ~OsiUsesBiLinear ();
01107   
01108   using OsiObject::infeasibility ;
01110   virtual double infeasibility(const OsiBranchingInformation * info, int & whichWay) const;
01111 
01116   virtual OsiBranchingObject * createBranch(OsiSolverInterface * solver, const OsiBranchingInformation * info, int way) const;
01117 
01118   using OsiObject::feasibleRegion ;
01124   virtual double feasibleRegion(OsiSolverInterface * solver, const OsiBranchingInformation * info) const;
01125 
01127   void addBiLinearObjects(OsiSolverLink * solver);
01128 protected:
01131   int numberBiLinear_;
01133   int type_;
01135   OsiObject ** objects_;
01136 };
01144 class OsiChooseStrongSubset  : public OsiChooseStrong {
01145  
01146 public:
01147     
01149   OsiChooseStrongSubset ();
01150 
01152   OsiChooseStrongSubset (const OsiSolverInterface * solver);
01153 
01155   OsiChooseStrongSubset (const OsiChooseStrongSubset &);
01156    
01158   OsiChooseStrongSubset & operator= (const OsiChooseStrongSubset& rhs);
01159 
01161   virtual OsiChooseVariable * clone() const;
01162 
01164   virtual ~OsiChooseStrongSubset ();
01165 
01170   virtual int setupList ( OsiBranchingInformation *info, bool initialize);
01184   virtual int chooseVariable( OsiSolverInterface * solver, OsiBranchingInformation *info, bool fixVariables);
01185 
01187   inline int numberObjectsToUse() const
01188   { return numberObjectsToUse_;}
01190   inline void setNumberObjectsToUse(int value)
01191   { numberObjectsToUse_ = value;}
01192 
01193 protected:
01194   // Data
01196   int numberObjectsToUse_;
01197 };
01198 
01199 #include <string>
01200 
01201 #include "CglStored.hpp"
01202 
01203 class CoinWarmStartBasis;
01205 class CglTemporary : public CglStored {
01206  
01207 public:
01208     
01209   
01220   virtual void generateCuts( const OsiSolverInterface & si, OsiCuts & cs,
01221                              const CglTreeInfo info = CglTreeInfo()) const;
01223 
01226 
01227   CglTemporary ();
01228  
01230   CglTemporary (const CglTemporary & rhs);
01231 
01233   virtual CglCutGenerator * clone() const;
01234 
01236   CglTemporary &
01237     operator=(const CglTemporary& rhs);
01238   
01240   virtual
01241     ~CglTemporary ();
01243       
01244 private:
01245   
01246  // Private member methods
01247 
01248   // Private member data
01249 };
01250 //#############################################################################
01251 
01257 class OsiSolverLinearizedQuadratic : public OsiClpSolverInterface {
01258   
01259 public:
01260   //---------------------------------------------------------------------------
01263 
01264   virtual void initialSolve();
01266   
01267   
01270 
01271   OsiSolverLinearizedQuadratic ();
01273   OsiSolverLinearizedQuadratic(  ClpSimplex * quadraticModel);
01275   virtual OsiSolverInterface * clone(bool copyData=true) const;
01276   
01278   OsiSolverLinearizedQuadratic (const OsiSolverLinearizedQuadratic &);
01279   
01281   OsiSolverLinearizedQuadratic & operator=(const OsiSolverLinearizedQuadratic& rhs);
01282   
01284   virtual ~OsiSolverLinearizedQuadratic ();
01285   
01287   
01288   
01291 
01292   inline double bestObjectiveValue() const
01293   { return bestObjectiveValue_;}
01295   const double * bestSolution() const
01296   { return bestSolution_;}
01298   inline void setSpecialOptions3(int value)
01299   { specialOptions3_=value;}
01301   inline int specialOptions3() const
01302   { return specialOptions3_;}
01304   ClpSimplex * quadraticModel() const
01305   { return quadraticModel_;}
01307   
01308   //---------------------------------------------------------------------------
01309   
01310 protected:
01311   
01312   
01315   
01318 
01319   double bestObjectiveValue_;
01321   ClpSimplex * quadraticModel_;
01323   double * bestSolution_;
01328   int specialOptions3_;
01330 };
01331 class ClpSimplex;
01336 ClpSimplex * approximateSolution(CoinModel & coinModel, 
01337                                  int numberPasses, double deltaTolerance,
01338                                  int mode=0);
01339 #endif

Generated on Sun Nov 14 14:06:31 2010 for Coin-All by  doxygen 1.4.7