00001 /* $Id: ClpDualRowSteepest.hpp 2070 2014-11-18 11:12:54Z forrest $ */ 00002 // Copyright (C) 2002, International Business Machines 00003 // Corporation and others. All Rights Reserved. 00004 // This code is licensed under the terms of the Eclipse Public License (EPL). 00005 00006 #ifndef ClpDualRowSteepest_H 00007 #define ClpDualRowSteepest_H 00008 00009 #include "ClpDualRowPivot.hpp" 00010 class CoinIndexedVector; 00011 00012 00013 //############################################################################# 00014 00021 class ClpDualRowSteepest : public ClpDualRowPivot { 00022 00023 public: 00024 00026 00027 00029 virtual int pivotRow(); 00030 00033 virtual double updateWeights(CoinIndexedVector * input, 00034 CoinIndexedVector * spare, 00035 CoinIndexedVector * spare2, 00036 CoinIndexedVector * updatedColumn); 00037 00042 virtual void updatePrimalSolution(CoinIndexedVector * input, 00043 double theta, 00044 double & changeInObjective); 00045 00056 virtual void saveWeights(ClpSimplex * model, int mode); 00058 void passInSavedWeights(const CoinIndexedVector * saved); 00060 inline CoinIndexedVector * savedWeights() 00061 { return savedWeights_;} 00063 virtual void unrollWeights(); 00065 virtual void clearArrays(); 00067 virtual bool looksOptimal() const; 00069 virtual void maximumPivotsChanged(); 00071 00074 enum Persistence { 00075 normal = 0x00, // create (if necessary) and destroy 00076 keep = 0x01 // create (if necessary) and leave 00077 }; 00078 00080 00081 00088 ClpDualRowSteepest(int mode = 3); 00089 00091 ClpDualRowSteepest(const ClpDualRowSteepest &); 00092 00094 ClpDualRowSteepest & operator=(const ClpDualRowSteepest& rhs); 00095 00097 void fill(const ClpDualRowSteepest& rhs); 00098 00100 virtual ~ClpDualRowSteepest (); 00101 00103 virtual ClpDualRowPivot * clone(bool copyData = true) const; 00104 00106 00108 00109 inline int mode() const { 00110 return mode_; 00111 } 00113 inline void setMode(int mode) { 00114 mode_ = mode; 00115 } 00117 inline void setPersistence(Persistence life) { 00118 persistence_ = life; 00119 } 00120 inline Persistence persistence() const { 00121 return persistence_ ; 00122 } 00124 00125 //--------------------------------------------------------------------------- 00126 00127 private: 00129 00134 int state_; 00137 int mode_; 00139 Persistence persistence_; 00141 double * weights_; 00143 CoinIndexedVector * infeasible_; 00145 CoinIndexedVector * alternateWeights_; 00147 CoinIndexedVector * savedWeights_; 00149 int * dubiousWeights_; 00151 }; 00152 00153 #endif