DyLP  1.9.4
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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 
233  dyphase_enum phase_ ;
234 
235  char *constraintStatus_ ;
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
OsiDylpWarmStartBasis()
Default constructor (empty object)
void compressRows(int tgtCnt, const int *tgts)
Delete a set of rows from the basis.
~OsiDylpWarmStartBasis()
Destructor.
dyphase_enum getPhase() const
Get the lp phase for this basis.
OsiDylpWarmStartBasis & operator=(const OsiDylpWarmStartBasis &rhs)
Assignment.
A `diff' between two OsiDylpWarmStartBasis objects.
virtual OsiDylpWarmStartBasisDiff & operator=(const OsiDylpWarmStartBasisDiff &rhs)
Assignment.
void checkBasis(CoinMessageHandler *msghandler=NULL) const
Performs basis consistency checks (for debug)
int numberActiveConstraints() const
Return the number of active constraints.
void setConStatus(int i, Status st)
Set the status of the specified constraint.
CoinWarmStartDiff * generateDiff(const CoinWarmStart *const oldCWS) const
Generate a `diff' that can convert oldBasis to this basis.
void resize(int numRows, int numCols)
Set basis capacity; existing basis is maintained.
void deleteRows(int number, const int *which)
Delete a set of rows from the basis.
Status getConStatus(int i) const
Return the status of the specified constraint.
void setPhase(dyphase_enum phase)
Set the lp phase for this basis.
virtual ~OsiDylpWarmStartBasisDiff()
Destructor.
virtual CoinWarmStartDiff * clone() const
`Virtual constructor'
void print() const
Prints in readable format (for debug)
const char * getConstraintStatus() const
const overload for getConstraintStatus()
dyphase_enum
Definition: dylp.h:212
The dylp warm start class.
void assignBasisStatus(int ns, int na, char *&sStat, char *&aStat, char *&cStat)
Assign the status vectors to be the warm start information.
void setSize(int ns, int na)
Set basis capacity; existing basis is discarded.
char * getConstraintStatus()
Return the status array for constraints.
virtual void mergeBasis(const CoinWarmStartBasis *src, const XferVec *xferRows, const XferVec *xferCols)
Merge entries from a source basis into this basis.
CoinWarmStart * clone() const
`Virtual constructor'
void applyDiff(const CoinWarmStartDiff *const cwsdDiff)
Apply diff to this basis.