Cgl  0.60.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
ClpCholeskyBase.hpp
Go to the documentation of this file.
1 /* $Id: ClpCholeskyBase.hpp 2385 2019-01-06 19:43:06Z unxusr $ */
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 
80 private:
82  int orderAMD();
83 
84 public:
86 
89  inline int status() const
91  {
92  return status_;
93  }
95  inline int numberRowsDropped() const
96  {
97  return numberRowsDropped_;
98  }
100  void resetRowsDropped();
102  inline char *rowsDropped() const
103  {
104  return rowsDropped_;
105  }
107  inline double choleskyCondition() const
108  {
109  return choleskyCondition_;
110  }
112  inline double goDense() const
113  {
114  return goDense_;
115  }
117  inline void setGoDense(double value)
118  {
119  goDense_ = value;
120  }
122  inline int rank() const
123  {
125  }
127  inline int numberRows() const
128  {
129  return numberRows_;
130  }
132  inline int size() const
133  {
134  return sizeFactor_;
135  }
137  inline longDouble *sparseFactor() const
138  {
139  return sparseFactor_;
140  }
142  inline longDouble *diagonal() const
143  {
144  return diagonal_;
145  }
147  inline longDouble *workDouble() const
148  {
149  return workDouble_;
150  }
152  inline bool kkt() const
153  {
154  return doKKT_;
155  }
157  inline void setKKT(bool yesNo)
158  {
159  doKKT_ = yesNo;
160  }
162  inline void setIntegerParameter(int i, int value)
163  {
164  integerParameters_[i] = value;
165  }
167  inline int getIntegerParameter(int i)
168  {
169  return integerParameters_[i];
170  }
172  inline void setDoubleParameter(int i, double value)
173  {
174  doubleParameters_[i] = value;
175  }
177  inline double getDoubleParameter(int i)
178  {
179  return doubleParameters_[i];
180  }
182 
183 public:
189  ClpCholeskyBase(int denseThreshold = -1);
191  virtual ~ClpCholeskyBase();
197 
198  virtual ClpCholeskyBase *clone() const;
201 
203  inline int type() const
204  {
205  if (doKKT_)
206  return 100;
207  else
208  return type_;
209  }
210 
211 protected:
213  inline void setType(int type)
214  {
215  type_ = type;
216  }
218  inline void setModel(ClpInterior *model)
219  {
220  model_ = model;
221  }
223 
230  int symbolic1(const int *Astart, const int *Arow);
234  void symbolic2(const int *Astart, const int *Arow);
238  void factorizePart2(int *rowsDropped);
242  void solve(CoinWorkDouble *region, int type);
244  int preOrder(bool lowerTriangular, bool includeDiagonal, bool doKKT);
246  void updateDense(longDouble *d, /*longDouble * work,*/ int *first);
248 
249 protected:
253  int type_;
256  bool doKKT_;
258  double goDense_;
268  int status_;
274  int *permute_;
290  int *link_;
291  // Integer work array
293  // Clique information
294  int *clique_;
304  double doubleParameters_[64];
308  char *whichDense_;
316 };
317 
318 #endif
319 
320 /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2
321 */
longDouble * sparseFactor() const
Return sparseFactor.
void symbolic2(const int *Astart, const int *Arow)
Symbolic2 - Fills in indices Uses lower triangular so can do cliques etc.
int type_
type (may be useful) if > 20 do KKT
int size() const
Return size.
int sizeFactor_
sizeFactor.
virtual int symbolic()
Does Symbolic factorization given permutation.
int numberRowsDropped() const
numberRowsDropped. Number of rows gone
Abstract base class for Clp Matrices.
int * permuteInverse_
permute inverse.
This solves LPs using interior point methods.
Definition: ClpInterior.hpp:72
char * whichDense_
Dense indicators.
char * rowsDropped() const
rowsDropped - which rows are gone
double goDense_
Go dense at this fraction.
double getDoubleParameter(int i)
get double parameter
longDouble * sparseFactor_
sparseFactor.
void setIntegerParameter(int i, int value)
Set integer parameter.
char * rowsDropped_
rowsDropped
int * indexStart_
Index starts.
void setType(int type)
Sets type.
int preOrder(bool lowerTriangular, bool includeDiagonal, bool doKKT)
Forms ADAT - returns nonzero if not enough memory.
double choleskyCondition_
choleskyCondition.
ClpMatrixBase * rowCopy_
Row copy of matrix.
double goDense() const
goDense i.e. use dense factoriaztion if > this (default 0.7).
int * choleskyStart_
choleskyStart - element starts
longDouble * workDouble_
double work array
virtual void solveKKT(CoinWorkDouble *region1, CoinWorkDouble *region2, const CoinWorkDouble *diagonal, CoinWorkDouble diagonalScaleFactor)
Uses factorization to solve.
int rank() const
rank. Returns rank
int numberRows_
numberRows. Number of Rows in factorization
int sizeIndex_
Size of index array.
int orderAMD()
AMD ordering.
virtual void solve(CoinWorkDouble *region)
Uses factorization to solve.
virtual ~ClpCholeskyBase()
Destructor (has to be public)
Base class for Clp Cholesky factorization Will do better factorization.
longDouble * workDouble() const
Return workDouble.
bool kkt() const
If KKT on.
int numberRowsDropped_
numberRowsDropped. Number of rows gone
void factorizePart2(int *rowsDropped)
Factorize - filling in rowsDropped and returning number dropped in integerParam.
void resetRowsDropped()
reset numberRowsDropped and rowsDropped.
int getIntegerParameter(int i)
get integer parameter
int symbolic1(const int *Astart, const int *Arow)
Symbolic1 - works out size without clever stuff.
ClpInterior * model_
model.
int status() const
status. Returns status
int numberRows() const
Return number of rows.
longDouble * diagonal() const
Return diagonal.
longDouble * diagonal_
Diagonal.
void setModel(ClpInterior *model)
model.
double doubleParameters_[64]
doubleParameters;
int firstDense_
First dense row.
virtual int order(ClpInterior *model)
Orders rows and saves pointer to matrix.and model.
ClpCholeskyDense * dense_
Dense cholesky.
ClpCholeskyBase & operator=(const ClpCholeskyBase &)
Assignment.
int * link_
link array
void updateDense(longDouble *d, int *first)
Updates dense part (broken out for profiling)
int numberTrials_
numberTrials. Number of trials before rejection
double longDouble
void setKKT(bool yesNo)
Set KKT.
virtual int factorize(const CoinWorkDouble *diagonal, int *rowsDropped)
Factorize - filling in rowsDropped and returning number dropped.
double choleskyCondition() const
choleskyCondition.
int * choleskyRow_
choleskyRow (can be shorter than sparsefactor)
int * permute_
main permute.
void setDoubleParameter(int i, double value)
Set double parameter.
longDouble * denseColumn_
Dense columns (updated)
double CoinWorkDouble
Definition: CoinTypes.hpp:53
virtual ClpCholeskyBase * clone() const
int type() const
Returns type.
ClpCholeskyBase(int denseThreshold=-1)
Constructor which has dense columns activated.
int status_
status. Status of factorization
bool doKKT_
Doing full KKT (only used if default symbolic and factorization)
void setGoDense(double value)
goDense i.e. use dense factoriaztion if > this (default 0.7).
int denseThreshold_
Dense threshold (for taking out of Cholesky)
int integerParameters_[64]
integerParameters