00001 /* $Id: ClpDualRowSteepest.hpp 1458 2009-11-05 12:34:07Z forrest $ */ 00002 // Copyright (C) 2002, International Business Machines 00003 // Corporation and others. All Rights Reserved. 00004 #ifndef ClpDualRowSteepest_H 00005 #define ClpDualRowSteepest_H 00006 00007 #include "ClpDualRowPivot.hpp" 00008 class CoinIndexedVector; 00009 00010 00011 //############################################################################# 00012 00019 class ClpDualRowSteepest : public ClpDualRowPivot { 00020 00021 public: 00022 00024 00025 00027 virtual int pivotRow(); 00028 00031 virtual double updateWeights(CoinIndexedVector * input, 00032 CoinIndexedVector * spare, 00033 CoinIndexedVector * spare2, 00034 CoinIndexedVector * updatedColumn); 00035 00040 virtual void updatePrimalSolution(CoinIndexedVector * input, 00041 double theta, 00042 double & changeInObjective); 00043 00054 virtual void saveWeights(ClpSimplex * model, int mode); 00056 virtual void unrollWeights(); 00058 virtual void clearArrays(); 00060 virtual bool looksOptimal() const; 00062 virtual void maximumPivotsChanged(); 00064 00067 enum Persistence { 00068 normal = 0x00, // create (if necessary) and destroy 00069 keep = 0x01 // create (if necessary) and leave 00070 }; 00071 00073 00074 00081 ClpDualRowSteepest(int mode=3); 00082 00084 ClpDualRowSteepest(const ClpDualRowSteepest &); 00085 00087 ClpDualRowSteepest & operator=(const ClpDualRowSteepest& rhs); 00088 00090 void fill(const ClpDualRowSteepest& rhs); 00091 00093 virtual ~ClpDualRowSteepest (); 00094 00096 virtual ClpDualRowPivot * clone(bool copyData = true) const; 00097 00099 00101 00102 inline int mode() const 00103 { return mode_;} 00105 inline void setPersistence(Persistence life) 00106 { persistence_ = life;} 00107 inline Persistence persistence() const 00108 { return persistence_ ;} 00110 00111 //--------------------------------------------------------------------------- 00112 00113 private: 00115 00120 int state_; 00123 int mode_; 00125 Persistence persistence_; 00127 double * weights_; 00129 CoinIndexedVector * infeasible_; 00131 CoinIndexedVector * alternateWeights_; 00133 CoinIndexedVector * savedWeights_; 00135 int * dubiousWeights_; 00137 }; 00138 00139 #endif