Go to the documentation of this file.00001
00002
00003
00004 #ifndef ClpPrimalColumnSteepest_H
00005 #define ClpPrimalColumnSteepest_H
00006
00007 #include "ClpPrimalColumnPivot.hpp"
00008 #include <bitset>
00009
00010
00011 class CoinIndexedVector;
00012
00013
00021 class ClpPrimalColumnSteepest : public ClpPrimalColumnPivot {
00022
00023 public:
00024
00026
00027
00035 virtual int pivotColumn(CoinIndexedVector * updates,
00036 CoinIndexedVector * spareRow1,
00037 CoinIndexedVector * spareRow2,
00038 CoinIndexedVector * spareColumn1,
00039 CoinIndexedVector * spareColumn2);
00041 int pivotColumnOldMethod(CoinIndexedVector * updates,
00042 CoinIndexedVector * spareRow1,
00043 CoinIndexedVector * spareRow2,
00044 CoinIndexedVector * spareColumn1,
00045 CoinIndexedVector * spareColumn2);
00047 void justDjs(CoinIndexedVector * updates,
00048 CoinIndexedVector * spareRow2,
00049 CoinIndexedVector * spareColumn1,
00050 CoinIndexedVector * spareColumn2);
00052 int partialPricing(CoinIndexedVector * updates,
00053 CoinIndexedVector * spareRow2,
00054 int numberWanted,
00055 int numberLook);
00057 void djsAndDevex(CoinIndexedVector * updates,
00058 CoinIndexedVector * spareRow2,
00059 CoinIndexedVector * spareColumn1,
00060 CoinIndexedVector * spareColumn2);
00062 void djsAndSteepest(CoinIndexedVector * updates,
00063 CoinIndexedVector * spareRow2,
00064 CoinIndexedVector * spareColumn1,
00065 CoinIndexedVector * spareColumn2);
00067 void djsAndDevex2(CoinIndexedVector * updates,
00068 CoinIndexedVector * spareRow2,
00069 CoinIndexedVector * spareColumn1,
00070 CoinIndexedVector * spareColumn2);
00072 void djsAndSteepest2(CoinIndexedVector * updates,
00073 CoinIndexedVector * spareRow2,
00074 CoinIndexedVector * spareColumn1,
00075 CoinIndexedVector * spareColumn2);
00077 void justDevex(CoinIndexedVector * updates,
00078 CoinIndexedVector * spareRow2,
00079 CoinIndexedVector * spareColumn1,
00080 CoinIndexedVector * spareColumn2);
00082 void justSteepest(CoinIndexedVector * updates,
00083 CoinIndexedVector * spareRow2,
00084 CoinIndexedVector * spareColumn1,
00085 CoinIndexedVector * spareColumn2);
00087 void transposeTimes2(const CoinIndexedVector * pi1, CoinIndexedVector * dj1,
00088 const CoinIndexedVector * pi2, CoinIndexedVector * dj2,
00089 CoinIndexedVector * spare, double scaleFactor);
00090
00092 virtual void updateWeights(CoinIndexedVector * input);
00093
00095 void checkAccuracy(int sequence, double relativeTolerance,
00096 CoinIndexedVector * rowArray1,
00097 CoinIndexedVector * rowArray2);
00098
00100 void initializeWeights();
00101
00110 virtual void saveWeights(ClpSimplex * model, int mode);
00112 virtual void unrollWeights();
00114 virtual void clearArrays();
00116 virtual bool looksOptimal() const;
00118 virtual void maximumPivotsChanged();
00120
00123
00124 inline int mode() const {
00125 return mode_;
00126 }
00130 virtual int numberSprintColumns(int & numberIterations) const;
00132 virtual void switchOffSprint();
00133
00135
00138 enum Persistence {
00139 normal = 0x00,
00140 keep = 0x01
00141 };
00142
00144
00145
00153 ClpPrimalColumnSteepest(int mode = 3);
00154
00156 ClpPrimalColumnSteepest(const ClpPrimalColumnSteepest & rhs);
00157
00159 ClpPrimalColumnSteepest & operator=(const ClpPrimalColumnSteepest& rhs);
00160
00162 virtual ~ClpPrimalColumnSteepest ();
00163
00165 virtual ClpPrimalColumnPivot * clone(bool copyData = true) const;
00166
00168
00170
00173 inline bool reference(int i) const {
00174 return ((reference_[i>>5] >> (i & 31)) & 1) != 0;
00175 }
00176 inline void setReference(int i, bool trueFalse) {
00177 unsigned int & value = reference_[i>>5];
00178 int bit = i & 31;
00179 if (trueFalse)
00180 value |= (1 << bit);
00181 else
00182 value &= ~(1 << bit);
00183 }
00185 inline void setPersistence(Persistence life) {
00186 persistence_ = life;
00187 }
00188 inline Persistence persistence() const {
00189 return persistence_ ;
00190 }
00191
00193
00194
00195 private:
00197
00198 double devex_;
00200 double * weights_;
00202 CoinIndexedVector * infeasible_;
00204 CoinIndexedVector * alternateWeights_;
00206 double * savedWeights_;
00207
00208 unsigned int * reference_;
00214 int state_;
00227 int mode_;
00229 Persistence persistence_;
00231 int numberSwitched_;
00232
00233 int pivotSequence_;
00234
00235 int savedPivotSequence_;
00236
00237 int savedSequenceOut_;
00238
00239 int lastRectified_;
00240
00241 int sizeFactorization_;
00243 };
00244
00245 #endif