00001 // Copyright (C) 2002, International Business Machines 00002 // Corporation and others. All Rights Reserved. 00003 #ifndef ClpDualRowSteepest_H 00004 #define ClpDualRowSteepest_H 00005 00006 #include "ClpDualRowPivot.hpp" 00007 class CoinIndexedVector; 00008 00009 00010 //############################################################################# 00011 00018 class ClpDualRowSteepest : public ClpDualRowPivot { 00019 00020 public: 00021 00023 00024 00026 virtual int pivotRow(); 00027 00030 virtual double updateWeights(CoinIndexedVector * input, 00031 CoinIndexedVector * spare, 00032 CoinIndexedVector * spare2, 00033 CoinIndexedVector * updatedColumn); 00034 00039 virtual void updatePrimalSolution(CoinIndexedVector * input, 00040 double theta, 00041 double & changeInObjective); 00042 00053 virtual void saveWeights(ClpSimplex * model, int mode); 00055 virtual void unrollWeights(); 00057 virtual void clearArrays(); 00059 virtual bool looksOptimal() const; 00061 virtual void maximumPivotsChanged(); 00063 00066 enum Persistence { 00067 normal = 0x00, // create (if necessary) and destroy 00068 keep = 0x01 // create (if necessary) and leave 00069 }; 00070 00072 00073 00080 ClpDualRowSteepest(int mode=3); 00081 00083 ClpDualRowSteepest(const ClpDualRowSteepest &); 00084 00086 ClpDualRowSteepest & operator=(const ClpDualRowSteepest& rhs); 00087 00089 void fill(const ClpDualRowSteepest& rhs); 00090 00092 virtual ~ClpDualRowSteepest (); 00093 00095 virtual ClpDualRowPivot * clone(bool copyData = true) const; 00096 00098 00100 00101 inline int mode() const 00102 { return mode_;} 00104 inline void setPersistence(Persistence life) 00105 { persistence_ = life;} 00106 inline Persistence persistence() const 00107 { return persistence_ ;} 00109 00110 //--------------------------------------------------------------------------- 00111 00112 private: 00114 00119 int state_; 00122 int mode_; 00124 Persistence persistence_; 00126 double * weights_; 00128 CoinIndexedVector * infeasible_; 00130 CoinIndexedVector * alternateWeights_; 00132 CoinIndexedVector * savedWeights_; 00134 int * dubiousWeights_; 00136 }; 00137 00138 #endif