DyLP  1.10.4
OsiDylpWarmStartBasis.hpp
Go to the documentation of this file.
1 #ifndef OsiDylpWarmStartBasis_H
2 #define OsiDylpWarmStartBasis_H
3 
17 /*
18  sccs: @(#)OsiDylpWarmStartBasis.hpp 1.5 09/16/04
19  cvs: $Id: OsiDylpWarmStartBasis.hpp 1408 2009-10-04 10:27:59Z stefan $
20 */
21 
22 #include "CoinWarmStartBasis.hpp"
23 
24 class CoinMessageHandler;
25 
26 #define DYLP_INTERNAL
27 extern "C" {
28 #include "dylp.h"
29 }
30 
31 
32 
44 class OsiDylpWarmStartBasis : public CoinWarmStartBasis
45 
46 { public:
47 
56 
59  int numberActiveConstraints() const ;
60 
61 
64  inline Status getConStatus (int i) const
65 
66  { const int st = (constraintStatus_[i>>2] >> ((i&3)<<1)) & 3 ;
67  return (static_cast<CoinWarmStartBasis::Status>(st)) ; }
68 
69 
72  inline void setConStatus (int i, Status st)
73 
74  { char &st_byte = constraintStatus_[i>>2] ;
75  st_byte = static_cast<char>(st_byte & ~(3 << ((i&3)<<1))) ;
76  st_byte = static_cast<char>(st_byte | (st << ((i&3)<<1))) ; }
77 
78 
81  inline char *getConstraintStatus () { return (constraintStatus_) ; }
82 
89  inline const char *getConstraintStatus () const
90 
91  { return (constraintStatus_) ; }
92 
93 
96  inline void setPhase (dyphase_enum phase) { phase_ = phase ; }
97 
100  inline dyphase_enum getPhase () const { return (phase_) ; }
101 
103 
106 
109  CoinWarmStartDiff *generateDiff (const CoinWarmStart *const oldCWS) const ;
110 
113  void applyDiff (const CoinWarmStartDiff *const cwsdDiff) ;
114 
116 
119 
122  void setSize (int ns, int na) ;
123 
126  void resize (int numRows, int numCols) ;
127 
140  void compressRows (int tgtCnt, const int *tgts) ;
141 
149  void deleteRows (int number, const int *which) ;
150 
164  virtual void mergeBasis(const CoinWarmStartBasis *src,
165  const XferVec *xferRows,
166  const XferVec *xferCols) ;
167 
169 
172 
176 
179  OsiDylpWarmStartBasis (int ns, int na, const char *sStat,
180  const char *aStat, const char *cStat = 0) ;
181 
184  OsiDylpWarmStartBasis (const CoinWarmStartBasis &cwsb) ;
185 
189 
192  CoinWarmStart *clone () const ;
193 
197 
201 
204  void assignBasisStatus
205  (int ns, int na, char *&sStat, char *&aStat, char *&cStat) ;
206 
209  void assignBasisStatus
210  (int ns, int na, char *&sStat, char *&aStat) ;
211 
212 
214 
217 
220  void print () const ;
221 
224  void checkBasis (CoinMessageHandler* msghandler = NULL) const ;
225 
227 
228  private:
229 
232 
234 
236 
238 
239 } ;
240 
241 
242 
266 class OsiDylpWarmStartBasisDiff : public CoinWarmStartBasisDiff
267 { public:
268 
270  virtual CoinWarmStartDiff *clone() const
272  return (dynamic_cast<CoinWarmStartDiff *>(odwsbd)) ; }
273 
275  virtual
277 
280  { delete[] condiffNdxs_ ;
281  delete[] condiffVals_ ; }
282 
283  private:
284 
285  friend CoinWarmStartDiff *OsiDylpWarmStartBasis::generateDiff
286  (const CoinWarmStart *const oldCWS) const ;
288  (const CoinWarmStartDiff *const diff) ;
289 
291  OsiDylpWarmStartBasisDiff (int sze, const unsigned int *const diffNdxs,
292  const unsigned int *const diffVals,
293  const CoinWarmStartBasisDiff *const cwsbd) ;
294 
297  : CoinWarmStartBasisDiff(),
298  consze_(0),
299  condiffNdxs_(0),
300  condiffVals_(0)
301  { /* intentionally left blank */ }
302 
310 
311  /* Data members */
312 
314  int consze_ ;
315 
318  unsigned int *condiffNdxs_ ;
319 
322  unsigned int *condiffVals_ ;
323 
324 } ;
325 
326 
327 
328 #endif // OsiDylpWarmStartBasis_H
OsiDylpWarmStartBasisDiff::clone
virtual CoinWarmStartDiff * clone() const
‘Virtual constructor’
Definition: OsiDylpWarmStartBasis.hpp:270
OsiDylpWarmStartBasis::getPhase
dyphase_enum getPhase() const
Get the lp phase for this basis.
Definition: OsiDylpWarmStartBasis.hpp:100
OsiDylpWarmStartBasis::phase_
dyphase_enum phase_
dylp phase
Definition: OsiDylpWarmStartBasis.hpp:233
OsiDylpWarmStartBasis::getConstraintStatus
char * getConstraintStatus()
Return the status array for constraints.
Definition: OsiDylpWarmStartBasis.hpp:81
OsiDylpWarmStartBasis::print
void print() const
Prints in readable format (for debug)
OsiDylpWarmStartBasis::applyDiff
void applyDiff(const CoinWarmStartDiff *const cwsdDiff)
Apply diff to this basis.
OsiDylpWarmStartBasis::checkBasis
void checkBasis(CoinMessageHandler *msghandler=NULL) const
Performs basis consistency checks (for debug)
OsiDylpWarmStartBasisDiff::~OsiDylpWarmStartBasisDiff
virtual ~OsiDylpWarmStartBasisDiff()
Destructor.
Definition: OsiDylpWarmStartBasis.hpp:279
OsiDylpWarmStartBasis::assignBasisStatus
void assignBasisStatus(int ns, int na, char *&sStat, char *&aStat, char *&cStat)
Assign the status vectors to be the warm start information.
OsiDylpWarmStartBasis::compressRows
void compressRows(int tgtCnt, const int *tgts)
Delete a set of rows from the basis.
OsiDylpWarmStartBasis::getConstraintStatus
const char * getConstraintStatus() const
const overload for getConstraintStatus()
Definition: OsiDylpWarmStartBasis.hpp:89
OsiDylpWarmStartBasis::deleteRows
void deleteRows(int number, const int *which)
Delete a set of rows from the basis.
OsiDylpWarmStartBasis::OsiDylpWarmStartBasis
OsiDylpWarmStartBasis()
Default constructor (empty object)
OsiDylpWarmStartBasisDiff::condiffVals_
unsigned int * condiffVals_
Array of diff values for constraint status.
Definition: OsiDylpWarmStartBasis.hpp:322
dylp.h
OsiDylpWarmStartBasisDiff::OsiDylpWarmStartBasisDiff
OsiDylpWarmStartBasisDiff()
Default constructor.
Definition: OsiDylpWarmStartBasis.hpp:296
OsiDylpWarmStartBasis::setSize
void setSize(int ns, int na)
Set basis capacity; existing basis is discarded.
OsiDylpWarmStartBasis::numberActiveConstraints
int numberActiveConstraints() const
Return the number of active constraints.
OsiDylpWarmStartBasisDiff
A ‘diff’ between two OsiDylpWarmStartBasis objects.
Definition: OsiDylpWarmStartBasis.hpp:266
OsiDylpWarmStartBasis::constraintStatus_
char * constraintStatus_
vector of constraint status information
Definition: OsiDylpWarmStartBasis.hpp:235
OsiDylpWarmStartBasis::setConStatus
void setConStatus(int i, Status st)
Set the status of the specified constraint.
Definition: OsiDylpWarmStartBasis.hpp:72
OsiDylpWarmStartBasis::clone
CoinWarmStart * clone() const
‘Virtual constructor’
OsiDylpWarmStartBasis::operator=
OsiDylpWarmStartBasis & operator=(const OsiDylpWarmStartBasis &rhs)
Assignment.
OsiDylpWarmStartBasis::~OsiDylpWarmStartBasis
~OsiDylpWarmStartBasis()
Destructor.
OsiDylpWarmStartBasis::generateDiff
CoinWarmStartDiff * generateDiff(const CoinWarmStart *const oldCWS) const
Generate a ‘diff’ that can convert oldBasis to this basis.
OsiDylpWarmStartBasis
The dylp warm start class.
Definition: OsiDylpWarmStartBasis.hpp:44
OsiDylpWarmStartBasisDiff::operator=
virtual OsiDylpWarmStartBasisDiff & operator=(const OsiDylpWarmStartBasisDiff &rhs)
Assignment.
OsiDylpWarmStartBasisDiff::consze_
int consze_
Number of entries (and allocated capacity), in units of int.
Definition: OsiDylpWarmStartBasis.hpp:314
OsiDylpWarmStartBasis::getConStatus
Status getConStatus(int i) const
Return the status of the specified constraint.
Definition: OsiDylpWarmStartBasis.hpp:64
OsiDylpWarmStartBasis::mergeBasis
virtual void mergeBasis(const CoinWarmStartBasis *src, const XferVec *xferRows, const XferVec *xferCols)
Merge entries from a source basis into this basis.
OsiDylpWarmStartBasis::resize
void resize(int numRows, int numCols)
Set basis capacity; existing basis is maintained.
OsiDylpWarmStartBasisDiff::condiffNdxs_
unsigned int * condiffNdxs_
Array of diff indices for constraint status.
Definition: OsiDylpWarmStartBasis.hpp:318
dyphase_enum
dyphase_enum
Definition: dylp.h:212
OsiDylpWarmStartBasis::setPhase
void setPhase(dyphase_enum phase)
Set the lp phase for this basis.
Definition: OsiDylpWarmStartBasis.hpp:96