Clp  1.16.11
ClpCholeskyBase.hpp
Go to the documentation of this file.
1 /* $Id: ClpCholeskyBase.hpp 1722 2011-04-17 09:58:37Z stefan $ */
2 // Copyright (C) 2003, International Business Machines
3 // Corporation and others. All Rights Reserved.
4 // This code is licensed under the terms of the Eclipse Public License (EPL).
5 
6 #ifndef ClpCholeskyBase_H
7 #define ClpCholeskyBase_H
8 
9 #include "CoinPragma.hpp"
10 #include "CoinTypes.hpp"
11 //#define CLP_LONG_CHOLESKY 0
12 #ifndef CLP_LONG_CHOLESKY
13 #define CLP_LONG_CHOLESKY 0
14 #endif
15 /* valid combinations are
16  CLP_LONG_CHOLESKY 0 and COIN_LONG_WORK 0
17  CLP_LONG_CHOLESKY 1 and COIN_LONG_WORK 1
18  CLP_LONG_CHOLESKY 2 and COIN_LONG_WORK 1
19 */
20 #if COIN_LONG_WORK==0
21 #if CLP_LONG_CHOLESKY>0
22 #define CHOLESKY_BAD_COMBINATION
23 #endif
24 #else
25 #if CLP_LONG_CHOLESKY==0
26 #define CHOLESKY_BAD_COMBINATION
27 #endif
28 #endif
29 #ifdef CHOLESKY_BAD_COMBINATION
30 # warning("Bad combination of CLP_LONG_CHOLESKY and COIN_BIG_DOUBLE/COIN_LONG_WORK");
31 "Bad combination of CLP_LONG_CHOLESKY and COIN_LONG_WORK"
32 #endif
33 #if CLP_LONG_CHOLESKY>1
34 typedef long double longDouble;
35 #define CHOL_SMALL_VALUE 1.0e-15
36 #elif CLP_LONG_CHOLESKY==1
37 typedef double longDouble;
38 #define CHOL_SMALL_VALUE 1.0e-11
39 #else
40 typedef double longDouble;
41 #define CHOL_SMALL_VALUE 1.0e-11
42 #endif
43 class ClpInterior;
44 class ClpCholeskyDense;
45 class ClpMatrixBase;
46 
54 
55 public:
64  virtual int order(ClpInterior * model);
69  virtual int symbolic();
72  virtual int factorize(const CoinWorkDouble * diagonal, int * rowsDropped) ;
74  virtual void solve (CoinWorkDouble * region) ;
77  virtual void solveKKT (CoinWorkDouble * region1, CoinWorkDouble * region2, const CoinWorkDouble * diagonal,
78  CoinWorkDouble diagonalScaleFactor);
79 private:
81  int orderAMD();
82 public:
84 
87  inline int status() const {
89  return status_;
90  }
92  inline int numberRowsDropped() const {
93  return numberRowsDropped_;
94  }
98  inline char * rowsDropped() const {
99  return rowsDropped_;
100  }
102  inline double choleskyCondition() const {
103  return choleskyCondition_;
104  }
106  inline double goDense() const {
107  return goDense_;
108  }
110  inline void setGoDense(double value) {
111  goDense_ = value;
112  }
114  inline int rank() const {
116  }
118  inline int numberRows() const {
119  return numberRows_;
120  }
122  inline CoinBigIndex size() const {
123  return sizeFactor_;
124  }
126  inline longDouble * sparseFactor() const {
127  return sparseFactor_;
128  }
130  inline longDouble * diagonal() const {
131  return diagonal_;
132  }
134  inline longDouble * workDouble() const {
135  return workDouble_;
136  }
138  inline bool kkt() const {
139  return doKKT_;
140  }
142  inline void setKKT(bool yesNo) {
143  doKKT_ = yesNo;
144  }
146  inline void setIntegerParameter(int i, int value) {
147  integerParameters_[i] = value;
148  }
150  inline int getIntegerParameter(int i) {
151  return integerParameters_[i];
152  }
154  inline void setDoubleParameter(int i, double value) {
155  doubleParameters_[i] = value;
156  }
158  inline double getDoubleParameter(int i) {
159  return doubleParameters_[i];
160  }
162 
163 
164 public:
165 
171  ClpCholeskyBase(int denseThreshold = -1);
173  virtual ~ClpCholeskyBase();
179 
180  virtual ClpCholeskyBase * clone() const;
183 
185  inline int type() const {
186  if (doKKT_) return 100;
187  else return type_;
188  }
189 protected:
191  inline void setType(int type) {
192  type_ = type;
193  }
195  inline void setModel(ClpInterior * model) {
196  model_ = model;
197  }
199 
206  int symbolic1(const CoinBigIndex * Astart, const int * Arow);
210  void symbolic2(const CoinBigIndex * Astart, const int * Arow);
218  void solve(CoinWorkDouble * region, int type);
220  int preOrder(bool lowerTriangular, bool includeDiagonal, bool doKKT);
222  void updateDense(longDouble * d, /*longDouble * work,*/ int * first);
224 
225 protected:
229  int type_;
232  bool doKKT_;
234  double goDense_;
244  int status_;
246  char * rowsDropped_;
250  int * permute_;
256  CoinBigIndex * choleskyStart_;
260  CoinBigIndex * indexStart_;
266  int * link_;
267  // Integer work array
268  CoinBigIndex * workInteger_;
269  // Clique information
270  int * clique_;
272  CoinBigIndex sizeFactor_;
274  CoinBigIndex sizeIndex_;
280  double doubleParameters_[64];
284  char * whichDense_;
292 };
293 
294 #endif
longDouble
double longDouble
Definition: ClpCholeskyBase.hpp:40
ClpCholeskyBase::diagonal
longDouble * diagonal() const
Return diagonal.
Definition: ClpCholeskyBase.hpp:130
ClpCholeskyBase::rowCopy_
ClpMatrixBase * rowCopy_
Row copy of matrix.
Definition: ClpCholeskyBase.hpp:282
ClpCholeskyBase::doKKT_
bool doKKT_
Doing full KKT (only used if default symbolic and factorization)
Definition: ClpCholeskyBase.hpp:232
ClpCholeskyBase::numberRowsDropped
int numberRowsDropped() const
numberRowsDropped. Number of rows gone
Definition: ClpCholeskyBase.hpp:92
ClpCholeskyBase::setIntegerParameter
void setIntegerParameter(int i, int value)
Set integer parameter.
Definition: ClpCholeskyBase.hpp:146
ClpCholeskyBase::choleskyRow_
int * choleskyRow_
choleskyRow (can be shorter than sparsefactor)
Definition: ClpCholeskyBase.hpp:258
ClpCholeskyBase::type
int type() const
Returns type.
Definition: ClpCholeskyBase.hpp:185
ClpCholeskyBase::ClpCholeskyBase
ClpCholeskyBase(int denseThreshold=-1)
Constructor which has dense columns activated.
ClpCholeskyBase::clique_
int * clique_
Definition: ClpCholeskyBase.hpp:270
ClpCholeskyBase::solve
void solve(CoinWorkDouble *region, int type)
solve - 1 just first half, 2 just second half - 3 both.
ClpCholeskyBase::getDoubleParameter
double getDoubleParameter(int i)
get double parameter
Definition: ClpCholeskyBase.hpp:158
ClpCholeskyBase::setModel
void setModel(ClpInterior *model)
model.
Definition: ClpCholeskyBase.hpp:195
ClpCholeskyBase
Base class for Clp Cholesky factorization Will do better factorization.
Definition: ClpCholeskyBase.hpp:53
ClpCholeskyBase::doubleParameters_
double doubleParameters_[64]
doubleParameters;
Definition: ClpCholeskyBase.hpp:280
ClpCholeskyBase::choleskyCondition
double choleskyCondition() const
choleskyCondition.
Definition: ClpCholeskyBase.hpp:102
ClpCholeskyBase::sizeFactor_
CoinBigIndex sizeFactor_
sizeFactor.
Definition: ClpCholeskyBase.hpp:272
ClpCholeskyBase::denseColumn_
longDouble * denseColumn_
Dense columns (updated)
Definition: ClpCholeskyBase.hpp:286
ClpCholeskyBase::link_
int * link_
link array
Definition: ClpCholeskyBase.hpp:266
ClpCholeskyDense
Definition: ClpCholeskyDense.hpp:14
ClpCholeskyBase::resetRowsDropped
void resetRowsDropped()
reset numberRowsDropped and rowsDropped.
ClpCholeskyBase::size
CoinBigIndex size() const
Return size.
Definition: ClpCholeskyBase.hpp:122
ClpCholeskyBase::setKKT
void setKKT(bool yesNo)
Set KKT.
Definition: ClpCholeskyBase.hpp:142
ClpCholeskyBase::solve
virtual void solve(CoinWorkDouble *region)
Uses factorization to solve.
ClpCholeskyBase::factorizePart2
void factorizePart2(int *rowsDropped)
Factorize - filling in rowsDropped and returning number dropped in integerParam.
ClpCholeskyBase::choleskyCondition_
double choleskyCondition_
choleskyCondition.
Definition: ClpCholeskyBase.hpp:236
ClpCholeskyBase::rowsDropped
char * rowsDropped() const
rowsDropped - which rows are gone
Definition: ClpCholeskyBase.hpp:98
ClpCholeskyBase::kkt
bool kkt() const
If KKT on.
Definition: ClpCholeskyBase.hpp:138
ClpCholeskyBase::setGoDense
void setGoDense(double value)
goDense i.e. use dense factoriaztion if > this (default 0.7).
Definition: ClpCholeskyBase.hpp:110
ClpCholeskyBase::choleskyStart_
CoinBigIndex * choleskyStart_
choleskyStart - element starts
Definition: ClpCholeskyBase.hpp:256
ClpCholeskyBase::numberRows_
int numberRows_
numberRows. Number of Rows in factorization
Definition: ClpCholeskyBase.hpp:242
ClpCholeskyBase::denseThreshold_
int denseThreshold_
Dense threshold (for taking out of Cholesky)
Definition: ClpCholeskyBase.hpp:290
ClpCholeskyBase::dense_
ClpCholeskyDense * dense_
Dense cholesky.
Definition: ClpCholeskyBase.hpp:288
ClpCholeskyBase::setDoubleParameter
void setDoubleParameter(int i, double value)
Set double parameter.
Definition: ClpCholeskyBase.hpp:154
ClpCholeskyBase::ClpCholeskyBase
ClpCholeskyBase(const ClpCholeskyBase &)
Copy.
ClpCholeskyBase::getIntegerParameter
int getIntegerParameter(int i)
get integer parameter
Definition: ClpCholeskyBase.hpp:150
ClpMatrixBase
Abstract base class for Clp Matrices.
Definition: ClpMatrixBase.hpp:38
ClpCholeskyBase::symbolic
virtual int symbolic()
Does Symbolic factorization given permutation.
ClpCholeskyBase::status
int status() const
status. Returns status
Definition: ClpCholeskyBase.hpp:88
ClpCholeskyBase::status_
int status_
status. Status of factorization
Definition: ClpCholeskyBase.hpp:244
ClpCholeskyBase::numberTrials_
int numberTrials_
numberTrials. Number of trials before rejection
Definition: ClpCholeskyBase.hpp:240
ClpCholeskyBase::goDense
double goDense() const
goDense i.e. use dense factoriaztion if > this (default 0.7).
Definition: ClpCholeskyBase.hpp:106
ClpCholeskyBase::firstDense_
int firstDense_
First dense row.
Definition: ClpCholeskyBase.hpp:276
ClpCholeskyBase::type_
int type_
type (may be useful) if > 20 do KKT
Definition: ClpCholeskyBase.hpp:230
ClpCholeskyBase::symbolic1
int symbolic1(const CoinBigIndex *Astart, const int *Arow)
Symbolic1 - works out size without clever stuff.
ClpCholeskyBase::workDouble
longDouble * workDouble() const
Return workDouble.
Definition: ClpCholeskyBase.hpp:134
ClpCholeskyBase::diagonal_
longDouble * diagonal_
Diagonal.
Definition: ClpCholeskyBase.hpp:262
ClpInterior
This solves LPs using interior point methods.
Definition: ClpInterior.hpp:72
ClpCholeskyBase::workDouble_
longDouble * workDouble_
double work array
Definition: ClpCholeskyBase.hpp:264
ClpCholeskyBase::rank
int rank() const
rank. Returns rank
Definition: ClpCholeskyBase.hpp:114
ClpCholeskyBase::goDense_
double goDense_
Go dense at this fraction.
Definition: ClpCholeskyBase.hpp:234
ClpCholeskyBase::sparseFactor_
longDouble * sparseFactor_
sparseFactor.
Definition: ClpCholeskyBase.hpp:254
ClpCholeskyBase::operator=
ClpCholeskyBase & operator=(const ClpCholeskyBase &)
Assignment.
ClpCholeskyBase::preOrder
int preOrder(bool lowerTriangular, bool includeDiagonal, bool doKKT)
Forms ADAT - returns nonzero if not enough memory.
ClpCholeskyBase::model_
ClpInterior * model_
model.
Definition: ClpCholeskyBase.hpp:238
ClpCholeskyBase::indexStart_
CoinBigIndex * indexStart_
Index starts.
Definition: ClpCholeskyBase.hpp:260
ClpCholeskyBase::numberRows
int numberRows() const
Return number of rows.
Definition: ClpCholeskyBase.hpp:118
ClpCholeskyBase::numberRowsDropped_
int numberRowsDropped_
numberRowsDropped. Number of rows gone
Definition: ClpCholeskyBase.hpp:252
ClpCholeskyBase::permute_
int * permute_
main permute.
Definition: ClpCholeskyBase.hpp:250
ClpCholeskyBase::solveKKT
virtual void solveKKT(CoinWorkDouble *region1, CoinWorkDouble *region2, const CoinWorkDouble *diagonal, CoinWorkDouble diagonalScaleFactor)
Uses factorization to solve.
ClpCholeskyBase::clone
virtual ClpCholeskyBase * clone() const
ClpCholeskyBase::whichDense_
char * whichDense_
Dense indicators.
Definition: ClpCholeskyBase.hpp:284
ClpCholeskyBase::factorize
virtual int factorize(const CoinWorkDouble *diagonal, int *rowsDropped)
Factorize - filling in rowsDropped and returning number dropped.
ClpCholeskyBase::integerParameters_
int integerParameters_[64]
integerParameters
Definition: ClpCholeskyBase.hpp:278
ClpCholeskyBase::updateDense
void updateDense(longDouble *d, int *first)
Updates dense part (broken out for profiling)
ClpCholeskyBase::rowsDropped_
char * rowsDropped_
rowsDropped
Definition: ClpCholeskyBase.hpp:246
ClpCholeskyBase::workInteger_
CoinBigIndex * workInteger_
Definition: ClpCholeskyBase.hpp:268
ClpCholeskyBase::sparseFactor
longDouble * sparseFactor() const
Return sparseFactor.
Definition: ClpCholeskyBase.hpp:126
ClpCholeskyBase::order
virtual int order(ClpInterior *model)
Orders rows and saves pointer to matrix.and model.
ClpCholeskyBase::sizeIndex_
CoinBigIndex sizeIndex_
Size of index array.
Definition: ClpCholeskyBase.hpp:274
ClpCholeskyBase::~ClpCholeskyBase
virtual ~ClpCholeskyBase()
Destructor (has to be public)
ClpCholeskyBase::setType
void setType(int type)
Sets type.
Definition: ClpCholeskyBase.hpp:191
ClpCholeskyBase::permuteInverse_
int * permuteInverse_
permute inverse.
Definition: ClpCholeskyBase.hpp:248
ClpCholeskyBase::symbolic2
void symbolic2(const CoinBigIndex *Astart, const int *Arow)
Symbolic2 - Fills in indices Uses lower triangular so can do cliques etc.