CoinWarmStartBasis.hpp
Go to the documentation of this file.
1 /* $Id: CoinWarmStartBasis.hpp 1215 2009-11-05 11:03:04Z forrest $ */
12 #ifndef CoinWarmStartBasis_H
13 #define CoinWarmStartBasis_H
14 
15 #include <vector>
16 
17 #include "CoinSort.hpp"
18 #include "CoinHelperFunctions.hpp"
19 #include "CoinWarmStart.hpp"
20 
21 //#############################################################################
22 
39 class CoinWarmStartBasis : public virtual CoinWarmStart {
40 public:
41 
56  enum Status {
57  isFree = 0x00,
58  basic = 0x01,
59  atUpperBound = 0x02,
60  atLowerBound = 0x03
61  };
62 
67 
71  typedef std::vector<XferEntry> XferVec ;
72 
73 public:
74 
85  inline int getNumStructural() const { return numStructural_; }
87 
89  inline int getNumArtificial() const { return numArtificial_; }
90 
95  int numberBasicStructurals() const ;
96 
98  inline Status getStructStatus(int i) const {
99  const int st = (structuralStatus_[i>>2] >> ((i&3)<<1)) & 3;
100  return static_cast<CoinWarmStartBasis::Status>(st);
101  }
102 
104  inline void setStructStatus(int i, Status st) {
105  char& st_byte = structuralStatus_[i>>2];
106  st_byte = static_cast<char>(st_byte & ~(3 << ((i&3)<<1))) ;
107  st_byte = static_cast<char>(st_byte | (st << ((i&3)<<1))) ;
108  }
109 
115  inline char * getStructuralStatus() { return structuralStatus_; }
116 
122  inline const char * getStructuralStatus() const { return structuralStatus_; }
123 
127  inline char * getArtificialStatus() { return artificialStatus_; }
128 
130  inline Status getArtifStatus(int i) const {
131  const int st = (artificialStatus_[i>>2] >> ((i&3)<<1)) & 3;
132  return static_cast<CoinWarmStartBasis::Status>(st);
133  }
134 
136  inline void setArtifStatus(int i, Status st) {
137  char& st_byte = artificialStatus_[i>>2];
138  st_byte = static_cast<char>(st_byte & ~(3 << ((i&3)<<1))) ;
139  st_byte = static_cast<char>(st_byte | (st << ((i&3)<<1))) ;
140  }
141 
147  inline const char * getArtificialStatus() const { return artificialStatus_; }
148 
150 
153 
161  virtual CoinWarmStartDiff*
162  generateDiff (const CoinWarmStart *const oldCWS) const ;
163 
170  virtual void
171  applyDiff (const CoinWarmStartDiff *const cwsdDiff) ;
172 
174 
175 
178 
184  virtual void setSize(int ns, int na) ;
185 
194  virtual void resize (int newNumberRows, int newNumberColumns);
195 
212  virtual void compressRows (int tgtCnt, const int *tgts) ;
213 
225  virtual void deleteRows(int rawTgtCnt, const int *rawTgts) ;
226 
237  virtual void deleteColumns(int number, const int * which);
238 
251  virtual void mergeBasis(const CoinWarmStartBasis *src,
252  const XferVec *xferRows,
253  const XferVec *xferCols) ;
254 
256 
260 
267 
277  CoinWarmStartBasis(int ns, int na, const char* sStat, const char* aStat) ;
278 
281 
283  virtual CoinWarmStart *clone() const
284  {
285  return new CoinWarmStartBasis(*this);
286  }
287 
289  virtual ~CoinWarmStartBasis();
290 
293  virtual CoinWarmStartBasis& operator=(const CoinWarmStartBasis& rhs) ;
294 
310  virtual void assignBasisStatus(int ns, int na, char*& sStat, char*& aStat) ;
312 
315 
317  virtual void print() const;
319  bool fullBasis() const;
321  bool fixFullBasis();
322 
324 
325 protected:
332  int numStructural_;
337  int maxSize_;
343 };
344 
345 
350 inline CoinWarmStartBasis::Status getStatus(const char *array, int i) {
351  const int st = (array[i>>2] >> ((i&3)<<1)) & 3;
352  return static_cast<CoinWarmStartBasis::Status>(st);
353 }
354 
359 inline void setStatus(char * array, int i, CoinWarmStartBasis::Status st) {
360  char& st_byte = array[i>>2];
361  st_byte = static_cast<char>(st_byte & ~(3 << ((i&3)<<1))) ;
362  st_byte = static_cast<char>(st_byte | (st << ((i&3)<<1))) ;
363 }
364 
365 
366 
391 { public:
392 
394  virtual CoinWarmStartDiff *clone() const
395  { CoinWarmStartBasisDiff *cwsbd = new CoinWarmStartBasisDiff(*this) ;
396  return (dynamic_cast<CoinWarmStartDiff *>(cwsbd)) ; }
397 
399  virtual
401 
403  virtual ~CoinWarmStartBasisDiff();
404 
405  protected:
406 
414 
426 
428  CoinWarmStartBasisDiff (int sze, const unsigned int *const diffNdxs,
429  const unsigned int *const diffVals) ;
430 
433 
434  private:
435 
436  friend CoinWarmStartDiff*
437  CoinWarmStartBasis::generateDiff(const CoinWarmStart *const oldCWS) const ;
438  friend void
440 
442  int sze_ ;
443 
446  unsigned int *difference_ ;
447 
448 } ;
449 
450 
451 #endif
char * structuralStatus_
The status of the structural variables.
virtual void setSize(int ns, int na)
Set basis capacity; existing basis is discarded.
std::vector< XferEntry > XferVec
Transfer vector for mergeBasis(const CoinWarmStartBasis*,const XferVec*,const XferVec*) ...
virtual void mergeBasis(const CoinWarmStartBasis *src, const XferVec *xferRows, const XferVec *xferCols)
Merge entries from a source basis into this basis.
const char * getArtificialStatus() const
const overload for getArtificialStatus()
virtual CoinWarmStartDiff * generateDiff(const CoinWarmStart *const oldCWS) const
Generate a `diff' that can convert the warm start basis passed as a parameter to the warm start basis...
int maxSize_
The maximum sise (in ints - actually 4*char) (so resize does not need to do new)
bool fullBasis() const
Returns true if full basis (for debug)
virtual void resize(int newNumberRows, int newNumberColumns)
Set basis capacity; existing basis is maintained.
char * getArtificialStatus()
As for getStructuralStatus , but returns the status array for the artificial variables.
Abstract base class for warm start `diff' objects.
unsigned int * difference_
Array of diff indices and diff values.
const char * getStructuralStatus() const
const overload for getStructuralStatus()
Nonbasic free variable.
virtual CoinWarmStartBasisDiff & operator=(const CoinWarmStartBasisDiff &rhs)
Assignment.
void setStructStatus(int i, Status st)
Set the status of the specified structural variable.
int getNumStructural() const
Return the number of structural variables.
A `diff' between two CoinWarmStartBasis objects.
virtual ~CoinWarmStartBasis()
Destructor.
virtual void applyDiff(const CoinWarmStartDiff *const cwsdDiff)
Apply diff to this basis.
CoinWarmStartBasis::Status getStatus(const char *array, int i)
Get the status of the specified variable in the given status array.
CoinWarmStartBasisDiff()
Default constructor.
int numberBasicStructurals() const
Return the number of basic structurals.
Declaration of the generic simplex (basis-oriented) warm start class. Also contains a basis diff clas...
Status getStructStatus(int i) const
Return the status of the specified structural variable.
virtual CoinWarmStartBasis & operator=(const CoinWarmStartBasis &rhs)
Assignment.
bool fixFullBasis()
Returns true if full basis and fixes up (for debug)
CoinTriple< int, int, int > XferEntry
Transfer vector entry for mergeBasis(const CoinWarmStartBasis*,const XferVec*,const XferVec*) ...
void setStatus(char *array, int i, CoinWarmStartBasis::Status st)
Set the status of the specified variable in the given status array.
int numArtificial_
The number of artificial variables.
CoinWarmStartBasis()
Default constructor.
int getNumArtificial() const
Return the number of artificial variables.
Abstract base class for warm start information.
Status getArtifStatus(int i) const
Return the status of the specified artificial variable.
virtual void assignBasisStatus(int ns, int na, char *&sStat, char *&aStat)
Assign the status vectors to be the warm start information.
virtual void deleteColumns(int number, const int *which)
Delete a set of columns from the basis.
virtual void print() const
Prints in readable format (for debug)
int numStructural_
The number of structural variables.
void setArtifStatus(int i, Status st)
Set the status of the specified artificial variable.
int sze_
Number of entries (and allocated capacity), in units of int.
virtual CoinWarmStart * clone() const
`Virtual constructor'
char * getStructuralStatus()
Return the status array for the structural variables.
virtual void deleteRows(int rawTgtCnt, const int *rawTgts)
Delete a set of rows from the basis.
virtual void compressRows(int tgtCnt, const int *tgts)
Delete a set of rows from the basis.
char * artificialStatus_
The status of the artificial variables.
virtual CoinWarmStartDiff * clone() const
`Virtual constructor'
virtual ~CoinWarmStartBasisDiff()
Destructor.
The default COIN simplex (basis-oriented) warm start class.
Status
Enum for status of variables.