ClpPrimalColumnSteepest.hpp
Go to the documentation of this file.
1 /* $Id: ClpPrimalColumnSteepest.hpp 1525 2010-02-26 17:27:59Z mjs $ */
2 // Copyright (C) 2002, International Business Machines
3 // Corporation and others. All Rights Reserved.
4 #ifndef ClpPrimalColumnSteepest_H
5 #define ClpPrimalColumnSteepest_H
6 
8 #include <bitset>
9 
10 //#############################################################################
11 class CoinIndexedVector;
12 
13 
22 
23 public:
24 
26 
27 
35  virtual int pivotColumn(CoinIndexedVector * updates,
36  CoinIndexedVector * spareRow1,
37  CoinIndexedVector * spareRow2,
38  CoinIndexedVector * spareColumn1,
39  CoinIndexedVector * spareColumn2);
41  int pivotColumnOldMethod(CoinIndexedVector * updates,
42  CoinIndexedVector * spareRow1,
43  CoinIndexedVector * spareRow2,
44  CoinIndexedVector * spareColumn1,
45  CoinIndexedVector * spareColumn2);
47  void justDjs(CoinIndexedVector * updates,
48  CoinIndexedVector * spareRow2,
49  CoinIndexedVector * spareColumn1,
50  CoinIndexedVector * spareColumn2);
52  int partialPricing(CoinIndexedVector * updates,
53  CoinIndexedVector * spareRow2,
54  int numberWanted,
55  int numberLook);
57  void djsAndDevex(CoinIndexedVector * updates,
58  CoinIndexedVector * spareRow2,
59  CoinIndexedVector * spareColumn1,
60  CoinIndexedVector * spareColumn2);
62  void djsAndSteepest(CoinIndexedVector * updates,
63  CoinIndexedVector * spareRow2,
64  CoinIndexedVector * spareColumn1,
65  CoinIndexedVector * spareColumn2);
67  void djsAndDevex2(CoinIndexedVector * updates,
68  CoinIndexedVector * spareRow2,
69  CoinIndexedVector * spareColumn1,
70  CoinIndexedVector * spareColumn2);
72  void djsAndSteepest2(CoinIndexedVector * updates,
73  CoinIndexedVector * spareRow2,
74  CoinIndexedVector * spareColumn1,
75  CoinIndexedVector * spareColumn2);
77  void justDevex(CoinIndexedVector * updates,
78  CoinIndexedVector * spareRow2,
79  CoinIndexedVector * spareColumn1,
80  CoinIndexedVector * spareColumn2);
82  void justSteepest(CoinIndexedVector * updates,
83  CoinIndexedVector * spareRow2,
84  CoinIndexedVector * spareColumn1,
85  CoinIndexedVector * spareColumn2);
87  void transposeTimes2(const CoinIndexedVector * pi1, CoinIndexedVector * dj1,
88  const CoinIndexedVector * pi2, CoinIndexedVector * dj2,
89  CoinIndexedVector * spare, double scaleFactor);
90 
92  virtual void updateWeights(CoinIndexedVector * input);
93 
95  void checkAccuracy(int sequence, double relativeTolerance,
96  CoinIndexedVector * rowArray1,
97  CoinIndexedVector * rowArray2);
98 
100  void initializeWeights();
101 
110  virtual void saveWeights(ClpSimplex * model, int mode);
112  virtual void unrollWeights();
114  virtual void clearArrays();
116  virtual bool looksOptimal() const;
118  virtual void maximumPivotsChanged();
120 
123 
124  inline int mode() const {
125  return mode_;
126  }
130  virtual int numberSprintColumns(int & numberIterations) const;
132  virtual void switchOffSprint();
133 
135 
138  enum Persistence {
139  normal = 0x00, // create (if necessary) and destroy
140  keep = 0x01 // create (if necessary) and leave
141  };
142 
144 
145 
153  ClpPrimalColumnSteepest(int mode = 3);
154 
157 
160 
162  virtual ~ClpPrimalColumnSteepest ();
163 
165  virtual ClpPrimalColumnPivot * clone(bool copyData = true) const;
166 
168 
170 
173  inline bool reference(int i) const {
174  return ((reference_[i>>5] >> (i & 31)) & 1) != 0;
175  }
176  inline void setReference(int i, bool trueFalse) {
177  unsigned int & value = reference_[i>>5];
178  int bit = i & 31;
179  if (trueFalse)
180  value |= (1 << bit);
181  else
182  value &= ~(1 << bit);
183  }
185  inline void setPersistence(Persistence life) {
186  persistence_ = life;
187  }
188  inline Persistence persistence() const {
189  return persistence_ ;
190  }
191 
193  //---------------------------------------------------------------------------
194 
195 private:
197  // Update weight
198  double devex_;
200  double * weights_;
202  CoinIndexedVector * infeasible_;
204  CoinIndexedVector * alternateWeights_;
206  double * savedWeights_;
207  // Array for exact devex to say what is in reference framework
208  unsigned int * reference_;
214  int state_;
227  int mode_;
232  // This is pivot row (or pivot sequence round re-factorization)
234  // This is saved pivot sequence
236  // This is saved outgoing variable
238  // Iteration when last rectified
240  // Size of factorization at invert (used to decide algorithm)
243 };
244 
245 #endif