CoinUtils  2.11.9
CoinWarmStartBasis.hpp
Go to the documentation of this file.
1 /* $Id$ */
13 #ifndef CoinWarmStartBasis_H
14 #define CoinWarmStartBasis_H
15 
16 #include <vector>
17 
18 #include "CoinSort.hpp"
19 #include "CoinHelperFunctions.hpp"
20 #include "CoinWarmStart.hpp"
21 
22 //#############################################################################
23 
40 class CoinWarmStartBasis : public virtual CoinWarmStart {
41 public:
56  enum Status {
57  isFree = 0x00,
58  basic = 0x01,
59  atUpperBound = 0x02,
60  atLowerBound = 0x03,
61  superBasic = 0x04
62  };
63 
68 
72  typedef std::vector< XferEntry > XferVec;
73 
74 public:
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  {
100  const int st = (structuralStatus_[i >> 2] >> ((i & 3) << 1)) & 3;
101  return static_cast< CoinWarmStartBasis::Status >(st);
102  }
103 
105  inline void setStructStatus(int i, Status st)
106  {
107  char &st_byte = structuralStatus_[i >> 2];
108  st_byte = static_cast< char >(st_byte & ~(3 << ((i & 3) << 1)));
109  st_byte = static_cast< char >(st_byte | (st << ((i & 3) << 1)));
110  }
111 
117  inline char *getStructuralStatus() { return structuralStatus_; }
118 
124  inline const char *getStructuralStatus() const { return structuralStatus_; }
125 
129  inline char *getArtificialStatus() { return artificialStatus_; }
130 
132  inline Status getArtifStatus(int i) const
133  {
134  const int st = (artificialStatus_[i >> 2] >> ((i & 3) << 1)) & 3;
135  return static_cast< CoinWarmStartBasis::Status >(st);
136  }
137 
139  inline void setArtifStatus(int i, Status st)
140  {
141  char &st_byte = artificialStatus_[i >> 2];
142  st_byte = static_cast< char >(st_byte & ~(3 << ((i & 3) << 1)));
143  st_byte = static_cast< char >(st_byte | (st << ((i & 3) << 1)));
144  }
145 
151  inline const char *getArtificialStatus() const { return artificialStatus_; }
153 
156 
164  virtual CoinWarmStartDiff *
165  generateDiff(const CoinWarmStart *const oldCWS) const;
166 
173  virtual void
174  applyDiff(const CoinWarmStartDiff *const cwsdDiff);
175 
177 
180 
186  virtual void setSize(int ns, int na);
187 
196  virtual void resize(int newNumberRows, int newNumberColumns);
197 
214  virtual void compressRows(int tgtCnt, const int *tgts);
215 
227  virtual void deleteRows(int rawTgtCnt, const int *rawTgts);
228 
239  virtual void deleteColumns(int number, const int *which);
240 
253  virtual void mergeBasis(const CoinWarmStartBasis *src,
254  const XferVec *xferRows,
255  const XferVec *xferCols);
256 
258 
262 
269 
279  CoinWarmStartBasis(int ns, int na, const char *sStat, const char *aStat);
280 
283 
285  virtual CoinWarmStart *clone() const
286  {
287  return new CoinWarmStartBasis(*this);
288  }
289 
291  virtual ~CoinWarmStartBasis();
292 
295  virtual CoinWarmStartBasis &operator=(const CoinWarmStartBasis &rhs);
296 
312  virtual void assignBasisStatus(int ns, int na, char *&sStat, char *&aStat);
314 
317 
319  virtual void print() const;
321  bool fullBasis() const;
323  bool fixFullBasis();
324 
326 
327 protected:
334  int numStructural_;
339  int maxSize_;
345 };
346 
351 inline CoinWarmStartBasis::Status getStatus(const char *array, int i)
352 {
353  const int st = (array[i >> 2] >> ((i & 3) << 1)) & 3;
354  return static_cast< CoinWarmStartBasis::Status >(st);
355 }
356 
361 inline void setStatus(char *array, int i, CoinWarmStartBasis::Status st)
362 {
363  char &st_byte = array[i >> 2];
364  st_byte = static_cast< char >(st_byte & ~(3 << ((i & 3) << 1)));
365  st_byte = static_cast< char >(st_byte | (st << ((i & 3) << 1)));
366 }
367 
371 const char *statusName(CoinWarmStartBasis::Status status);
380 
405 public:
407  virtual CoinWarmStartDiff *clone() const
408  {
410  return (dynamic_cast< CoinWarmStartDiff * >(cwsbd));
411  }
412 
415 
417  virtual ~CoinWarmStartBasisDiff();
418 
419 protected:
427  : sze_(0)
428  , difference_(0)
429  {
430  }
431 
443 
445  CoinWarmStartBasisDiff(int sze, const unsigned int *const diffNdxs,
446  const unsigned int *const diffVals);
447 
450 
451 private:
452  friend CoinWarmStartDiff *
453  CoinWarmStartBasis::generateDiff(const CoinWarmStart *const oldCWS) const;
454  friend void
456 
458  int sze_;
459 
462  unsigned int *difference_;
463 };
464 
465 #endif
466 
467 /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2
468 */
statusToChar
char statusToChar(CoinWarmStartBasis::Status status)
In an example Aleksandr Kazachkov sent to me, I noticed he was using code as above but with char - it...
CoinWarmStartBasis::generateDiff
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...
CoinWarmStartBasis::superBasic
@ superBasic
Not basic and not at bound.
Definition: CoinWarmStartBasis.hpp:61
CoinWarmStartBasis::numberBasicStructurals
int numberBasicStructurals() const
Return the number of basic structurals.
CoinWarmStartBasis::atLowerBound
@ atLowerBound
Nonbasic at lower bound.
Definition: CoinWarmStartBasis.hpp:60
CoinWarmStartBasis::fullBasis
bool fullBasis() const
Returns true if full basis (for debug)
CoinWarmStartBasis::operator=
virtual CoinWarmStartBasis & operator=(const CoinWarmStartBasis &rhs)
Assignment.
CoinWarmStartBasis::mergeBasis
virtual void mergeBasis(const CoinWarmStartBasis *src, const XferVec *xferRows, const XferVec *xferCols)
Merge entries from a source basis into this basis.
CoinWarmStartBasis::atUpperBound
@ atUpperBound
Nonbasic at upper bound.
Definition: CoinWarmStartBasis.hpp:59
CoinWarmStartBasis::numArtificial_
int numArtificial_
The number of artificial variables.
Definition: CoinWarmStartBasis.hpp:337
CoinWarmStartBasisDiff
A ‘diff’ between two CoinWarmStartBasis objects.
Definition: CoinWarmStartBasis.hpp:404
CoinWarmStartBasis::getArtificialStatus
char * getArtificialStatus()
As for getStructuralStatus , but returns the status array for the artificial variables.
Definition: CoinWarmStartBasis.hpp:129
CoinWarmStartBasisDiff::difference_
unsigned int * difference_
Array of diff indices and diff values.
Definition: CoinWarmStartBasis.hpp:462
CoinWarmStartBasis::getNumArtificial
int getNumArtificial() const
Return the number of artificial variables.
Definition: CoinWarmStartBasis.hpp:89
CoinWarmStartBasis::setStructStatus
void setStructStatus(int i, Status st)
Set the status of the specified structural variable.
Definition: CoinWarmStartBasis.hpp:105
CoinSort.hpp
CoinWarmStartBasis::CoinWarmStartBasis
CoinWarmStartBasis()
Default constructor.
CoinWarmStartBasis::XferEntry
CoinTriple< int, int, int > XferEntry
Transfer vector entry for mergeBasis(const CoinWarmStartBasis*,const XferVec*,const XferVec*)
Definition: CoinWarmStartBasis.hpp:67
CoinWarmStartBasis::getArtificialStatus
const char * getArtificialStatus() const
const overload for getArtificialStatus()
Definition: CoinWarmStartBasis.hpp:151
CoinWarmStartBasis::print
virtual void print() const
Prints in readable format (for debug)
CoinWarmStartBasis::Status
Status
Enum for status of variables.
Definition: CoinWarmStartBasis.hpp:56
CoinWarmStartDiff
Abstract base class for warm start ‘diff’ objects.
Definition: CoinWarmStart.hpp:44
CoinWarmStartBasis
The default COIN simplex (basis-oriented) warm start class.
Definition: CoinWarmStartBasis.hpp:40
CoinWarmStartBasis::maxSize_
int maxSize_
The maximum sise (in ints - actually 4*char) (so resize does not need to do new)
Definition: CoinWarmStartBasis.hpp:339
CoinWarmStartBasisDiff::operator=
virtual CoinWarmStartBasisDiff & operator=(const CoinWarmStartBasisDiff &rhs)
Assignment.
CoinWarmStartBasis::deleteRows
virtual void deleteRows(int rawTgtCnt, const int *rawTgts)
Delete a set of rows from the basis.
CoinWarmStartBasis::getStructStatus
Status getStructStatus(int i) const
Return the status of the specified structural variable.
Definition: CoinWarmStartBasis.hpp:98
CoinWarmStartBasis::numStructural_
int numStructural_
The number of structural variables.
Definition: CoinWarmStartBasis.hpp:335
CoinWarmStartBasis::artificialStatus_
char * artificialStatus_
The status of the artificial variables.
Definition: CoinWarmStartBasis.hpp:343
CoinWarmStartBasis::~CoinWarmStartBasis
virtual ~CoinWarmStartBasis()
Destructor.
CoinWarmStartBasis::applyDiff
virtual void applyDiff(const CoinWarmStartDiff *const cwsdDiff)
Apply diff to this basis.
CoinTriple
Definition: CoinSort.hpp:509
CoinWarmStartBasisDiff::~CoinWarmStartBasisDiff
virtual ~CoinWarmStartBasisDiff()
Destructor.
CoinWarmStartBasis::setSize
virtual void setSize(int ns, int na)
Set basis capacity; existing basis is discarded.
CoinWarmStartBasis::resize
virtual void resize(int newNumberRows, int newNumberColumns)
Set basis capacity; existing basis is maintained.
CoinWarmStartBasis::getStructuralStatus
char * getStructuralStatus()
Return the status array for the structural variables.
Definition: CoinWarmStartBasis.hpp:117
CoinWarmStart.hpp
\legal Copyright (C) 2000 – 2003, International Business Machines Corporation and others.
CoinWarmStartBasis::structuralStatus_
char * structuralStatus_
The status of the structural variables.
Definition: CoinWarmStartBasis.hpp:341
CoinWarmStartBasis::getStructuralStatus
const char * getStructuralStatus() const
const overload for getStructuralStatus()
Definition: CoinWarmStartBasis.hpp:124
CoinPrePostsolveMatrix::statusName
const char * statusName(CoinPrePostsolveMatrix::Status status)
Generate a print string for a status code.
CoinWarmStartBasis::setStatus
void setStatus(char *array, int i, CoinWarmStartBasis::Status st)
Set the status of the specified variable in the given status array.
Definition: CoinWarmStartBasis.hpp:361
charToStatus
CoinWarmStartBasis::Status charToStatus(char status)
Convert character to status.
CoinWarmStartBasis::basic
@ basic
Basic variable.
Definition: CoinWarmStartBasis.hpp:58
CoinWarmStartBasis::getArtifStatus
Status getArtifStatus(int i) const
Return the status of the specified artificial variable.
Definition: CoinWarmStartBasis.hpp:132
CoinHelperFunctions.hpp
CoinWarmStartBasis::assignBasisStatus
virtual void assignBasisStatus(int ns, int na, char *&sStat, char *&aStat)
Assign the status vectors to be the warm start information.
CoinWarmStartBasis::deleteColumns
virtual void deleteColumns(int number, const int *which)
Delete a set of columns from the basis.
CoinWarmStartBasisDiff::clone
virtual CoinWarmStartDiff * clone() const
‘Virtual constructor’
Definition: CoinWarmStartBasis.hpp:407
CoinWarmStartBasisDiff::CoinWarmStartBasisDiff
CoinWarmStartBasisDiff()
Default constructor.
Definition: CoinWarmStartBasis.hpp:426
CoinWarmStartBasis::compressRows
virtual void compressRows(int tgtCnt, const int *tgts)
Delete a set of rows from the basis.
CoinWarmStartBasis::setArtifStatus
void setArtifStatus(int i, Status st)
Set the status of the specified artificial variable.
Definition: CoinWarmStartBasis.hpp:139
CoinWarmStart
Abstract base class for warm start information.
Definition: CoinWarmStart.hpp:21
CoinWarmStartBasis::fixFullBasis
bool fixFullBasis()
Returns true if full basis and fixes up (for debug)
CoinWarmStartBasis::isFree
@ isFree
Nonbasic free variable.
Definition: CoinWarmStartBasis.hpp:57
CoinWarmStartBasis::getStatus
CoinWarmStartBasis::Status getStatus(const char *array, int i)
Get the status of the specified variable in the given status array.
Definition: CoinWarmStartBasis.hpp:351
CoinWarmStartBasis::clone
virtual CoinWarmStart * clone() const
‘Virtual constructor’
Definition: CoinWarmStartBasis.hpp:285
CoinWarmStartBasis::XferVec
std::vector< XferEntry > XferVec
Transfer vector for mergeBasis(const CoinWarmStartBasis*,const XferVec*,const XferVec*)
Definition: CoinWarmStartBasis.hpp:72
CoinWarmStartBasisDiff::sze_
int sze_
Number of entries (and allocated capacity), in units of int.
Definition: CoinWarmStartBasis.hpp:458
CoinWarmStartBasis::getNumStructural
int getNumStructural() const
Return the number of structural variables.
Definition: CoinWarmStartBasis.hpp:86