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 00029 virtual double updateWeights(CoinIndexedVector * input, 00030 CoinIndexedVector * spare, 00031 CoinIndexedVector * updatedColumn); 00032 00037 virtual void updatePrimalSolution(CoinIndexedVector * input, 00038 double theta, 00039 double & changeInObjective); 00040 00051 virtual void saveWeights(ClpSimplex * model, int mode); 00053 virtual void unrollWeights(); 00055 virtual void clearArrays(); 00057 virtual bool looksOptimal() const; 00059 virtual void maximumPivotsChanged(); 00061 00064 enum Persistence { 00065 normal = 0x00, // create (if necessary) and destroy 00066 keep = 0x01 // create (if necessary) and leave 00067 }; 00068 00070 00071 00078 ClpDualRowSteepest(int mode=3); 00079 00081 ClpDualRowSteepest(const ClpDualRowSteepest &); 00082 00084 ClpDualRowSteepest & operator=(const ClpDualRowSteepest& rhs); 00085 00087 virtual ~ClpDualRowSteepest (); 00088 00090 virtual ClpDualRowPivot * clone(bool copyData = true) const; 00091 00093 00095 00096 inline int mode() const 00097 { return mode_;} 00099 inline void setPersistence(Persistence life) 00100 { persistence_ = life;} 00101 inline Persistence persistence() const 00102 { return persistence_ ;} 00104 00105 //--------------------------------------------------------------------------- 00106 00107 private: 00109 00114 int state_; 00117 int mode_; 00119 Persistence persistence_; 00121 double * weights_; 00123 CoinIndexedVector * infeasible_; 00125 CoinIndexedVector * alternateWeights_; 00127 CoinIndexedVector * savedWeights_; 00129 int * dubiousWeights_; 00131 }; 00132 00133 #endif