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 updateColumnTransposeCpu(CoinIndexedVector ®ionSparse, int whichCpu) const
Updates one column (BTRAN)
virtual void makeNonSingular(int *sequence)=0
Makes a non-singular basis by replacing variables.
double getAccuracyCheck() const
virtual CoinFactorizationDouble * elements() const
Returns array to put basis elements in.
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...
virtual int updateColumn(CoinIndexedVector ®ionSparse) const
This version has same effect as above with FTUpdate==false so number returned is always >=0.
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...
virtual CoinAbcAnyFactorization * clone() const
Clone.
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.
double maximumCoefficient() const
Returns maximum absolute value in factorization.
virtual double checkReplacePart1(CoinIndexedVector *, int)
Checks if can replace one Column to basis, returns update alpha Fills in region for use later partial...
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.
Abstract base class which also has some scalars so can be used from Dense or Simp.
virtual void updateFullColumnTranspose(CoinIndexedVector ®ionSparse) const =0
Updates one column (BTRAN) from unpacked regionSparse.
virtual int updateColumnFTPart1(CoinIndexedVector ®ionSparse)=0
virtual int * pivotRow() const
Returns pivot row.
int numberSlacks_
Number slacks.
int numberPivots_
Number pivots since last factorization.
int numberSlacks() const
Returns number of slacks.
virtual int updateColumnTranspose(CoinIndexedVector ®ionSparse) const =0
Updates one column (BTRAN) from unpacked regionSparse.
virtual void updateColumnFTPart2(CoinIndexedVector &)
CoinSimplexInt numberDense() const
Number of dense rows after factorization.
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
void gutsOfInitialize()
The real work of constructor.
virtual int updateTwoColumnsFT(CoinIndexedVector ®ionFT, CoinIndexedVector ®ionOther)
does FTRAN on two unpacked columns
virtual int * permute() const
Returns permute in.
CoinBigIndex maximumSpace_
Maximum length of iterating area.
int solveMode() const
Get solve mode e.g.
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...
virtual int * permuteBack() const
Returns permute back.
double CoinFactorizationDouble
virtual int updateColumnFTPart1(CoinIndexedVector ®ionSparse)
int status() const
Returns status.
CoinAbcDenseFactorization()
Default constructor.
double pivotTolerance() const
Pivot tolerance.
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 ...
virtual int * pivotColumn() const
Returns pivotColumn or permute.
int numberGoodU_
Number factorized in U (not row singletons)
virtual CoinFactorizationDouble * workArea() const
Returns work area.
int checkPivot(double saveFromU, double oldPivot) const
Returns accuracy status of replaceColumn returns 0=OK, 1=Probably OK, 2=singular.
virtual void makeNonSingular(int *sequence)
Makes a non-singular basis by replacing variables.
int maximumPivots_
Maximum number of pivots before factorization.
virtual int * numberInColumn() const
Number of entries in each column.
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 int * numberInRow() const
Number of entries in each row.
virtual void updateColumnCpu(CoinIndexedVector ®ionSparse, int whichCpu) const
Updates one column (FTRAN)
void setNumberRows(int value)
Set number of Rows after factorization.
virtual void updateFullColumn(CoinIndexedVector ®ionSparse) const
This version does FTRAN on array when indices not set up.
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 int updateColumnTranspose(CoinIndexedVector ®ionSparse) const
Updates one column (BTRAN) from unpacked regionSparse.
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 int * indices() const
Returns array to put basis indices in.
virtual ~CoinAbcDenseFactorization()
Destructor.
void gutsOfCopy(const CoinAbcDenseFactorization &other)
The real work of copy.
int numberGoodColumns() const
Number of good columns in factorization.
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.
virtual void getAreas(int numberRows, int numberColumns, CoinBigIndex maximumL, CoinBigIndex maximumU)
Gets space for a factorization.
double zeroTolerance() const
Zero tolerance.
friend void CoinAbcDenseFactorizationUnitTest(const std::string &mpsDir)
virtual CoinBigIndex * starts() const
Returns array to put basis starts in.
virtual void updateWeights(CoinIndexedVector ®ionSparse) const
Updates one column for dual steepest edge weights (FTRAN)
double minimumPivotTolerance() const
Minimum pivot tolerance.
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.
virtual void updateWeights(CoinIndexedVector ®ionSparse) const =0
Updates one column for dual steepest edge weights (FTRAN)
double pivotTolerance_
Pivot tolerance.
int pivots() const
Returns number of pivots since factorization.
virtual bool wantsTableauColumn() const
Returns true if wants tableauColumn in replaceColumn.
virtual void updateFullColumnTranspose(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)=0
Checks if can replace one Column to basis, returns 0=OK, 1=Probably OK, 2=singular,...
double areaFactor_
Area factor.
void setSolveMode(int value)
Set solve mode e.g.
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,...
int numberRows() const
Number of Rows after factorization.
CoinAbcDenseFactorization & operator=(const CoinAbcDenseFactorization &other)
= copy
double minimumPivotTolerance_
Minimum pivot tolerance.
virtual void checkMarkArrays() const
void gutsOfDestructor()
The real work of desstructor.
int status_
Status of factorization.
int solveMode_
Solve mode e.g.
virtual void clearArrays()
Get rid of all memory.
double zeroTolerance_
Zero tolerance.
double areaFactor() const
Area factor.
int maximumPivots() const
Maximum number of pivots between factorizations.
virtual int numberElements() const
Total number of elements in factorization.
virtual CoinFactorizationDouble * pivotRegion() const
virtual int * intWorkArea() const
Returns int work area.
virtual void goSparse()
Sees whether to go sparse.
virtual void updateColumnFTPart2(CoinIndexedVector ®ionSparse)=0
CoinBigIndex factorElements_
Number of elements after 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.