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

ClpPrimalColumnSteepest.hpp

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 numberToDo);
00056   void djsAndDevex(CoinIndexedVector * updates,
00057                CoinIndexedVector * spareRow1,
00058                CoinIndexedVector * spareRow2,
00059                CoinIndexedVector * spareColumn1,
00060                CoinIndexedVector * spareColumn2);
00062   void djsAndSteepest(CoinIndexedVector * updates,
00063                CoinIndexedVector * spareRow1,
00064                CoinIndexedVector * spareRow2,
00065                CoinIndexedVector * spareColumn1,
00066                CoinIndexedVector * spareColumn2);
00068   void djsAndDevex2(CoinIndexedVector * updates,
00069                CoinIndexedVector * spareRow1,
00070                CoinIndexedVector * spareRow2,
00071                CoinIndexedVector * spareColumn1,
00072                CoinIndexedVector * spareColumn2);
00074   void djsAndSteepest2(CoinIndexedVector * updates,
00075                CoinIndexedVector * spareRow1,
00076                CoinIndexedVector * spareRow2,
00077                CoinIndexedVector * spareColumn1,
00078                CoinIndexedVector * spareColumn2);
00080   void justDevex(CoinIndexedVector * updates,
00081                CoinIndexedVector * spareRow1,
00082                CoinIndexedVector * spareRow2,
00083                CoinIndexedVector * spareColumn1,
00084                CoinIndexedVector * spareColumn2);
00086   void justSteepest(CoinIndexedVector * updates,
00087                CoinIndexedVector * spareRow1,
00088                CoinIndexedVector * spareRow2,
00089                CoinIndexedVector * spareColumn1,
00090                CoinIndexedVector * spareColumn2);
00091 
00093   virtual void updateWeights(CoinIndexedVector * input);
00094 
00096   void checkAccuracy(int sequence,double relativeTolerance,
00097                      CoinIndexedVector * rowArray1,
00098                      CoinIndexedVector * rowArray2);
00099 
00101   void initializeWeights();
00102 
00104   virtual void saveWeights(ClpSimplex * model,int mode);
00106   virtual void unrollWeights();
00108   virtual void clearArrays();
00110   virtual bool looksOptimal() const;
00112   
00115 
00116   inline int mode() const
00117     { return mode_;};
00121   virtual int numberSprintColumns(int & numberIterations) const;
00123   virtual void switchOffSprint();
00124   
00126 
00127   
00129 
00130 
00138   ClpPrimalColumnSteepest(int mode=3); 
00139   
00141   ClpPrimalColumnSteepest(const ClpPrimalColumnSteepest &);
00142   
00144   ClpPrimalColumnSteepest & operator=(const ClpPrimalColumnSteepest& rhs);
00145   
00147   virtual ~ClpPrimalColumnSteepest ();
00148 
00150   virtual ClpPrimalColumnPivot * clone(bool copyData = true) const;
00151  
00153 
00155 
00158   inline bool reference(int i) const {
00159     return ((reference_[i>>5]>>(i&31))&1)!=0;
00160   }
00161   inline void setReference(int i,bool trueFalse) {
00162     unsigned int & value = reference_[i>>5];
00163     int bit = i&31;
00164     if (trueFalse)
00165       value |= (1<<bit);
00166     else
00167       value &= ~(1<<bit);
00168   }
00170   //---------------------------------------------------------------------------
00171   
00172 private:
00174   // Update weight
00175   double devex_;
00177   double * weights_;
00179   CoinIndexedVector * infeasible_;
00181   CoinIndexedVector * alternateWeights_;
00183   double * savedWeights_;
00184   // Array for exact devex to say what is in reference framework
00185   unsigned int * reference_;
00191   int state_;
00202   int mode_;
00204   int numberSwitched_;
00205   // This is pivot row (or pivot sequence round re-factorization)
00206   int pivotSequence_;  
00207   // This is saved pivot sequence
00208   int savedPivotSequence_;  
00209   // This is saved outgoing variable
00210   int savedSequenceOut_;  
00211   // Size of factorization at invert (used to decide algorithm)
00212   int sizeFactorization_;
00214 };
00215 
00216 #endif

Generated on Wed Dec 3 14:37:31 2003 for CLP by doxygen 1.3.5