Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

/home/coinadmin/Update/COIN/Clp/include/ClpPrimalColumnSteepest.hpp

Go to the documentation of this file.
00001 // Copyright (C) 2002, International Business Machines
00002 // Corporation and others.  All Rights Reserved.
00003 #ifndef ClpPrimalColumnSteepest_H
00004 #define ClpPrimalColumnSteepest_H
00005 
00006 #include "ClpPrimalColumnPivot.hpp"
00007 #include <bitset>
00008 
00009 //#############################################################################
00010 
00011 
00018 class CoinIndexedVector;
00019 
00020 class ClpPrimalColumnSteepest : public ClpPrimalColumnPivot {
00021   
00022 public:
00023   
00025 
00026   
00034   virtual int pivotColumn(CoinIndexedVector * updates,
00035                           CoinIndexedVector * spareRow1,
00036                           CoinIndexedVector * spareRow2,
00037                           CoinIndexedVector * spareColumn1,
00038                           CoinIndexedVector * spareColumn2);
00040   int pivotColumnOldMethod(CoinIndexedVector * updates,
00041                           CoinIndexedVector * spareRow1,
00042                           CoinIndexedVector * spareRow2,
00043                           CoinIndexedVector * spareColumn1,
00044                           CoinIndexedVector * spareColumn2);
00046   void justDjs(CoinIndexedVector * updates,
00047                CoinIndexedVector * spareRow1,
00048                CoinIndexedVector * spareRow2,
00049                CoinIndexedVector * spareColumn1,
00050                CoinIndexedVector * spareColumn2);
00052   int partialPricing(CoinIndexedVector * updates,
00053                      CoinIndexedVector * spareRow2,
00054                      int numberWanted,
00055                      int numberLook);
00057   void djsAndDevex(CoinIndexedVector * updates,
00058                CoinIndexedVector * spareRow1,
00059                CoinIndexedVector * spareRow2,
00060                CoinIndexedVector * spareColumn1,
00061                CoinIndexedVector * spareColumn2);
00063   void djsAndSteepest(CoinIndexedVector * updates,
00064                CoinIndexedVector * spareRow1,
00065                CoinIndexedVector * spareRow2,
00066                CoinIndexedVector * spareColumn1,
00067                CoinIndexedVector * spareColumn2);
00069   void djsAndDevex2(CoinIndexedVector * updates,
00070                CoinIndexedVector * spareRow1,
00071                CoinIndexedVector * spareRow2,
00072                CoinIndexedVector * spareColumn1,
00073                CoinIndexedVector * spareColumn2);
00075   void djsAndSteepest2(CoinIndexedVector * updates,
00076                CoinIndexedVector * spareRow1,
00077                CoinIndexedVector * spareRow2,
00078                CoinIndexedVector * spareColumn1,
00079                CoinIndexedVector * spareColumn2);
00081   void justDevex(CoinIndexedVector * updates,
00082                CoinIndexedVector * spareRow1,
00083                CoinIndexedVector * spareRow2,
00084                CoinIndexedVector * spareColumn1,
00085                CoinIndexedVector * spareColumn2);
00087   void justSteepest(CoinIndexedVector * updates,
00088                CoinIndexedVector * spareRow1,
00089                CoinIndexedVector * spareRow2,
00090                CoinIndexedVector * spareColumn1,
00091                CoinIndexedVector * spareColumn2);
00092 
00094   virtual void updateWeights(CoinIndexedVector * input);
00095 
00097   void checkAccuracy(int sequence,double relativeTolerance,
00098                      CoinIndexedVector * rowArray1,
00099                      CoinIndexedVector * rowArray2);
00100 
00102   void initializeWeights();
00103 
00105   virtual void saveWeights(ClpSimplex * model,int mode);
00107   virtual void unrollWeights();
00109   virtual void clearArrays();
00111   virtual bool looksOptimal() const;
00113   
00116 
00117   inline int mode() const
00118     { return mode_;};
00122   virtual int numberSprintColumns(int & numberIterations) const;
00124   virtual void switchOffSprint();
00125   
00127 
00130   enum Persistence {
00131     normal = 0x00, // create (if necessary) and destroy
00132     keep = 0x01 // create (if necessary) and leave
00133   };
00134   
00136 
00137 
00145   ClpPrimalColumnSteepest(int mode=3); 
00146   
00148   ClpPrimalColumnSteepest(const ClpPrimalColumnSteepest &);
00149   
00151   ClpPrimalColumnSteepest & operator=(const ClpPrimalColumnSteepest& rhs);
00152   
00154   virtual ~ClpPrimalColumnSteepest ();
00155 
00157   virtual ClpPrimalColumnPivot * clone(bool copyData = true) const;
00158 
00160 
00162 
00165   inline bool reference(int i) const {
00166     return ((reference_[i>>5]>>(i&31))&1)!=0;
00167   }
00168   inline void setReference(int i,bool trueFalse) {
00169     unsigned int & value = reference_[i>>5];
00170     int bit = i&31;
00171     if (trueFalse)
00172       value |= (1<<bit);
00173     else
00174       value &= ~(1<<bit);
00175   }
00177   inline void setPersistence(Persistence life)
00178   { persistence_ = life;};
00179   inline Persistence persistence() const
00180   { return persistence_ ;};
00181  
00183   //---------------------------------------------------------------------------
00184   
00185 private:
00187   // Update weight
00188   double devex_;
00190   double * weights_;
00192   CoinIndexedVector * infeasible_;
00194   CoinIndexedVector * alternateWeights_;
00196   double * savedWeights_;
00197   // Array for exact devex to say what is in reference framework
00198   unsigned int * reference_;
00204   int state_;
00217   int mode_;
00219   Persistence persistence_;
00221   int numberSwitched_;
00222   // This is pivot row (or pivot sequence round re-factorization)
00223   int pivotSequence_;  
00224   // This is saved pivot sequence
00225   int savedPivotSequence_;  
00226   // This is saved outgoing variable
00227   int savedSequenceOut_;  
00228   // Size of factorization at invert (used to decide algorithm)
00229   int sizeFactorization_;
00231 };
00232 
00233 #endif

Generated on Fri Aug 6 02:01:32 2004 by doxygen1.3-rc2