13 #ifndef CoinAbcDenseFactorization_H
14 #define CoinAbcDenseFactorization_H
46 inline int status ( )
const {
58 inline void setParallelMode(
int value)
60 {parallelMode_=value;};
168 virtual int *
indices()
const = 0;
171 virtual int *
permute()
const = 0;
193 #ifdef EARLY_FACTORIZE
198 virtual void postProcess(
const int * sequence,
int * pivotVariable) = 0;
223 bool skipBtranU=
false,
224 double acceptablePivot=1.0e-8)=0;
226 #ifdef EARLY_FACTORIZE
227 virtual int replaceColumns (
const AbcSimplex * ,
233 #ifdef ABC_LONG_FACTORIZATION
234 virtual void clearHiddenArrays() {}
242 #ifdef ABC_LONG_FACTORIZATION
249 #ifdef ABC_LONG_FACTORIZATION
267 #ifdef ABC_LONG_FACTORIZATION
271 double acceptablePivot = 1.0e-8) = 0;
278 #ifdef ABC_LONG_FACTORIZATION
289 #ifdef ABC_LONG_FACTORIZATION
344 #define slackValue2_ 1.0
431 virtual void postProcess(
const int * sequence,
int * pivotVariable);
456 bool skipBtranU=
false,
457 double acceptablePivot=1.0e-8);
463 #ifdef ABC_LONG_FACTORIZATION
467 double acceptablePivot = 1.0e-8) ;
474 #ifdef ABC_LONG_FACTORIZATION
485 #ifdef ABC_LONG_FACTORIZATION
553 int checkPivot(
double saveFromU,
double oldPivot)
const;
virtual int factor(AbcSimplex *model)=0
Does most of factorization returning status 0 - OK -99 - needs more memory -1 - singular - use number...
virtual int * pivotColumn() const
Returns pivotColumn or permute.
virtual void getAreas(int numberRows, int numberColumns, CoinBigIndex maximumL, CoinBigIndex maximumU)
Gets space for a factorization.
virtual void makeNonSingular(int *sequence)
Makes a non-singular basis by replacing variables.
void gutsOfCopy(const CoinAbcDenseFactorization &other)
The real work of copy.
virtual void updateWeights(CoinIndexedVector ®ionSparse) const
Updates one column for dual steepest edge weights (FTRAN)
int maximumPivots() const
Maximum number of pivots between factorizations.
void gutsOfDestructor()
The real work of desstructor.
double pivotTolerance() const
Pivot tolerance.
double zeroTolerance() const
Zero tolerance.
virtual int updateColumnFT(CoinIndexedVector ®ionSparse)
Updates one column (FTRAN) from unpacked regionSparse Tries to do FT update number returned is negati...
virtual void getAreas(int numberRows, int numberColumns, CoinBigIndex maximumL, CoinBigIndex maximumU)=0
Gets space for a factorization.
int checkPivot(double saveFromU, double oldPivot) const
Returns accuracy status of replaceColumn returns 0=OK, 1=Probably OK, 2=singular. ...
Abstract base class which also has some scalars so can be used from Dense or Simp.
CoinSimplexInt numberDense() const
Number of dense rows after factorization.
virtual void updateColumnCpu(CoinIndexedVector ®ionSparse, int whichCpu) const
Updates one column (FTRAN)
virtual void replaceColumnPart3(const AbcSimplex *model, CoinIndexedVector *regionSparse, CoinIndexedVector *tableauColumn, int pivotRow, double alpha)=0
Replaces one Column to basis, partial update already in U.
virtual void clearArrays()
Get rid of all memory.
virtual CoinAbcAnyFactorization * clone() const =0
Clone.
int numberRows() const
Number of Rows after factorization.
virtual CoinFactorizationDouble * pivotRegion() const
Returns status.
virtual int * permute() const
Returns permute in.
virtual void postProcess(const int *sequence, int *pivotVariable)=0
Does post processing on valid factorization - putting variables on correct rows.
void setNumberSlacks(int value)
Sets number of slacks.
CoinAbcAnyFactorization()
Default constructor.
virtual CoinFactorizationDouble * elements() const
Returns array to put basis elements in.
virtual CoinAbcAnyFactorization * clone() const
Clone.
virtual int * permuteBack() const
Returns permute back.
int numberDense_
Number of dense rows in factorization.
virtual ~CoinAbcDenseFactorization()
Destructor.
Sparse Matrix Base Class.
int numberSlacks_
Number slacks.
virtual int checkReplacePart2(int pivotRow, double btranAlpha, double ftranAlpha, double ftAlpha, double acceptablePivot=1.0e-8)=0
Checks if can replace one Column to basis, returns 0=OK, 1=Probably OK, 2=singular, 3=no room, 5 max pivots.
virtual void updateColumnFTPart2(CoinIndexedVector &)
Updates one column (FTRAN) from unpacked regionSparse Tries to do FT update number returned is negati...
virtual void makeNonSingular(int *sequence)=0
Makes a non-singular basis by replacing variables.
This deals with Factorization and Updates This is a simple dense version so other people can write a ...
int numberRows_
Number of Rows in factorization.
int solveMode_
Solve mode e.g.
virtual double checkReplacePart1b(CoinIndexedVector *, int)
Checks if can replace one Column to basis, returns update alpha Fills in region for use later partial...
virtual void postProcess(const int *sequence, int *pivotVariable)
Does post processing on valid factorization - putting variables on correct rows.
virtual void updateWeights(CoinIndexedVector ®ionSparse) const =0
Updates one column for dual steepest edge weights (FTRAN)
int status_
Status of factorization.
virtual void preProcess()
PreProcesses column ordered copy of basis.
void setStatus(int value)
Sets status.
virtual void checkMarkArrays() const
Returns status.
virtual int updateColumnFT(CoinIndexedVector ®ionSparse)=0
Updates one column (FTRAN) from unpacked regionSparse Tries to do FT update number returned is negati...
virtual int updateColumnFTPart1(CoinIndexedVector ®ionSparse)=0
Updates one column (FTRAN) from unpacked regionSparse Tries to do FT update number returned is negati...
virtual int * numberInRow() const
Number of entries in each row.
double CoinFactorizationDouble
int numberSlacks() const
Returns number of slacks.
virtual int updateColumn(CoinIndexedVector ®ionSparse) const =0
This version has same effect as above with FTUpdate==false so number returned is always >=0...
virtual int updateTwoColumnsFT(CoinIndexedVector ®ionFT, CoinIndexedVector ®ionOther)
does FTRAN on two unpacked columns
virtual void updateFullColumnTranspose(CoinIndexedVector ®ionSparse) const =0
Updates one column (BTRAN) from unpacked regionSparse.
double zeroTolerance_
Zero tolerance.
void areaFactor(CoinSimplexDouble value)
Returns status.
CoinSimplexInt maximumRowsAdjusted_
Use for array size to get multiple of 8.
void gutsOfInitialize()
The real work of constructor.
virtual void checkReplacePart1a(CoinIndexedVector *, int)
Checks if can replace one Column to basis, returns update alpha Fills in region for use later partial...
void relaxAccuracyCheck(double value)
Allows change of pivot accuracy check 1.0 == none >1.0 relaxed.
int status() const
Returns status.
void setSolveMode(int value)
Set solve mode e.g.
CoinAbcAnyFactorization & operator=(const CoinAbcAnyFactorization &other)
= copy
CoinFactorizationDouble * workArea_
Work area of numberRows_.
virtual int * intWorkArea() const
Returns int work area.
virtual int replaceColumn(CoinIndexedVector *regionSparse, int pivotRow, double pivotCheck, bool skipBtranU=false, double acceptablePivot=1.0e-8)
Replaces one Column to basis, returns 0=OK, 1=Probably OK, 2=singular, 3=no room If skipBtranU is fal...
double relaxCheck_
Relax check on accuracy in replaceColumn.
virtual double checkReplacePart1(CoinIndexedVector *, CoinIndexedVector *, int)
Checks if can replace one Column to basis, returns update alpha Fills in region for use later partial...
virtual int updateColumnTranspose(CoinIndexedVector ®ionSparse) const =0
Updates one column (BTRAN) from unpacked regionSparse.
virtual void updateFullColumn(CoinIndexedVector ®ionSparse) const
This version does FTRAN on array when indices not set up.
CoinAbcDenseFactorization()
Default constructor.
virtual int numberElements() const =0
Total number of elements in factorization.
virtual int numberElements() const
Total number of elements in factorization.
int pivots() const
Returns number of pivots since factorization.
virtual int updateColumnFTPart1(CoinIndexedVector ®ionSparse)
Updates one column (FTRAN) from unpacked regionSparse Tries to do FT update number returned is negati...
int maximumRows_
Maximum rows ever (i.e. use to copy arrays etc)
virtual void replaceColumnPart3(const AbcSimplex *model, CoinIndexedVector *regionSparse, CoinIndexedVector *tableauColumn, int pivotRow, double alpha)
Replaces one Column to basis, partial update already in U.
virtual ~CoinAbcAnyFactorization()
Destructor.
virtual int factor(AbcSimplex *model)
Does most of factorization returning status 0 - OK -99 - needs more memory -1 - singular - use number...
virtual int updateTwoColumnsFT(CoinIndexedVector ®ionFT, CoinIndexedVector ®ionOther)=0
does FTRAN on two unpacked columns
virtual CoinBigIndex * starts() const
Returns array to put basis starts in.
virtual int * pivotRow() const
Returns pivot row.
virtual CoinFactorizationDouble * workArea() const
Returns work area.
int solveMode() const
Get solve mode e.g.
int * pivotRow_
Pivot row.
virtual int updateColumn(CoinIndexedVector ®ionSparse) const
This version has same effect as above with FTUpdate==false so number returned is always >=0...
CoinBigIndex maximumSpace_
Maximum length of iterating area.
friend void CoinAbcDenseFactorizationUnitTest(const std::string &mpsDir)
virtual void updateFullColumnTranspose(CoinIndexedVector ®ionSparse) const
Updates one column (BTRAN) from unpacked regionSparse.
virtual void goSparse()
Sees whether to go sparse.
virtual int * indices() const
Returns array to put basis indices in.
virtual int * indices() const =0
Returns array to put basis indices in.
virtual double checkReplacePart1(CoinIndexedVector *, int)
Checks if can replace one Column to basis, returns update alpha Fills in region for use later partial...
virtual int * permute() const =0
Returns permute in.
virtual void updateColumnFT(CoinIndexedVector ®ionSparseFT, CoinIndexedVector &, int)
Updates one column (FTRAN) from unpacked regionSparse Tries to do FT update number returned is negati...
int numberGoodU_
Number factorized in U (not row singletons)
int numberGoodColumns() const
Number of good columns in factorization.
double pivotTolerance_
Pivot tolerance.
CoinFactorizationDouble * elements_
Elements of factorization and updates length is maxR*maxR+maxSpace will always be long enough so can ...
double areaFactor() const
Area factor.
double maximumCoefficient() const
Returns maximum absolute value in factorization.
virtual void updateColumnTransposeCpu(CoinIndexedVector ®ionSparse, int whichCpu) const
Updates one column (BTRAN)
virtual int updateColumnTranspose(CoinIndexedVector ®ionSparse) const
Updates one column (BTRAN) from unpacked regionSparse.
virtual int checkReplacePart2(int pivotRow, double btranAlpha, double ftranAlpha, double ftAlpha, double acceptablePivot=1.0e-8)
Checks if can replace one Column to basis, returns 0=OK, 1=Probably OK, 2=singular, 3=no room, 5 max pivots.
CoinBigIndex factorElements_
Number of elements after factorization.
void setNumberRows(int value)
Set number of Rows after factorization.
virtual int * numberInColumn() const
Number of entries in each column.
virtual void updateFullColumn(CoinIndexedVector ®ionSparse) const =0
This version does FTRAN on array when indices not set up.
virtual void replaceColumnPart3(const AbcSimplex *model, CoinIndexedVector *regionSparse, CoinIndexedVector *tableauColumn, CoinIndexedVector *, int pivotRow, double alpha)
Replaces one Column to basis, partial update in vector.
virtual void updateColumnFTPart2(CoinIndexedVector ®ionSparse)=0
Updates one column (FTRAN) from unpacked regionSparse Tries to do FT update number returned is negati...
int numberPivots_
Number pivots since last factorization.
int maximumPivots_
Maximum number of pivots before factorization.
virtual bool wantsTableauColumn() const
Returns true if wants tableauColumn in replaceColumn.
void clearArrays()
Get rid of all memory.
double areaFactor_
Area factor.
double minimumPivotTolerance() const
Minimum pivot tolerance.
double minimumPivotTolerance_
Minimum pivot tolerance.
CoinAbcDenseFactorization & operator=(const CoinAbcDenseFactorization &other)
= copy
void setPivots(int value)
Sets number of pivots since factorization.
virtual void setUsefulInformation(const int *info, int whereFrom)
Useful information for factorization 0 - iteration number whereFrom is 0 for factorize and 1 for repl...
double getAccuracyCheck() const
Returns status.
virtual void preProcess()=0
PreProcesses column ordered copy of basis.