/home/coin/SVN-release/Cbc-2.3.1/Cbc/src/CbcHeuristicFPump.hpp

Go to the documentation of this file.
00001 // Copyright (C) 2004, International Business Machines
00002 // Corporation and others.  All Rights Reserved.
00003 #ifndef CbcHeuristicFeasibilityPump_H
00004 #define CbcHeuristicFeasibilityPump_H
00005 
00006 #include "CbcHeuristic.hpp"
00007 #include "OsiClpSolverInterface.hpp"
00008 
00012 class CbcHeuristicFPump : public CbcHeuristic {
00013 public:
00014 
00015   // Default Constructor 
00016   CbcHeuristicFPump ();
00017 
00018   // Constructor with model - assumed before cuts
00019   CbcHeuristicFPump (CbcModel & model,
00020                      double downValue=0.5,bool roundExpensive=false);
00021   
00022   // Copy constructor 
00023   CbcHeuristicFPump ( const CbcHeuristicFPump &);
00024    
00025   // Destructor 
00026   ~CbcHeuristicFPump ();
00027   
00029   CbcHeuristicFPump & operator=(const CbcHeuristicFPump& rhs);
00031   virtual CbcHeuristic * clone() const;
00033   virtual void generateCpp( FILE * fp) ;
00034 
00036   virtual void resetModel(CbcModel * model);
00037 
00039   virtual void setModel(CbcModel * model);
00040   
00041   using CbcHeuristic::solution ;
00057   virtual int solution(double & objectiveValue,
00058                        double * newSolution);
00059 
00061   void setMaximumTime(double value);
00063   inline double maximumTime() const
00064   { return maximumTime_;}
00066   inline void setFakeCutoff(double value)
00067   { fakeCutoff_ = value;}
00069   inline double fakeCutoff() const
00070   { return fakeCutoff_;}
00072   inline void setAbsoluteIncrement(double value)
00073   { absoluteIncrement_ = value;}
00075   inline double absoluteIncrement() const
00076   { return absoluteIncrement_;}
00078   inline void setRelativeIncrement(double value)
00079   { relativeIncrement_ = value;}
00081   inline double relativeIncrement() const
00082   { return relativeIncrement_;}
00084   inline void setDefaultRounding(double value)
00085   { defaultRounding_ = value;}
00087   inline double defaultRounding() const
00088   { return defaultRounding_;}
00090   inline void setInitialWeight(double value)
00091   { initialWeight_ = value;}
00093   inline double initialWeight() const
00094   { return initialWeight_;}
00096   inline void setWeightFactor(double value)
00097   { weightFactor_ = value;}
00099   inline double weightFactor() const
00100   { return weightFactor_;}
00102   inline void setArtificialCost(double value)
00103   { artificialCost_ = value;}
00105   inline double artificialCost() const
00106   { return artificialCost_;}
00108   inline double iterationRatio() const
00109   { return iterationRatio_;}
00111   inline void setIterationRatio(double value)
00112   { iterationRatio_ = value;}
00114   inline void setMaximumPasses(int value)
00115   { maximumPasses_=value;}
00117   inline int maximumPasses() const
00118   { return maximumPasses_;}
00120   inline void setMaximumRetries(int value)
00121   { maximumRetries_=value;}
00123   inline int maximumRetries() const
00124   { return maximumRetries_;}
00131   inline void setAccumulate(int value)
00132   { accumulate_=value;}
00134   inline int accumulate() const
00135   { return accumulate_;}
00141   inline void setFixOnReducedCosts(int value)
00142   { fixOnReducedCosts_=value;}
00144   inline int fixOnReducedCosts() const
00145   { return fixOnReducedCosts_;}
00146 
00147 protected:
00148   // Data
00150   double startTime_;
00152   double maximumTime_;
00156   double fakeCutoff_;
00158   double absoluteIncrement_;
00160   double relativeIncrement_;
00162   double defaultRounding_;
00164   double initialWeight_;
00166   double weightFactor_;
00168   double artificialCost_;
00171   double iterationRatio_;
00173   int maximumPasses_;
00177   int maximumRetries_;
00187   int accumulate_;
00193   int fixOnReducedCosts_;
00195   bool roundExpensive_;
00196 
00197 private:
00202   int rounds(OsiSolverInterface * solver,double * solution, const double * objective, 
00203              int numberIntegers, const int * integerVariable,
00204              char * pumpPrint,int passNumber,
00205              bool roundExpensive=false,
00206              double downValue=0.5, int *flip=0);
00207   /* note for eagle eyed readers.
00208      when_ can now be exotic -
00209      <=10 normal
00210   */
00211 };
00212 
00213 # ifdef COIN_HAS_CLP
00214   
00215 class CbcDisasterHandler : public OsiClpDisasterHandler {
00216 public:
00220 #if 0
00222   virtual void intoSimplex();
00224   virtual bool check() const ;
00226   virtual void saveInfo();
00227 #endif
00229   virtual int typeOfDisaster();
00230 
00231   
00232   
00237   CbcDisasterHandler(CbcModel * model = NULL);
00239   virtual ~CbcDisasterHandler();
00240   // Copy
00241   CbcDisasterHandler(const CbcDisasterHandler&);
00242   // Assignment
00243   CbcDisasterHandler& operator=(const CbcDisasterHandler&);
00245   virtual ClpDisasterHandler * clone() const;
00246 
00248   
00253   void setCbcModel(CbcModel * model);
00255   inline CbcModel * cbcModel() const
00256   { return cbcModel_;}
00257   
00259   
00260   
00261 protected:
00265 
00266   CbcModel * cbcModel_;
00267       
00269 };
00270 #endif
00271 
00272 #endif

Generated on Mon Sep 14 03:01:35 2009 by  doxygen 1.4.7