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