Cgl trunk
CglPreProcess.hpp
Go to the documentation of this file.
00001 // Copyright (C) 2005, 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 CglPreProcess_H
00006 #define CglPreProcess_H
00007 
00008 #include <string>
00009 #include <vector>
00010 
00011 #include "CoinMessageHandler.hpp"
00012 #include "OsiSolverInterface.hpp"
00013 #include "CglStored.hpp"
00014 #include "OsiPresolve.hpp"
00015 #include "CglCutGenerator.hpp"
00016 
00017 //#############################################################################
00018 
00036 class CglPreProcess  {
00037   
00038 public:
00039 
00041 
00042 
00051   OsiSolverInterface * preProcess(OsiSolverInterface & model, 
00052                                   bool makeEquality=false, int numberPasses=5);
00064   OsiSolverInterface * preProcessNonDefault(OsiSolverInterface & model, 
00065                                   int makeEquality=0, int numberPasses=5,
00066                                             int tuning=0);
00068   void postProcess(OsiSolverInterface &model);
00076   int tightenPrimalBounds(OsiSolverInterface & model,double factor=0.0);
00083   OsiSolverInterface * someFixed(OsiSolverInterface & model, 
00084                                  double fractionToKeep=0.25,
00085                                  bool fixContinuousAsWell=false,
00086                                  char * keep=NULL) const;
00091   OsiSolverInterface * cliqueIt(OsiSolverInterface & model,
00092                                 double cliquesNeeded=0.0) const;
00094   int reducedCostFix(OsiSolverInterface & model);
00096 
00097   //---------------------------------------------------------------------------
00098 
00113   void setCutoff(double value) ;
00114 
00116   double getCutoff() const;
00118   inline OsiSolverInterface * originalModel() const
00119   { return originalModel_;}
00121   inline OsiSolverInterface * startModel() const
00122   { return startModel_;}
00124   inline OsiSolverInterface * modelAtPass(int iPass) const
00125   { if (iPass>=0&&iPass<numberSolvers_) return model_[iPass]; else return NULL;}
00127   inline OsiSolverInterface * modifiedModel(int iPass) const
00128   { if (iPass>=0&&iPass<numberSolvers_) return modifiedModel_[iPass]; else return NULL;}
00130   inline OsiPresolve * presolve(int iPass) const
00131   { if (iPass>=0&&iPass<numberSolvers_) return presolve_[iPass]; else return NULL;}
00134   const int * originalColumns() const;
00137   const int * originalRows() const;
00139   inline int numberSOS() const
00140   { return numberSOS_;}
00142   inline const int * typeSOS() const
00143   { return typeSOS_;}
00145   inline const int * startSOS() const
00146   { return startSOS_;}
00148   inline const int * whichSOS() const
00149   { return whichSOS_;}
00151   inline const double * weightSOS() const
00152   { return weightSOS_;}
00154   void passInProhibited(const char * prohibited,int numberColumns);
00156   inline const char * prohibited()
00157   { return prohibited_;}
00159   inline int numberIterationsPre() const
00160   { return numberIterationsPre_;}
00162   inline int numberIterationsPost() const
00163   { return numberIterationsPost_;}
00170   void passInRowTypes(const char * rowTypes,int numberRows);
00177   inline const char * rowTypes()
00178   { return rowType_;}
00180   inline const CglStored & cuts() const
00181   { return cuts_;}
00183   inline const CglStored * cutsPointer() const
00184   { return &cuts_;}
00186   void update(const OsiPresolve * pinfo,const OsiSolverInterface * solver);
00188   inline void setOptions(int value)
00189   { options_=value;}
00191 
00193 
00194 
00195   inline int numberCutGenerators() const
00196   { return numberCutGenerators_;}
00198   inline CglCutGenerator ** cutGenerators() const
00199   { return generator_;}
00201   inline CglCutGenerator * cutGenerator(int i) const
00202   { return generator_[i];}
00205   void addCutGenerator(CglCutGenerator * generator);
00207     
00217     void setApplicationData (void * appData);
00218 
00220     void * getApplicationData() const;
00222   
00223   //---------------------------------------------------------------------------
00224 
00227 
00228   void passInMessageHandler(CoinMessageHandler * handler);
00230   void newLanguage(CoinMessages::Language language);
00231   inline void setLanguage(CoinMessages::Language language)
00232   {newLanguage(language);}
00234   inline CoinMessageHandler * messageHandler() const
00235   {return handler_;}
00237   inline CoinMessages messages() 
00238   {return messages_;}
00240   inline CoinMessages * messagesPointer() 
00241   {return &messages_;}
00243   //---------------------------------------------------------------------------
00244 
00245 
00247 
00248 
00249   CglPreProcess(); 
00250   
00252   CglPreProcess(const CglPreProcess & rhs);
00253   
00255   CglPreProcess & operator=(const CglPreProcess& rhs);
00256 
00258   ~CglPreProcess ();
00259   
00261   void gutsOfDestructor();
00263 private:
00264 
00266 
00267 
00271   OsiSolverInterface * modified(OsiSolverInterface * model,
00272                                 bool constraints,
00273                                 int & numberChanges,
00274                                 int iBigPass,
00275                                 int numberPasses);
00277   void createOriginalIndices() const;
00279   void makeInteger();
00281 
00282 //---------------------------------------------------------------------------
00283 
00284 private:
00286 
00287 
00289   OsiSolverInterface * originalModel_;
00291   OsiSolverInterface * startModel_;
00293   int numberSolvers_;
00295   OsiSolverInterface ** model_;
00297   OsiSolverInterface ** modifiedModel_;
00299   OsiPresolve ** presolve_;
00300 
00302   CoinMessageHandler * handler_;
00303 
00309   bool defaultHandler_;
00310 
00312   CoinMessages messages_;
00313 
00315   void * appData_;
00317   mutable int * originalColumn_;
00319   mutable int * originalRow_;
00321   int numberCutGenerators_;
00323   CglCutGenerator ** generator_;
00325   int numberSOS_;
00327   int * typeSOS_;
00329   int * startSOS_;
00331   int * whichSOS_;
00333   double * weightSOS_;
00335   int numberProhibited_;
00337   int numberIterationsPre_;
00339   int numberIterationsPost_;
00341   char * prohibited_;
00343   int numberRowType_;
00350   int options_;
00357   char * rowType_;
00359   CglStored cuts_;
00361 };
00363 class CglBK  {
00364   
00365 public:
00366 
00368 
00369 
00370   void bronKerbosch();
00372   OsiSolverInterface * newSolver(const OsiSolverInterface & model);
00374 
00375   //---------------------------------------------------------------------------
00376 
00386 
00387 
00388   //---------------------------------------------------------------------------
00389 
00390 
00392 
00393 
00394   CglBK(); 
00395   
00397   CglBK(const OsiSolverInterface & model, const char * rowType,
00398         int numberElements);
00399   
00401   CglBK(const CglBK & rhs);
00402   
00404   CglBK & operator=(const CglBK& rhs);
00405 
00407   ~CglBK ();
00408   
00410 
00411 //---------------------------------------------------------------------------
00412 
00413 private:
00415 
00416 
00417   int * candidates_;
00419   char * mark_;
00421   int * start_;
00423   int * otherColumn_;
00425   int * originalRow_;
00427   int * dominated_;
00429   CoinPackedMatrix * cliqueMatrix_;
00431   const char * rowType_;
00433   int numberColumns_;
00435   int numberRows_;
00437   int numberPossible_;
00439   int numberCandidates_;
00441   int firstNot_;
00443   int numberIn_;
00445   int left_;
00446   int lastColumn_;
00448 };
00449 
00450 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines