CoinOslFactorization.hpp
Go to the documentation of this file.
1 /* $Id: CoinOslFactorization.hpp 1191 2009-07-25 08:38:12Z forrest $ */
2 // Copyright (C) 1987, 2009, International Business Machines
3 // Corporation and others. All Rights Reserved.
4 
5 /*
6  Authors
7 
8  John Forrest
9 
10  */
11 #ifndef CoinOslFactorization_H
12 #define CoinOslFactorization_H
13 #include <iostream>
14 #include <string>
15 #include <cassert>
16 #include "CoinFinite.hpp"
17 #include "CoinIndexedVector.hpp"
19 class CoinPackedMatrix;
27 typedef struct {int suc, pre;} EKKHlink;
28 typedef struct _EKKfactinfo {
29  double drtpiv;
30  double demark;
31  double zpivlu;
32  double zeroTolerance;
33  double areaFactor;
34  int *xrsadr;
35  int *xcsadr;
36  int *xrnadr;
37  int *xcnadr;
38  int *krpadr;
39  int *kcpadr;
40  int *mpermu;
41  int *bitArray;
42  int * back;
43  char * nonzero;
44  double * trueStart;
45  mutable double *kadrpm;
48  double *R_etas_element;
49 
50  int *xecadr;
51  int *xeradr;
52  double *xeeadr;
53  double *xe2adr;
56  double * kw1adr;
57  double * kw2adr;
58  double * kw3adr;
59  int * hpivcoR;
60  int nrow;
61  int nrowmx;
63  int firstLRow;
64  int maxinv;
65  int nnetas;
66  int iterin;
67  int iter0;
68  int invok;
69  int nbfinv;
71  int nnentl;
72  int nnentu;
73  int ndenuc;
74  int npivots; /* use as xpivsq in factorization */
75  int kmxeta;
76  int xnetal;
79  int iterno;
81  int lastSlack;
83  int xnetalval;
84  int lstart;
86  mutable int packedMode;
88  int nuspike;
89  bool rows_ok; /* replaces test using mrstrt[1] */
90 
91  int nR_etas;
92  int sortedEta; /* if vector for F-T is sorted */
94  int ifvsol;
95  int eta_size;
97  int maxNNetas;
98 } EKKfactinfo;
99 
101  friend void CoinOslFactorizationUnitTest( const std::string & mpsDir );
102 
103 public:
104 
111 
113  virtual ~CoinOslFactorization ( );
117  virtual CoinOtherFactorization * clone() const ;
119 
122  virtual void getAreas ( int numberRows,
124  int numberColumns,
125  CoinBigIndex maximumL,
126  CoinBigIndex maximumU );
127 
129  virtual void preProcess ( );
135  virtual int factor ( );
137  virtual void postProcess(const int * sequence, int * pivotVariable);
139  virtual void makeNonSingular(int * sequence, int numberColumns);
147  int factorize ( const CoinPackedMatrix & matrix,
148  int rowIsBasic[], int columnIsBasic[] ,
149  double areaFactor = 0.0 );
151 
154  virtual inline int numberElements ( ) const {
157  }
159  virtual CoinFactorizationDouble * elements() const;
161  virtual int * pivotRow() const;
163  virtual CoinFactorizationDouble * workArea() const;
165  virtual int * intWorkArea() const;
167  virtual int * numberInRow() const;
169  virtual int * numberInColumn() const;
171  virtual CoinBigIndex * starts() const;
173  virtual int * permuteBack() const;
175  virtual bool wantsTableauColumn() const;
180  virtual void setUsefulInformation(const int * info,int whereFrom);
182  virtual void maximumPivots ( int value );
183 
185  double maximumCoefficient() const;
187  double conditionNumber() const;
189  virtual void clearArrays();
191 
194 
202  virtual int replaceColumn ( CoinIndexedVector * regionSparse,
203  int pivotRow,
204  double pivotCheck ,
205  bool checkBeforeModifying=false,
206  double acceptablePivot=1.0e-8);
208 
218  virtual int updateColumnFT ( CoinIndexedVector * regionSparse,
219  CoinIndexedVector * regionSparse2,
220  bool noPermute=false);
223  virtual int updateColumn ( CoinIndexedVector * regionSparse,
224  CoinIndexedVector * regionSparse2,
225  bool noPermute=false) const;
227  virtual int updateTwoColumnsFT(CoinIndexedVector * regionSparse1,
228  CoinIndexedVector * regionSparse2,
229  CoinIndexedVector * regionSparse3,
230  bool noPermute=false);
235  virtual int updateColumnTranspose ( CoinIndexedVector * regionSparse,
236  CoinIndexedVector * regionSparse2) const;
238 
243  //inline void clearArrays()
245  //{ gutsOfDestructor();}
247  virtual int * indices() const;
249  virtual inline int * permute() const
250  { return NULL;/*pivotRow_*/;}
252 
254  void gutsOfDestructor(bool clearFact=true);
256  void gutsOfInitialize(bool zapFact=true);
258  void gutsOfCopy(const CoinOslFactorization &other);
259 
261 protected:
264  int checkPivot(double saveFromU, double oldPivot) const;
266 protected:
267 
273 };
274 #endif
struct _EKKfactinfo EKKfactinfo
virtual int updateColumnTranspose(CoinIndexedVector *regionSparse, CoinIndexedVector *regionSparse2) const
Updates one column (BTRAN) from regionSparse2 regionSparse starts as zero and is zero at end Note - i...
virtual int * indices() const
Get rid of all memory.
int CoinBigIndex
virtual int numberElements() const
Total number of elements in factorization.
CoinOslFactorization()
Default constructor.
virtual int * pivotRow() const
Returns pivot row.
int numberColumns_
Number of Columns in factorization.
virtual int updateColumnFT(CoinIndexedVector *regionSparse, CoinIndexedVector *regionSparse2, bool noPermute=false)
Updates one column (FTRAN) from regionSparse2 Tries to do FT update number returned is negative if no...
EKKfactinfo factInfo_
Osl factorization data.
virtual int * intWorkArea() const
Returns int work area.
int factorize(const CoinPackedMatrix &matrix, int rowIsBasic[], int columnIsBasic[], double areaFactor=0.0)
When part of LP - given by basic variables.
virtual int * numberInRow() const
Number of entries in each row.
virtual void postProcess(const int *sequence, int *pivotVariable)
Does post processing on valid factorization - putting variables on correct rows.
int numberColumns() const
Total number of columns in factorization.
virtual int updateColumn(CoinIndexedVector *regionSparse, CoinIndexedVector *regionSparse2, bool noPermute=false) const
This version has same effect as above with FTUpdate==false so number returned is always >=0...
double CoinFactorizationDouble
Definition: CoinFinite.hpp:86
Abstract base class which also has some scalars so can be used from Dense or Simp.
Sparse Matrix Base Class.
virtual void clearArrays()
Get rid of all memory.
friend void CoinOslFactorizationUnitTest(const std::string &mpsDir)
virtual int * permuteBack() const
Returns permute back.
virtual CoinOtherFactorization * clone() const
Clone.
double maximumCoefficient() const
Returns maximum absolute value in factorization.
int checkPivot(double saveFromU, double oldPivot) const
Returns accuracy status of replaceColumn returns 0=OK, 1=Probably OK, 2=singular. ...
virtual void preProcess()
PreProcesses column ordered copy of basis.
virtual void getAreas(int numberRows, int numberColumns, CoinBigIndex maximumL, CoinBigIndex maximumU)
Gets space for a factorization.
virtual CoinFactorizationDouble * elements() const
Returns array to put basis elements in.
virtual int * numberInColumn() const
Number of entries in each column.
Indexed Vector.
virtual int factor()
Does most of factorization returning status 0 - OK -99 - needs more memory -1 - singular - use number...
int maximumPivots() const
Maximum number of pivots between factorizations.
virtual void setUsefulInformation(const int *info, int whereFrom)
Useful information for factorization 0 - iteration number whereFrom is 0 for factorize and 1 for repl...
virtual CoinBigIndex * starts() const
Returns array to put basis starts in.
virtual void makeNonSingular(int *sequence, int numberColumns)
Makes a non-singular basis by replacing variables.
virtual int * permute() const
Returns permute in.
int numberRows() const
Number of Rows after factorization.
virtual int updateTwoColumnsFT(CoinIndexedVector *regionSparse1, CoinIndexedVector *regionSparse2, CoinIndexedVector *regionSparse3, bool noPermute=false)
does FTRAN on two columns
virtual int replaceColumn(CoinIndexedVector *regionSparse, int pivotRow, double pivotCheck, bool checkBeforeModifying=false, double acceptablePivot=1.0e-8)
Replaces one Column to basis, returns 0=OK, 1=Probably OK, 2=singular, 3=no room If checkBeforeModify...
void gutsOfCopy(const CoinOslFactorization &other)
The real work of copy.
CoinOslFactorization & operator=(const CoinOslFactorization &other)
= copy
virtual bool wantsTableauColumn() const
Returns true if wants tableauColumn in replaceColumn.
virtual CoinFactorizationDouble * workArea() const
Returns work area.
void gutsOfInitialize(bool zapFact=true)
The real work of constructor.
int numberPivots_
Number pivots since last factorization.
void gutsOfDestructor(bool clearFact=true)
The real work of desstructor.
int numberRows_
Number of Rows in factorization.
virtual ~CoinOslFactorization()
Destructor.
double conditionNumber() const
Condition number - product of pivots after factorization.